diff options
Diffstat (limited to 'Python')
38 files changed, 9468 insertions, 7049 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 44fdafc..994e721 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -349,13 +349,14 @@ static PyTypeObject *And_type; static PyTypeObject *Or_type; static PyTypeObject *operator_type; static PyObject *Add_singleton, *Sub_singleton, *Mult_singleton, -*Div_singleton, *Mod_singleton, *Pow_singleton, *LShift_singleton, -*RShift_singleton, *BitOr_singleton, *BitXor_singleton, *BitAnd_singleton, -*FloorDiv_singleton; +*MatMult_singleton, *Div_singleton, *Mod_singleton, *Pow_singleton, +*LShift_singleton, *RShift_singleton, *BitOr_singleton, *BitXor_singleton, +*BitAnd_singleton, *FloorDiv_singleton; static PyObject* ast2obj_operator(operator_ty); static PyTypeObject *Add_type; static PyTypeObject *Sub_type; static PyTypeObject *Mult_type; +static PyTypeObject *MatMult_type; static PyTypeObject *Div_type; static PyTypeObject *Mod_type; static PyTypeObject *Pow_type; @@ -970,6 +971,10 @@ static int init_types(void) if (!Mult_type) return 0; Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL); if (!Mult_singleton) return 0; + MatMult_type = make_type("MatMult", operator_type, NULL, 0); + if (!MatMult_type) return 0; + MatMult_singleton = PyType_GenericNew(MatMult_type, NULL, NULL); + if (!MatMult_singleton) return 0; Div_type = make_type("Div", operator_type, NULL, 0); if (!Div_type) return 0; Div_singleton = PyType_GenericNew(Div_type, NULL, NULL); @@ -3232,6 +3237,9 @@ PyObject* ast2obj_operator(operator_ty o) case Mult: Py_INCREF(Mult_singleton); return Mult_singleton; + case MatMult: + Py_INCREF(MatMult_singleton); + return MatMult_singleton; case Div: Py_INCREF(Div_singleton); return Div_singleton; @@ -6175,6 +6183,14 @@ obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena) *out = Mult; return 0; } + isinstance = PyObject_IsInstance(obj, (PyObject *)MatMult_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + *out = MatMult; + return 0; + } isinstance = PyObject_IsInstance(obj, (PyObject *)Div_type); if (isinstance == -1) { return 1; @@ -6956,6 +6972,8 @@ PyInit__ast(void) if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return NULL; if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return NULL; if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return NULL; + if (PyDict_SetItemString(d, "MatMult", (PyObject*)MatMult_type) < 0) return + NULL; if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return NULL; if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return NULL; if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return NULL; diff --git a/Python/README b/Python/README new file mode 100644 index 0000000..153b628 --- /dev/null +++ b/Python/README @@ -0,0 +1 @@ +Miscellaneous source files for the main Python shared library diff --git a/Python/_warnings.c b/Python/_warnings.c index bef5647..eb29424 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -563,13 +563,12 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, data = PyUnicode_DATA(*filename); #define ascii_lower(c) ((c <= 127) ? Py_TOLOWER(c) : 0) - /* if filename.lower().endswith((".pyc", ".pyo")): */ + /* if filename.lower().endswith(".pyc"): */ if (len >= 4 && PyUnicode_READ(kind, data, len-4) == '.' && ascii_lower(PyUnicode_READ(kind, data, len-3)) == 'p' && ascii_lower(PyUnicode_READ(kind, data, len-2)) == 'y' && - (ascii_lower(PyUnicode_READ(kind, data, len-1)) == 'c' || - ascii_lower(PyUnicode_READ(kind, data, len-1)) == 'o')) + ascii_lower(PyUnicode_READ(kind, data, len-1)) == 'c') { *filename = PyUnicode_Substring(*filename, 0, PyUnicode_GET_LENGTH(*filename)-1); @@ -637,16 +636,17 @@ get_category(PyObject *message, PyObject *category) if (rc == 1) category = (PyObject*)message->ob_type; - else if (category == NULL) + else if (category == NULL || category == Py_None) category = PyExc_UserWarning; /* Validate category. */ rc = PyObject_IsSubclass(category, PyExc_Warning); - if (rc == -1) - return NULL; - if (rc == 0) { - PyErr_SetString(PyExc_ValueError, - "category is not a subclass of Warning"); + /* category is not a subclass of PyExc_Warning or + PyObject_IsSubclass raised an error */ + if (rc == -1 || rc == 0) { + PyErr_Format(PyExc_TypeError, + "category must be a Warning subclass, not '%s'", + Py_TYPE(category)->tp_name); return NULL; } diff --git a/Python/asdl.c b/Python/asdl.c index 74fa941..df387b2 100644 --- a/Python/asdl.c +++ b/Python/asdl.c @@ -5,21 +5,21 @@ asdl_seq * _Py_asdl_seq_new(Py_ssize_t size, PyArena *arena) { asdl_seq *seq = NULL; - size_t n = (size ? (sizeof(void *) * (size - 1)) : 0); + size_t n; /* check size is sane */ - if (size < 0 || size == INT_MIN || - (size && ((size - 1) > (PY_SIZE_MAX / sizeof(void *))))) { + if (size < 0 || + (size && (((size_t)size - 1) > (PY_SIZE_MAX / sizeof(void *))))) { PyErr_NoMemory(); return NULL; } + n = (size ? (sizeof(void *) * (size - 1)) : 0); /* check if size can be added safely */ if (n > PY_SIZE_MAX - sizeof(asdl_seq)) { PyErr_NoMemory(); return NULL; } - n += sizeof(asdl_seq); seq = (asdl_seq *)PyArena_Malloc(arena, n); @@ -36,21 +36,21 @@ asdl_int_seq * _Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena) { asdl_int_seq *seq = NULL; - size_t n = (size ? (sizeof(void *) * (size - 1)) : 0); + size_t n; /* check size is sane */ - if (size < 0 || size == INT_MIN || - (size && ((size - 1) > (PY_SIZE_MAX / sizeof(void *))))) { + if (size < 0 || + (size && (((size_t)size - 1) > (PY_SIZE_MAX / sizeof(void *))))) { PyErr_NoMemory(); return NULL; } + n = (size ? (sizeof(void *) * (size - 1)) : 0); /* check if size can be added safely */ if (n > PY_SIZE_MAX - sizeof(asdl_seq)) { PyErr_NoMemory(); return NULL; } - n += sizeof(asdl_seq); seq = (asdl_int_seq *)PyArena_Malloc(arena, n); diff --git a/Python/ast.c b/Python/ast.c index d50cb80..b48471e 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -115,7 +115,7 @@ validate_arguments(arguments_ty args) } if (!validate_args(args->kwonlyargs)) return 0; - if (args->kwarg && args->kwarg->annotation + if (args->kwarg && args->kwarg->annotation && !validate_expr(args->kwarg->annotation, Load)) { return 0; } @@ -164,6 +164,8 @@ validate_expr(expr_ty exp, expr_context_ty ctx) return 0; } check_ctx = 0; + /* set actual_ctx to prevent gcc warning */ + actual_ctx = 0; } if (check_ctx && actual_ctx != ctx) { PyErr_Format(PyExc_ValueError, "expression must have %s context but has %s instead", @@ -451,7 +453,7 @@ validate_exprs(asdl_seq *exprs, expr_context_ty ctx, int null_ok) "None disallowed in expression list"); return 0; } - + } return 1; } @@ -825,6 +827,8 @@ get_operator(const node *n) return Sub; case STAR: return Mult; + case AT: + return MatMult; case SLASH: return Div; case DOUBLESLASH: @@ -1030,6 +1034,8 @@ ast_for_augassign(struct compiling *c, const node *n) return Pow; else return Mult; + case '@': + return MatMult; default: PyErr_Format(PyExc_SystemError, "invalid augassign: %s", STR(n)); return (operator_ty)0; @@ -2257,7 +2263,7 @@ ast_for_expr(struct compiling *c, const node *n) and_expr: shift_expr ('&' shift_expr)* shift_expr: arith_expr (('<<'|'>>') arith_expr)* arith_expr: term (('+'|'-') term)* - term: factor (('*'|'/'|'%'|'//') factor)* + term: factor (('*'|'@'|'/'|'%'|'//') factor)* factor: ('+'|'-'|'~') factor | power power: atom trailer* ('**' factor)* */ @@ -2568,7 +2574,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n) /* expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | ('=' (yield_expr|testlist))*) testlist_star_expr: (test|star_expr) (',' test|star_expr)* [','] - augassign: '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' + augassign: '+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//=' test: ... here starts the operator precendence dance */ diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 4b4f979..e6d2bab 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -46,13 +46,16 @@ _Py_IDENTIFIER(stdin); _Py_IDENTIFIER(stdout); _Py_IDENTIFIER(stderr); +#include "clinic/bltinmodule.c.h" + +/* AC: cannot convert yet, waiting for *args support */ static PyObject * builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) { PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *cell; PyObject *cls = NULL; Py_ssize_t nargs; - int isclass; + int isclass = 0; /* initialize to prevent gcc warning */ assert(args != NULL); if (!PyTuple_Check(args)) { @@ -229,25 +232,42 @@ absolute or relative imports. 0 is absolute while a positive number\n\ is the number of parent directories to search relative to the current module."); +/*[clinic input] +abs as builtin_abs + + x: 'O' + / + +Return the absolute value of the argument. +[clinic start generated code]*/ + static PyObject * -builtin_abs(PyObject *self, PyObject *v) +builtin_abs(PyModuleDef *module, PyObject *x) +/*[clinic end generated code: output=6833047c493ecea2 input=aa29cc07869b4732]*/ { - return PyNumber_Absolute(v); + return PyNumber_Absolute(x); } -PyDoc_STRVAR(abs_doc, -"abs(number) -> number\n\ -\n\ -Return the absolute value of the argument."); +/*[clinic input] +all as builtin_all + + iterable: 'O' + / + +Return True if bool(x) is True for all values x in the iterable. + +If the iterable is empty, return True. +[clinic start generated code]*/ static PyObject * -builtin_all(PyObject *self, PyObject *v) +builtin_all(PyModuleDef *module, PyObject *iterable) +/*[clinic end generated code: output=089e6d1b7bde27b1 input=dd506dc9998d42bd]*/ { PyObject *it, *item; PyObject *(*iternext)(PyObject *); int cmp; - it = PyObject_GetIter(v); + it = PyObject_GetIter(iterable); if (it == NULL) return NULL; iternext = *Py_TYPE(it)->tp_iternext; @@ -277,20 +297,26 @@ builtin_all(PyObject *self, PyObject *v) Py_RETURN_TRUE; } -PyDoc_STRVAR(all_doc, -"all(iterable) -> bool\n\ -\n\ -Return True if bool(x) is True for all values x in the iterable.\n\ -If the iterable is empty, return True."); +/*[clinic input] +any as builtin_any + + iterable: 'O' + / + +Return True if bool(x) is True for any x in the iterable. + +If the iterable is empty, return False. +[clinic start generated code]*/ static PyObject * -builtin_any(PyObject *self, PyObject *v) +builtin_any(PyModuleDef *module, PyObject *iterable) +/*[clinic end generated code: output=1be994b2c2307492 input=8fe8460f3fbbced8]*/ { PyObject *it, *item; PyObject *(*iternext)(PyObject *); int cmp; - it = PyObject_GetIter(v); + it = PyObject_GetIter(iterable); if (it == NULL) return NULL; iternext = *Py_TYPE(it)->tp_iternext; @@ -320,56 +346,67 @@ builtin_any(PyObject *self, PyObject *v) Py_RETURN_FALSE; } -PyDoc_STRVAR(any_doc, -"any(iterable) -> bool\n\ -\n\ -Return True if bool(x) is True for any x in the iterable.\n\ -If the iterable is empty, return False."); +/*[clinic input] +ascii as builtin_ascii + + obj: 'O' + / + +Return an ASCII-only representation of an object. + +As repr(), return a string containing a printable representation of an +object, but escape the non-ASCII characters in the string returned by +repr() using \\x, \\u or \\U escapes. This generates a string similar +to that returned by repr() in Python 2. +[clinic start generated code]*/ static PyObject * -builtin_ascii(PyObject *self, PyObject *v) +builtin_ascii(PyModuleDef *module, PyObject *obj) +/*[clinic end generated code: output=d4e862c48af2a933 input=0cbdc1420a306325]*/ { - return PyObject_ASCII(v); + return PyObject_ASCII(obj); } -PyDoc_STRVAR(ascii_doc, -"ascii(object) -> string\n\ -\n\ -As repr(), return a string containing a printable representation of an\n\ -object, but escape the non-ASCII characters in the string returned by\n\ -repr() using \\x, \\u or \\U escapes. This generates a string similar\n\ -to that returned by repr() in Python 2."); +/*[clinic input] +bin as builtin_bin + + number: 'O' + / + +Return the binary representation of an integer. + + >>> bin(2796202) + '0b1010101010101010101010' +[clinic start generated code]*/ static PyObject * -builtin_bin(PyObject *self, PyObject *v) +builtin_bin(PyModuleDef *module, PyObject *number) +/*[clinic end generated code: output=25ee26c6cf3bbb54 input=2a6362ae9a9c9203]*/ { - return PyNumber_ToBase(v, 2); + return PyNumber_ToBase(number, 2); } -PyDoc_STRVAR(bin_doc, -"bin(number) -> string\n\ -\n\ -Return the binary representation of an integer.\n\ -\n\ - >>> bin(2796202)\n\ - '0b1010101010101010101010'\n\ -"); +/*[clinic input] +callable as builtin_callable + + obj: 'O' + / + +Return whether the object is callable (i.e., some kind of function). + +Note that classes are callable, as are instances of classes with a +__call__() method. +[clinic start generated code]*/ static PyObject * -builtin_callable(PyObject *self, PyObject *v) +builtin_callable(PyModuleDef *module, PyObject *obj) +/*[clinic end generated code: output=f4df2ce92364b656 input=bb3bb528fffdade4]*/ { - return PyBool_FromLong((long)PyCallable_Check(v)); + return PyBool_FromLong((long)PyCallable_Check(obj)); } -PyDoc_STRVAR(callable_doc, -"callable(object) -> bool\n\ -\n\ -Return whether the object is callable (i.e., some kind of function).\n\ -Note that classes are callable, as are instances of classes with a\n\ -__call__() method."); - typedef struct { PyObject_HEAD @@ -524,39 +561,41 @@ PyTypeObject PyFilter_Type = { }; -static PyObject * -builtin_format(PyObject *self, PyObject *args) -{ - PyObject *value; - PyObject *format_spec = NULL; +/*[clinic input] +format as builtin_format - if (!PyArg_ParseTuple(args, "O|U:format", &value, &format_spec)) - return NULL; + value: 'O' + format_spec: unicode(c_default="NULL") = '' + / - return PyObject_Format(value, format_spec); -} +Return value.__format__(format_spec) -PyDoc_STRVAR(format_doc, -"format(value[, format_spec]) -> string\n\ -\n\ -Returns value.__format__(format_spec)\n\ -format_spec defaults to \"\""); +format_spec defaults to the empty string +[clinic start generated code]*/ static PyObject * -builtin_chr(PyObject *self, PyObject *args) +builtin_format_impl(PyModuleDef *module, PyObject *value, + PyObject *format_spec) +/*[clinic end generated code: output=4341fd78a5f01764 input=e23f2f11e0098c64]*/ { - int x; + return PyObject_Format(value, format_spec); +} - if (!PyArg_ParseTuple(args, "i:chr", &x)) - return NULL; +/*[clinic input] +chr as builtin_chr - return PyUnicode_FromOrdinal(x); -} + i: 'i' + / -PyDoc_STRVAR(chr_doc, -"chr(i) -> Unicode character\n\ -\n\ -Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."); +Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff. +[clinic start generated code]*/ + +static PyObject * +builtin_chr_impl(PyModuleDef *module, int i) +/*[clinic end generated code: output=67fe4d87e690f373 input=9b1ced29615adf66]*/ +{ + return PyUnicode_FromOrdinal(i); +} static const char * @@ -582,8 +621,8 @@ source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompil return NULL; } - if (strlen(str) != size) { - PyErr_SetString(PyExc_TypeError, + if (strlen(str) != (size_t)size) { + PyErr_SetString(PyExc_ValueError, "source code string cannot contain null bytes"); PyBuffer_Release(view); return NULL; @@ -591,35 +630,47 @@ source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompil return str; } +/*[clinic input] +compile as builtin_compile + + source: 'O' + filename: object(converter="PyUnicode_FSDecoder") + mode: 's' + flags: 'i' = 0 + dont_inherit: 'i' = 0 + optimize: 'i' = -1 + +Compile source into a code object that can be executed by exec() or eval(). + +The source code may represent a Python module, statement or expression. +The filename will be used for run-time error messages. +The mode must be 'exec' to compile a module, 'single' to compile a +single (interactive) statement, or 'eval' to compile an expression. +The flags argument, if present, controls which future statements influence +the compilation of the code. +The dont_inherit argument, if non-zero, stops the compilation inheriting +the effects of any future statements in effect in the code calling +compile; if absent or zero these statements do influence the compilation, +in addition to any features explicitly specified. +[clinic start generated code]*/ + static PyObject * -builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) +builtin_compile_impl(PyModuleDef *module, PyObject *source, + PyObject *filename, const char *mode, int flags, + int dont_inherit, int optimize) +/*[clinic end generated code: output=31881762c1bb90c4 input=c6212a9d21472f7e]*/ { Py_buffer view = {NULL, NULL}; const char *str; - PyObject *filename; - char *startstr; - int mode = -1; - int dont_inherit = 0; - int supplied_flags = 0; - int optimize = -1; + int compile_mode = -1; int is_ast; PyCompilerFlags cf; - PyObject *cmd; - static char *kwlist[] = {"source", "filename", "mode", "flags", - "dont_inherit", "optimize", NULL}; int start[] = {Py_file_input, Py_eval_input, Py_single_input}; PyObject *result; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist, - &cmd, - PyUnicode_FSDecoder, &filename, - &startstr, &supplied_flags, - &dont_inherit, &optimize)) - return NULL; - - cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8; + cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8; - if (supplied_flags & + if (flags & ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST)) { PyErr_SetString(PyExc_ValueError, @@ -638,25 +689,25 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) PyEval_MergeCompilerFlags(&cf); } - if (strcmp(startstr, "exec") == 0) - mode = 0; - else if (strcmp(startstr, "eval") == 0) - mode = 1; - else if (strcmp(startstr, "single") == 0) - mode = 2; + if (strcmp(mode, "exec") == 0) + compile_mode = 0; + else if (strcmp(mode, "eval") == 0) + compile_mode = 1; + else if (strcmp(mode, "single") == 0) + compile_mode = 2; else { PyErr_SetString(PyExc_ValueError, - "compile() arg 3 must be 'exec', 'eval' or 'single'"); + "compile() mode must be 'exec', 'eval' or 'single'"); goto error; } - is_ast = PyAST_Check(cmd); + is_ast = PyAST_Check(source); if (is_ast == -1) goto error; if (is_ast) { - if (supplied_flags & PyCF_ONLY_AST) { - Py_INCREF(cmd); - result = cmd; + if (flags & PyCF_ONLY_AST) { + Py_INCREF(source); + result = source; } else { PyArena *arena; @@ -665,7 +716,7 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) arena = PyArena_New(); if (arena == NULL) goto error; - mod = PyAST_obj2mod(cmd, arena, mode); + mod = PyAST_obj2mod(source, arena, compile_mode); if (mod == NULL) { PyArena_Free(arena); goto error; @@ -681,11 +732,11 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) goto finally; } - str = source_as_string(cmd, "compile", "string, bytes or AST", &cf, &view); + str = source_as_string(source, "compile", "string, bytes or AST", &cf, &view); if (str == NULL) goto error; - result = Py_CompileStringObject(str, filename, start[mode], &cf, optimize); + result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize); PyBuffer_Release(&view); goto finally; @@ -696,21 +747,7 @@ finally: return result; } -PyDoc_STRVAR(compile_doc, -"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\ -\n\ -Compile the source (a Python module, statement or expression)\n\ -into a code object that can be executed by exec() or eval().\n\ -The filename will be used for run-time error messages.\n\ -The mode must be 'exec' to compile a module, 'single' to compile a\n\ -single (interactive) statement, or 'eval' to compile an expression.\n\ -The flags argument, if present, controls which future statements influence\n\ -the compilation of the code.\n\ -The dont_inherit argument, if non-zero, stops the compilation inheriting\n\ -the effects of any future statements in effect in the code calling\n\ -compile; if absent or zero these statements do influence the compilation,\n\ -in addition to any features explicitly specified."); - +/* AC: cannot convert yet, as needs PEP 457 group support in inspect */ static PyObject * builtin_dir(PyObject *self, PyObject *args) { @@ -735,33 +772,51 @@ PyDoc_STRVAR(dir_doc, " for any other object: its attributes, its class's attributes, and\n" " recursively the attributes of its class's base classes."); +/*[clinic input] +divmod as builtin_divmod + + x: 'O' + y: 'O' + / + +Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x. +[clinic start generated code]*/ + static PyObject * -builtin_divmod(PyObject *self, PyObject *args) +builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y) +/*[clinic end generated code: output=9ad0076120ebf9ac input=c9c617b7bb74c615]*/ { - PyObject *v, *w; - - if (!PyArg_UnpackTuple(args, "divmod", 2, 2, &v, &w)) - return NULL; - return PyNumber_Divmod(v, w); + return PyNumber_Divmod(x, y); } -PyDoc_STRVAR(divmod_doc, -"divmod(x, y) -> (div, mod)\n\ -\n\ -Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x."); +/*[clinic input] +eval as builtin_eval + + source: 'O' + globals: 'O' = None + locals: 'O' = None + / + +Evaluate the given source in the context of globals and locals. + +The source may be a string representing a Python expression +or a code object as returned by compile(). +The globals must be a dictionary and locals can be any mapping, +defaulting to the current globals and locals. +If only globals is given, locals defaults to it. +[clinic start generated code]*/ static PyObject * -builtin_eval(PyObject *self, PyObject *args) +builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, + PyObject *locals) +/*[clinic end generated code: output=7284501fb7b4d666 input=31e42c1d2125b50b]*/ { - PyObject *cmd, *result, *tmp = NULL; - PyObject *globals = Py_None, *locals = Py_None; + PyObject *result, *tmp = NULL; Py_buffer view = {NULL, NULL}; const char *str; PyCompilerFlags cf; - if (!PyArg_UnpackTuple(args, "eval", 1, 3, &cmd, &globals, &locals)) - return NULL; if (locals != Py_None && !PyMapping_Check(locals)) { PyErr_SetString(PyExc_TypeError, "locals must be a mapping"); return NULL; @@ -796,17 +851,17 @@ builtin_eval(PyObject *self, PyObject *args) return NULL; } - if (PyCode_Check(cmd)) { - if (PyCode_GetNumFree((PyCodeObject *)cmd) > 0) { + if (PyCode_Check(source)) { + if (PyCode_GetNumFree((PyCodeObject *)source) > 0) { PyErr_SetString(PyExc_TypeError, "code object passed to eval() may not contain free variables"); return NULL; } - return PyEval_EvalCode(cmd, globals, locals); + return PyEval_EvalCode(source, globals, locals); } cf.cf_flags = PyCF_SOURCE_IS_UTF8; - str = source_as_string(cmd, "eval", "string, bytes or code", &cf, &view); + str = source_as_string(source, "eval", "string, bytes or code", &cf, &view); if (str == NULL) return NULL; @@ -820,24 +875,29 @@ builtin_eval(PyObject *self, PyObject *args) return result; } -PyDoc_STRVAR(eval_doc, -"eval(source[, globals[, locals]]) -> value\n\ -\n\ -Evaluate the source in the context of globals and locals.\n\ -The source may be a string representing a Python expression\n\ -or a code object as returned by compile().\n\ -The globals must be a dictionary and locals can be any mapping,\n\ -defaulting to the current globals and locals.\n\ -If only globals is given, locals defaults to it.\n"); +/*[clinic input] +exec as builtin_exec + + source: 'O' + globals: 'O' = None + locals: 'O' = None + / + +Execute the given source in the context of globals and locals. + +The source may be a string representing one or more Python statements +or a code object as returned by compile(). +The globals must be a dictionary and locals can be any mapping, +defaulting to the current globals and locals. +If only globals is given, locals defaults to it. +[clinic start generated code]*/ static PyObject * -builtin_exec(PyObject *self, PyObject *args) +builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, + PyObject *locals) +/*[clinic end generated code: output=83d574ef9d5d0b46 input=536e057b5e00d89e]*/ { PyObject *v; - PyObject *prog, *globals = Py_None, *locals = Py_None; - - if (!PyArg_UnpackTuple(args, "exec", 1, 3, &prog, &globals, &locals)) - return NULL; if (globals == Py_None) { globals = PyEval_GetGlobals(); @@ -856,13 +916,13 @@ builtin_exec(PyObject *self, PyObject *args) locals = globals; if (!PyDict_Check(globals)) { - PyErr_Format(PyExc_TypeError, "exec() arg 2 must be a dict, not %.100s", + PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s", globals->ob_type->tp_name); return NULL; } if (!PyMapping_Check(locals)) { PyErr_Format(PyExc_TypeError, - "arg 3 must be a mapping or None, not %.100s", + "locals must be a mapping or None, not %.100s", locals->ob_type->tp_name); return NULL; } @@ -872,22 +932,22 @@ builtin_exec(PyObject *self, PyObject *args) return NULL; } - if (PyCode_Check(prog)) { - if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) { + if (PyCode_Check(source)) { + if (PyCode_GetNumFree((PyCodeObject *)source) > 0) { PyErr_SetString(PyExc_TypeError, "code object passed to exec() may not " "contain free variables"); return NULL; } - v = PyEval_EvalCode(prog, globals, locals); + v = PyEval_EvalCode(source, globals, locals); } else { Py_buffer view = {NULL, NULL}; const char *str; PyCompilerFlags cf; cf.cf_flags = PyCF_SOURCE_IS_UTF8; - str = source_as_string(prog, "exec", - "string, bytes or code", &cf, &view); + str = source_as_string(source, "exec", + "string, bytes or code", &cf, &view); if (str == NULL) return NULL; if (PyEval_MergeCompilerFlags(&cf)) @@ -903,15 +963,8 @@ builtin_exec(PyObject *self, PyObject *args) Py_RETURN_NONE; } -PyDoc_STRVAR(exec_doc, -"exec(object[, globals[, locals]])\n\ -\n\ -Read and execute code from an object, which can be a string or a code\n\ -object.\n\ -The globals and locals are dictionaries, defaulting to the current\n\ -globals and locals. If only globals is given, locals defaults to it."); - +/* AC: cannot convert yet, as needs PEP 457 group support in inspect */ static PyObject * builtin_getattr(PyObject *self, PyObject *args) { @@ -945,8 +998,18 @@ When a default argument is given, it is returned when the attribute doesn't\n\ exist; without it, an exception is raised in that case."); +/*[clinic input] +globals as builtin_globals + +Return the dictionary containing the current scope's global variables. + +NOTE: Updates to this dictionary *will* affect name lookups in the current +global scope and vice-versa. +[clinic start generated code]*/ + static PyObject * -builtin_globals(PyObject *self) +builtin_globals_impl(PyModuleDef *module) +/*[clinic end generated code: output=4958645e96dd8138 input=9327576f92bb48ba]*/ { PyObject *d; @@ -955,26 +1018,31 @@ builtin_globals(PyObject *self) return d; } -PyDoc_STRVAR(globals_doc, -"globals() -> dictionary\n\ -\n\ -Return the dictionary containing the current scope's global variables."); +/*[clinic input] +hasattr as builtin_hasattr + + obj: 'O' + name: 'O' + / + +Return whether the object has an attribute with the given name. + +This is done by calling getattr(obj, name) and catching AttributeError. +[clinic start generated code]*/ static PyObject * -builtin_hasattr(PyObject *self, PyObject *args) +builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name) +/*[clinic end generated code: output=81154fdd63634696 input=b50bad5f739ea10d]*/ { PyObject *v; - PyObject *name; - if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, &v, &name)) - return NULL; if (!PyUnicode_Check(name)) { PyErr_SetString(PyExc_TypeError, "hasattr(): attribute name must be string"); return NULL; } - v = PyObject_GetAttr(v, name); + v = PyObject_GetAttr(obj, name); if (v == NULL) { if (PyErr_ExceptionMatches(PyExc_AttributeError)) { PyErr_Clear(); @@ -986,25 +1054,31 @@ builtin_hasattr(PyObject *self, PyObject *args) Py_RETURN_TRUE; } -PyDoc_STRVAR(hasattr_doc, -"hasattr(object, name) -> bool\n\ -\n\ -Return whether the object has an attribute with the given name.\n\ -(This is done by calling getattr(object, name) and catching AttributeError.)"); +/* AC: gdb's integration with CPython relies on builtin_id having + * the *exact* parameter names of "self" and "v", so we ensure we + * preserve those name rather than using the AC defaults. + */ +/*[clinic input] +id as builtin_id + + self: self(type="PyModuleDef *") + obj as v: 'O' + / + +Return the identity of an object. + +This is guaranteed to be unique among simultaneously existing objects. +(CPython uses the object's memory address.) +[clinic start generated code]*/ static PyObject * -builtin_id(PyObject *self, PyObject *v) +builtin_id(PyModuleDef *self, PyObject *v) +/*[clinic end generated code: output=0aa640785f697f65 input=a1f988d98357341d]*/ { return PyLong_FromVoidPtr(v); } -PyDoc_STRVAR(id_doc, -"id(object) -> integer\n\ -\n\ -Return the identity of an object. This is guaranteed to be unique among\n\ -simultaneously existing objects. (Hint: it's the object's memory address.)"); - /* map object ************************************************************/ @@ -1177,6 +1251,8 @@ PyTypeObject PyMap_Type = { PyObject_GC_Del, /* tp_free */ }; + +/* AC: cannot convert yet, as needs PEP 457 group support in inspect */ static PyObject * builtin_next(PyObject *self, PyObject *args) { @@ -1218,83 +1294,100 @@ Return the next item from the iterator. If default is given and the iterator\n\ is exhausted, it is returned instead of raising StopIteration."); +/*[clinic input] +setattr as builtin_setattr + + obj: 'O' + name: 'O' + value: 'O' + / + +Sets the named attribute on the given object to the specified value. + +setattr(x, 'y', v) is equivalent to ``x.y = v'' +[clinic start generated code]*/ + static PyObject * -builtin_setattr(PyObject *self, PyObject *args) +builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, + PyObject *value) +/*[clinic end generated code: output=d881c655c0f7e34f input=fbe7e53403116b93]*/ { - PyObject *v; - PyObject *name; - PyObject *value; - - if (!PyArg_UnpackTuple(args, "setattr", 3, 3, &v, &name, &value)) - return NULL; - if (PyObject_SetAttr(v, name, value) != 0) + if (PyObject_SetAttr(obj, name, value) != 0) return NULL; Py_INCREF(Py_None); return Py_None; } -PyDoc_STRVAR(setattr_doc, -"setattr(object, name, value)\n\ -\n\ -Set a named attribute on an object; setattr(x, 'y', v) is equivalent to\n\ -``x.y = v''."); +/*[clinic input] +delattr as builtin_delattr + + obj: 'O' + name: 'O' + / + +Deletes the named attribute from the given object. + +delattr(x, 'y') is equivalent to ``del x.y'' +[clinic start generated code]*/ static PyObject * -builtin_delattr(PyObject *self, PyObject *args) +builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name) +/*[clinic end generated code: output=ef653e698a0b4187 input=647af2ce9183a823]*/ { - PyObject *v; - PyObject *name; - - if (!PyArg_UnpackTuple(args, "delattr", 2, 2, &v, &name)) - return NULL; - if (PyObject_SetAttr(v, name, (PyObject *)NULL) != 0) + if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0) return NULL; Py_INCREF(Py_None); return Py_None; } -PyDoc_STRVAR(delattr_doc, -"delattr(object, name)\n\ -\n\ -Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\ -``del x.y''."); +/*[clinic input] +hash as builtin_hash + + obj: 'O' + / + +Return the hash value for the given object. + +Two objects that compare equal must also have the same hash value, but the +reverse is not necessarily true. +[clinic start generated code]*/ static PyObject * -builtin_hash(PyObject *self, PyObject *v) +builtin_hash(PyModuleDef *module, PyObject *obj) +/*[clinic end generated code: output=1f32ff154c1f751a input=ccc4d2b9a351df4e]*/ { Py_hash_t x; - x = PyObject_Hash(v); + x = PyObject_Hash(obj); if (x == -1) return NULL; return PyLong_FromSsize_t(x); } -PyDoc_STRVAR(hash_doc, -"hash(object) -> integer\n\ -\n\ -Return a hash value for the object. Two objects with the same value have\n\ -the same hash value. The reverse is not necessarily true, but likely."); +/*[clinic input] +hex as builtin_hex + + number: 'O' + / + +Return the hexadecimal representation of an integer. + + >>> hex(12648430) + '0xc0ffee' +[clinic start generated code]*/ static PyObject * -builtin_hex(PyObject *self, PyObject *v) +builtin_hex(PyModuleDef *module, PyObject *number) +/*[clinic end generated code: output=618489ce3cbc5858 input=e816200b0a728ebe]*/ { - return PyNumber_ToBase(v, 16); + return PyNumber_ToBase(number, 16); } -PyDoc_STRVAR(hex_doc, -"hex(number) -> string\n\ -\n\ -Return the hexadecimal representation of an integer.\n\ -\n\ - >>> hex(3735928559)\n\ - '0xdeadbeef'\n\ -"); - +/* AC: cannot convert yet, as needs PEP 457 group support in inspect */ static PyObject * builtin_iter(PyObject *self, PyObject *args) { @@ -1321,25 +1414,41 @@ supply its own iterator, or be a sequence.\n\ In the second form, the callable is called until it returns the sentinel."); +/*[clinic input] +len as builtin_len + + obj: 'O' + / + +Return the number of items in a container. +[clinic start generated code]*/ + static PyObject * -builtin_len(PyObject *self, PyObject *v) +builtin_len(PyModuleDef *module, PyObject *obj) +/*[clinic end generated code: output=8e5837b6f81d915b input=2e5ff15db9a2de22]*/ { Py_ssize_t res; - res = PyObject_Size(v); + res = PyObject_Size(obj); if (res < 0 && PyErr_Occurred()) return NULL; return PyLong_FromSsize_t(res); } -PyDoc_STRVAR(len_doc, -"len(object)\n\ -\n\ -Return the number of items of a sequence or collection."); +/*[clinic input] +locals as builtin_locals + +Return a dictionary containing the current scope's local variables. + +NOTE: Whether or not updates to this dictionary will affect name lookups in +the local scope and vice-versa is *implementation dependent* and not +covered by any backwards compatibility guarantees. +[clinic start generated code]*/ static PyObject * -builtin_locals(PyObject *self) +builtin_locals_impl(PyModuleDef *module) +/*[clinic end generated code: output=8b5a41f12e19d13a input=7874018d478d5c4b]*/ { PyObject *d; @@ -1348,11 +1457,6 @@ builtin_locals(PyObject *self) return d; } -PyDoc_STRVAR(locals_doc, -"locals() -> dictionary\n\ -\n\ -Update and return a dictionary containing the current scope's local variables."); - static PyObject * min_max(PyObject *args, PyObject *kwds, int op) @@ -1455,6 +1559,7 @@ Fail_it: return NULL; } +/* AC: cannot convert yet, waiting for *args support */ static PyObject * builtin_min(PyObject *self, PyObject *args, PyObject *kwds) { @@ -1471,6 +1576,7 @@ the provided iterable is empty.\n\ With two or more arguments, return the smallest argument."); +/* AC: cannot convert yet, waiting for *args support */ static PyObject * builtin_max(PyObject *self, PyObject *args, PyObject *kwds) { @@ -1487,56 +1593,70 @@ the provided iterable is empty.\n\ With two or more arguments, return the largest argument."); +/*[clinic input] +oct as builtin_oct + + number: 'O' + / + +Return the octal representation of an integer. + + >>> oct(342391) + '0o1234567' +[clinic start generated code]*/ + static PyObject * -builtin_oct(PyObject *self, PyObject *v) +builtin_oct(PyModuleDef *module, PyObject *number) +/*[clinic end generated code: output=18f701bc6d8f804a input=a3a372b521b3dd13]*/ { - return PyNumber_ToBase(v, 8); + return PyNumber_ToBase(number, 8); } -PyDoc_STRVAR(oct_doc, -"oct(number) -> string\n\ -\n\ -Return the octal representation of an integer.\n\ -\n\ - >>> oct(342391)\n\ - '0o1234567'\n\ -"); +/*[clinic input] +ord as builtin_ord + + c: 'O' + / + +Return the Unicode code point for a one-character string. +[clinic start generated code]*/ static PyObject * -builtin_ord(PyObject *self, PyObject* obj) +builtin_ord(PyModuleDef *module, PyObject *c) +/*[clinic end generated code: output=04fd27272d9462f6 input=762355f87451efa3]*/ { long ord; Py_ssize_t size; - if (PyBytes_Check(obj)) { - size = PyBytes_GET_SIZE(obj); + if (PyBytes_Check(c)) { + size = PyBytes_GET_SIZE(c); if (size == 1) { - ord = (long)((unsigned char)*PyBytes_AS_STRING(obj)); + ord = (long)((unsigned char)*PyBytes_AS_STRING(c)); return PyLong_FromLong(ord); } } - else if (PyUnicode_Check(obj)) { - if (PyUnicode_READY(obj) == -1) + else if (PyUnicode_Check(c)) { + if (PyUnicode_READY(c) == -1) return NULL; - size = PyUnicode_GET_LENGTH(obj); + size = PyUnicode_GET_LENGTH(c); if (size == 1) { - ord = (long)PyUnicode_READ_CHAR(obj, 0); + ord = (long)PyUnicode_READ_CHAR(c, 0); return PyLong_FromLong(ord); } } - else if (PyByteArray_Check(obj)) { + else if (PyByteArray_Check(c)) { /* XXX Hopefully this is temporary */ - size = PyByteArray_GET_SIZE(obj); + size = PyByteArray_GET_SIZE(c); if (size == 1) { - ord = (long)((unsigned char)*PyByteArray_AS_STRING(obj)); + ord = (long)((unsigned char)*PyByteArray_AS_STRING(c)); return PyLong_FromLong(ord); } } else { PyErr_Format(PyExc_TypeError, "ord() expected string of length 1, but " \ - "%.200s found", obj->ob_type->tp_name); + "%.200s found", c->ob_type->tp_name); return NULL; } @@ -1547,31 +1667,30 @@ builtin_ord(PyObject *self, PyObject* obj) return NULL; } -PyDoc_VAR(ord_doc) = PyDoc_STR( -"ord(c) -> integer\n\ -\n\ -Return the integer ordinal of a one-character string." -); +/*[clinic input] +pow as builtin_pow -static PyObject * -builtin_pow(PyObject *self, PyObject *args) -{ - PyObject *v, *w, *z = Py_None; + x: 'O' + y: 'O' + z: 'O' = None + / - if (!PyArg_UnpackTuple(args, "pow", 2, 3, &v, &w, &z)) - return NULL; - return PyNumber_Power(v, w, z); -} +Equivalent to x**y (with two arguments) or x**y % z (with three arguments) -PyDoc_STRVAR(pow_doc, -"pow(x, y[, z]) -> number\n\ -\n\ -With two arguments, equivalent to x**y. With three arguments,\n\ -equivalent to (x**y) % z, but may be more efficient (e.g. for ints)."); +Some types, such as ints, are able to use a more efficient algorithm when +invoked using the three argument form. +[clinic start generated code]*/ +static PyObject * +builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z) +/*[clinic end generated code: output=1fba268adba9b45f input=561a942d5f5c1899]*/ +{ + return PyNumber_Power(x, y, z); +} +/* AC: cannot convert yet, waiting for *args support */ static PyObject * builtin_print(PyObject *self, PyObject *args, PyObject *kwds) { @@ -1667,10 +1786,25 @@ end: string appended after the last value, default a newline.\n\ flush: whether to forcibly flush the stream."); +/*[clinic input] +input as builtin_input + + prompt: object(c_default="NULL") = None + / + +Read a string from standard input. The trailing newline is stripped. + +The prompt string, if given, is printed to standard output without a +trailing newline before reading input. + +If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError. +On *nix systems, readline is used if available. +[clinic start generated code]*/ + static PyObject * -builtin_input(PyObject *self, PyObject *args) +builtin_input_impl(PyModuleDef *module, PyObject *prompt) +/*[clinic end generated code: output=b77731f59e1515c4 input=5e8bb70c2908fe3c]*/ { - PyObject *promptarg = NULL; PyObject *fin = _PySys_GetObjectId(&PyId_stdin); PyObject *fout = _PySys_GetObjectId(&PyId_stdout); PyObject *ferr = _PySys_GetObjectId(&PyId_stderr); @@ -1678,10 +1812,6 @@ builtin_input(PyObject *self, PyObject *args) long fd; int tty; - /* Parse arguments */ - if (!PyArg_UnpackTuple(args, "input", 0, 1, &promptarg)) - return NULL; - /* Check that stdin/out/err are intact */ if (fin == NULL || fin == Py_None) { PyErr_SetString(PyExc_RuntimeError, @@ -1737,7 +1867,7 @@ builtin_input(PyObject *self, PyObject *args) /* If we're interactive, use (GNU) readline */ if (tty) { PyObject *po = NULL; - char *prompt; + char *promptstr; char *s = NULL; PyObject *stdin_encoding = NULL, *stdin_errors = NULL; PyObject *stdout_encoding = NULL, *stdout_errors = NULL; @@ -1760,7 +1890,7 @@ builtin_input(PyObject *self, PyObject *args) PyErr_Clear(); else Py_DECREF(tmp); - if (promptarg != NULL) { + if (prompt != NULL) { /* We have a prompt, encode it as stdout would */ char *stdout_encoding_str, *stdout_errors_str; PyObject *stringpo; @@ -1772,7 +1902,7 @@ builtin_input(PyObject *self, PyObject *args) stdout_errors_str = _PyUnicode_AsString(stdout_errors); if (!stdout_encoding_str || !stdout_errors_str) goto _readline_errors; - stringpo = PyObject_Str(promptarg); + stringpo = PyObject_Str(prompt); if (stringpo == NULL) goto _readline_errors; po = PyUnicode_AsEncodedString(stringpo, @@ -1782,15 +1912,15 @@ builtin_input(PyObject *self, PyObject *args) Py_CLEAR(stringpo); if (po == NULL) goto _readline_errors; - prompt = PyBytes_AsString(po); - if (prompt == NULL) + promptstr = PyBytes_AsString(po); + if (promptstr == NULL) goto _readline_errors; } else { po = NULL; - prompt = ""; + promptstr = ""; } - s = PyOS_Readline(stdin, stdout, prompt); + s = PyOS_Readline(stdin, stdout, promptstr); if (s == NULL) { PyErr_CheckSignals(); if (!PyErr_Occurred()) @@ -1832,8 +1962,8 @@ builtin_input(PyObject *self, PyObject *args) } /* Fallback if we're not interactive */ - if (promptarg != NULL) { - if (PyFile_WriteObject(promptarg, fout, Py_PRINT_RAW) != 0) + if (prompt != NULL) { + if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0) return NULL; } tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); @@ -1844,28 +1974,29 @@ builtin_input(PyObject *self, PyObject *args) return PyFile_GetLine(fin, -1); } -PyDoc_STRVAR(input_doc, -"input([prompt]) -> string\n\ -\n\ -Read a string from standard input. The trailing newline is stripped.\n\ -If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.\n\ -On Unix, GNU readline is used if enabled. The prompt string, if given,\n\ -is printed without a trailing newline before reading."); +/*[clinic input] +repr as builtin_repr + + obj: 'O' + / + +Return the canonical string representation of the object. + +For many object types, including most builtins, eval(repr(obj)) == obj. +[clinic start generated code]*/ static PyObject * -builtin_repr(PyObject *self, PyObject *v) +builtin_repr(PyModuleDef *module, PyObject *obj) +/*[clinic end generated code: output=dc41784fa4341834 input=a2bca0f38a5a924d]*/ { - return PyObject_Repr(v); + return PyObject_Repr(obj); } -PyDoc_STRVAR(repr_doc, -"repr(object) -> string\n\ -\n\ -Return the canonical string representation of the object.\n\ -For most object types, eval(repr(object)) == object."); - +/* AC: cannot convert yet, as needs PEP 457 group support in inspect + * or a semantic change to accept None for "ndigits" + */ static PyObject * builtin_round(PyObject *self, PyObject *args, PyObject *kwds) { @@ -1907,6 +2038,35 @@ This returns an int when called with one argument, otherwise the\n\ same type as the number. ndigits may be negative."); +/*AC: we need to keep the kwds dict intact to easily call into the + * list.sort method, which isn't currently supported in AC. So we just use + * the initially generated signature with a custom implementation. + */ +/* [disabled clinic input] +sorted as builtin_sorted + + iterable as seq: 'O' + key as keyfunc: 'O' = None + reverse: 'O' = False + +Return a new list containing all items from the iterable in ascending order. + +A custom key function can be supplied to customise the sort order, and the +reverse flag can be set to request the result in descending order. +[end disabled clinic input]*/ + +PyDoc_STRVAR(builtin_sorted__doc__, +"sorted($module, iterable, key=None, reverse=False)\n" +"--\n" +"\n" +"Return a new list containing all items from the iterable in ascending order.\n" +"\n" +"A custom key function can be supplied to customise the sort order, and the\n" +"reverse flag can be set to request the result in descending order."); + +#define BUILTIN_SORTED_METHODDEF \ + {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS|METH_KEYWORDS, builtin_sorted__doc__}, + static PyObject * builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) { @@ -1948,9 +2108,8 @@ builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) return newlist; } -PyDoc_STRVAR(sorted_doc, -"sorted(iterable, key=None, reverse=False) --> new sorted list"); +/* AC: cannot convert yet, as needs PEP 457 group support in inspect */ static PyObject * builtin_vars(PyObject *self, PyObject *args) { @@ -1982,17 +2141,29 @@ PyDoc_STRVAR(vars_doc, Without arguments, equivalent to locals().\n\ With an argument, equivalent to object.__dict__."); -static PyObject* -builtin_sum(PyObject *self, PyObject *args) + +/*[clinic input] +sum as builtin_sum + + iterable: 'O' + start: object(c_default="NULL") = 0 + / + +Return the sum of a 'start' value (default: 0) plus an iterable of numbers + +When the iterable is empty, return the start value. +This function is intended specifically for use with numeric values and may +reject non-numeric types. +[clinic start generated code]*/ + +static PyObject * +builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start) +/*[clinic end generated code: output=33655b248b21d581 input=90ae7a242cfcf025]*/ { - PyObject *seq; - PyObject *result = NULL; + PyObject *result = start; PyObject *temp, *item, *iter; - if (!PyArg_UnpackTuple(args, "sum", 1, 2, &seq, &result)) - return NULL; - - iter = PyObject_GetIter(seq); + iter = PyObject_GetIter(iterable); if (iter == NULL) return NULL; @@ -2022,7 +2193,6 @@ builtin_sum(PyObject *self, PyObject *args) Py_DECREF(iter); return NULL; } - Py_INCREF(result); } @@ -2148,62 +2318,62 @@ builtin_sum(PyObject *self, PyObject *args) return result; } -PyDoc_STRVAR(sum_doc, -"sum(iterable[, start]) -> value\n\ -\n\ -Return the sum of an iterable of numbers (NOT strings) plus the value\n\ -of parameter 'start' (which defaults to 0). When the iterable is\n\ -empty, return start."); +/*[clinic input] +isinstance as builtin_isinstance + + obj: 'O' + class_or_tuple: 'O' + / + +Return whether an object is an instance of a class or of a subclass thereof. + +A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to +check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B) +or ...`` etc. +[clinic start generated code]*/ static PyObject * -builtin_isinstance(PyObject *self, PyObject *args) +builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, + PyObject *class_or_tuple) +/*[clinic end generated code: output=f960b7c12dbbeda0 input=cf9eb0ad6bb9bad6]*/ { - PyObject *inst; - PyObject *cls; int retval; - if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, &inst, &cls)) - return NULL; - - retval = PyObject_IsInstance(inst, cls); + retval = PyObject_IsInstance(obj, class_or_tuple); if (retval < 0) return NULL; return PyBool_FromLong(retval); } -PyDoc_STRVAR(isinstance_doc, -"isinstance(object, class-or-type-or-tuple) -> bool\n\ -\n\ -Return whether an object is an instance of a class or of a subclass thereof.\n\ -With a type as second argument, return whether that is the object's type.\n\ -The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\n\ -isinstance(x, A) or isinstance(x, B) or ... (etc.)."); +/*[clinic input] +issubclass as builtin_issubclass + + cls: 'O' + class_or_tuple: 'O' + / + +Return whether 'cls' is a derived from another class or is the same class. + +A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to +check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B) +or ...`` etc. +[clinic start generated code]*/ static PyObject * -builtin_issubclass(PyObject *self, PyObject *args) +builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, + PyObject *class_or_tuple) +/*[clinic end generated code: output=8b012a151940bbf2 input=923d03fa41fc352a]*/ { - PyObject *derived; - PyObject *cls; int retval; - if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, &derived, &cls)) - return NULL; - - retval = PyObject_IsSubclass(derived, cls); + retval = PyObject_IsSubclass(cls, class_or_tuple); if (retval < 0) return NULL; return PyBool_FromLong(retval); } -PyDoc_STRVAR(issubclass_doc, -"issubclass(C, B) -> bool\n\ -\n\ -Return whether class C is a subclass (i.e., a derived class) of class B.\n\ -When using a tuple as the second argument issubclass(X, (A, B, ...)),\n\ -is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.)."); - typedef struct { PyObject_HEAD @@ -2398,44 +2568,44 @@ static PyMethodDef builtin_methods[] = { {"__build_class__", (PyCFunction)builtin___build_class__, METH_VARARGS | METH_KEYWORDS, build_class_doc}, {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc}, - {"abs", builtin_abs, METH_O, abs_doc}, - {"all", builtin_all, METH_O, all_doc}, - {"any", builtin_any, METH_O, any_doc}, - {"ascii", builtin_ascii, METH_O, ascii_doc}, - {"bin", builtin_bin, METH_O, bin_doc}, - {"callable", builtin_callable, METH_O, callable_doc}, - {"chr", builtin_chr, METH_VARARGS, chr_doc}, - {"compile", (PyCFunction)builtin_compile, METH_VARARGS | METH_KEYWORDS, compile_doc}, - {"delattr", builtin_delattr, METH_VARARGS, delattr_doc}, + BUILTIN_ABS_METHODDEF + BUILTIN_ALL_METHODDEF + BUILTIN_ANY_METHODDEF + BUILTIN_ASCII_METHODDEF + BUILTIN_BIN_METHODDEF + BUILTIN_CALLABLE_METHODDEF + BUILTIN_CHR_METHODDEF + BUILTIN_COMPILE_METHODDEF + BUILTIN_DELATTR_METHODDEF {"dir", builtin_dir, METH_VARARGS, dir_doc}, - {"divmod", builtin_divmod, METH_VARARGS, divmod_doc}, - {"eval", builtin_eval, METH_VARARGS, eval_doc}, - {"exec", builtin_exec, METH_VARARGS, exec_doc}, - {"format", builtin_format, METH_VARARGS, format_doc}, + BUILTIN_DIVMOD_METHODDEF + BUILTIN_EVAL_METHODDEF + BUILTIN_EXEC_METHODDEF + BUILTIN_FORMAT_METHODDEF {"getattr", builtin_getattr, METH_VARARGS, getattr_doc}, - {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc}, - {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc}, - {"hash", builtin_hash, METH_O, hash_doc}, - {"hex", builtin_hex, METH_O, hex_doc}, - {"id", builtin_id, METH_O, id_doc}, - {"input", builtin_input, METH_VARARGS, input_doc}, - {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc}, - {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc}, + BUILTIN_GLOBALS_METHODDEF + BUILTIN_HASATTR_METHODDEF + BUILTIN_HASH_METHODDEF + BUILTIN_HEX_METHODDEF + BUILTIN_ID_METHODDEF + BUILTIN_INPUT_METHODDEF + BUILTIN_ISINSTANCE_METHODDEF + BUILTIN_ISSUBCLASS_METHODDEF {"iter", builtin_iter, METH_VARARGS, iter_doc}, - {"len", builtin_len, METH_O, len_doc}, - {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc}, + BUILTIN_LEN_METHODDEF + BUILTIN_LOCALS_METHODDEF {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc}, {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc}, {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc}, - {"oct", builtin_oct, METH_O, oct_doc}, - {"ord", builtin_ord, METH_O, ord_doc}, - {"pow", builtin_pow, METH_VARARGS, pow_doc}, + BUILTIN_OCT_METHODDEF + BUILTIN_ORD_METHODDEF + BUILTIN_POW_METHODDEF {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc}, - {"repr", builtin_repr, METH_O, repr_doc}, + BUILTIN_REPR_METHODDEF {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc}, - {"setattr", builtin_setattr, METH_VARARGS, setattr_doc}, - {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc}, - {"sum", builtin_sum, METH_VARARGS, sum_doc}, + BUILTIN_SETATTR_METHODDEF + BUILTIN_SORTED_METHODDEF + BUILTIN_SUM_METHODDEF {"vars", builtin_vars, METH_VARARGS, vars_doc}, {NULL, NULL}, }; diff --git a/Python/ceval.c b/Python/ceval.c index 7656b8e..2f3d3ad 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1504,6 +1504,18 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } + TARGET(BINARY_MATRIX_MULTIPLY) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_MatrixMultiply(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } + TARGET(BINARY_TRUE_DIVIDE) { PyObject *divisor = POP(); PyObject *dividend = TOP(); @@ -1694,6 +1706,18 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } + TARGET(INPLACE_MATRIX_MULTIPLY) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceMatrixMultiply(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } + TARGET(INPLACE_TRUE_DIVIDE) { PyObject *divisor = POP(); PyObject *dividend = TOP(); @@ -3168,8 +3192,7 @@ fast_block_end: if (why != WHY_RETURN) retval = NULL; - assert((retval != NULL && !PyErr_Occurred()) - || (retval == NULL && PyErr_Occurred())); + assert((retval != NULL) ^ (PyErr_Occurred() != NULL)); fast_yield: if (co->co_flags & CO_GENERATOR) { @@ -3230,7 +3253,7 @@ exit_eval_frame: f->f_executing = 0; tstate->frame = f->f_back; - return retval; + return _Py_CheckFunctionResult(NULL, retval, "PyEval_EvalFrameEx"); } static void @@ -3387,10 +3410,11 @@ too_many_positional(PyCodeObject *co, int given, int defcount, PyObject **fastlo PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust the test in the if statements in Misc/gdbinit (pystack and pystackv). */ -PyObject * -PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals, +static PyObject * +_PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, - PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure) + PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure, + PyObject *name, PyObject *qualname) { PyCodeObject* co = (PyCodeObject*)_co; PyFrameObject *f; @@ -3582,7 +3606,7 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals, /* Create a new generator that owns the ready to run frame * and return that as the value. */ - return PyGen_New(f); + return PyGen_NewWithQualName(f, name, qualname); } retval = PyEval_EvalFrameEx(f,0); @@ -3601,6 +3625,16 @@ fail: /* Jump here from prelude on failure */ return retval; } +PyObject * +PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals, + PyObject **args, int argcount, PyObject **kws, int kwcount, + PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure) +{ + return _PyEval_EvalCodeWithName(_co, globals, locals, + args, argcount, kws, kwcount, + defs, defcount, kwdefs, closure, + NULL, NULL); +} static PyObject * special_lookup(PyObject *o, _Py_Identifier *id) @@ -3791,9 +3825,17 @@ unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp) if (w == NULL) { /* Iterator done, via error or exhaustion. */ if (!PyErr_Occurred()) { - PyErr_Format(PyExc_ValueError, - "need more than %d value%s to unpack", - i, i == 1 ? "" : "s"); + if (argcntafter == -1) { + PyErr_Format(PyExc_ValueError, + "not enough values to unpack (expected %d, got %d)", + argcnt, i); + } + else { + PyErr_Format(PyExc_ValueError, + "not enough values to unpack " + "(expected at least %d, got %d)", + argcnt + argcntafter, i); + } } goto Error; } @@ -3810,8 +3852,9 @@ unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp) return 1; } Py_DECREF(w); - PyErr_Format(PyExc_ValueError, "too many values to unpack " - "(expected %d)", argcnt); + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %d)", + argcnt); goto Error; } @@ -3823,8 +3866,9 @@ unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp) ll = PyList_GET_SIZE(l); if (ll < argcntafter) { - PyErr_Format(PyExc_ValueError, "need more than %zd values to unpack", - argcnt + ll); + PyErr_Format(PyExc_ValueError, + "not enough values to unpack (expected at least %d, got %zd)", + argcnt + argcntafter, argcnt + ll); goto Error; } @@ -4086,8 +4130,8 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw) #ifdef Py_DEBUG /* PyEval_CallObjectWithKeywords() must not be called with an exception - set, because it may clear it (directly or indirectly) - and so the caller looses its exception */ + set. It raises a new exception if parameters are invalid or if + PyTuple_New() fails, and so the original exception is lost. */ assert(!PyErr_Occurred()); #endif @@ -4114,8 +4158,6 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw) result = PyObject_Call(func, arg, kw); Py_DECREF(arg); - assert((result != NULL && !PyErr_Occurred()) - || (result == NULL && PyErr_Occurred())); return result; } @@ -4218,11 +4260,15 @@ call_function(PyObject ***pp_stack, int oparg PyObject *self = PyCFunction_GET_SELF(func); if (flags & METH_NOARGS && na == 0) { C_TRACE(x, (*meth)(self,NULL)); + + x = _Py_CheckFunctionResult(func, x, NULL); } else if (flags & METH_O && na == 1) { PyObject *arg = EXT_POP(*pp_stack); C_TRACE(x, (*meth)(self,arg)); Py_DECREF(arg); + + x = _Py_CheckFunctionResult(func, x, NULL); } else { err_args(func, flags, na); @@ -4242,7 +4288,8 @@ call_function(PyObject ***pp_stack, int oparg x = NULL; } } - } else { + } + else { if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { /* optimize access to bound methods */ PyObject *self = PyMethod_GET_SELF(func); @@ -4264,9 +4311,9 @@ call_function(PyObject ***pp_stack, int oparg x = do_call(func, pp_stack, na, nk); READ_TIMESTAMP(*pintr1); Py_DECREF(func); + + assert((x != NULL) ^ (PyErr_Occurred() != NULL)); } - assert((x != NULL && !PyErr_Occurred()) - || (x == NULL && PyErr_Occurred())); /* Clear the stack of the function object. Also removes the arguments in case they weren't consumed already @@ -4278,8 +4325,7 @@ call_function(PyObject ***pp_stack, int oparg PCALL(PCALL_POP); } - assert((x != NULL && !PyErr_Occurred()) - || (x == NULL && PyErr_Occurred())); + assert((x != NULL) ^ (PyErr_Occurred() != NULL)); return x; } @@ -4299,6 +4345,8 @@ fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk) PyObject *globals = PyFunction_GET_GLOBALS(func); PyObject *argdefs = PyFunction_GET_DEFAULTS(func); PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func); + PyObject *name = ((PyFunctionObject *)func) -> func_name; + PyObject *qualname = ((PyFunctionObject *)func) -> func_qualname; PyObject **d = NULL; int nd = 0; @@ -4341,10 +4389,11 @@ fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk) d = &PyTuple_GET_ITEM(argdefs, 0); nd = Py_SIZE(argdefs); } - return PyEval_EvalCodeEx((PyObject*)co, globals, - (PyObject *)NULL, (*pp_stack)-n, na, - (*pp_stack)-2*nk, nk, d, nd, kwdefs, - PyFunction_GET_CLOSURE(func)); + return _PyEval_EvalCodeWithName((PyObject*)co, globals, + (PyObject *)NULL, (*pp_stack)-n, na, + (*pp_stack)-2*nk, nk, d, nd, kwdefs, + PyFunction_GET_CLOSURE(func), + name, qualname); } static PyObject * @@ -4563,12 +4612,10 @@ ext_call_fail: Py_XDECREF(callargs); Py_XDECREF(kwdict); Py_XDECREF(stararg); - assert((result != NULL && !PyErr_Occurred()) - || (result == NULL && PyErr_Occurred())); return result; } -/* Extract a slice index from a PyInt or PyLong or an object with the +/* Extract a slice index from a PyLong or an object with the nb_index slot defined, and store in *pi. Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX, and silently boost values less than -PY_SSIZE_T_MAX-1 to -PY_SSIZE_T_MAX-1. @@ -4658,11 +4705,29 @@ static PyObject * import_from(PyObject *v, PyObject *name) { PyObject *x; + _Py_IDENTIFIER(__name__); + PyObject *fullmodname, *pkgname; x = PyObject_GetAttr(v, name); - if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) { + if (x != NULL || !PyErr_ExceptionMatches(PyExc_AttributeError)) + return x; + /* Issue #17636: in case this failed because of a circular relative + import, try to fallback on reading the module directly from + sys.modules. */ + PyErr_Clear(); + pkgname = _PyObject_GetAttrId(v, &PyId___name__); + if (pkgname == NULL) + return NULL; + fullmodname = PyUnicode_FromFormat("%U.%U", pkgname, name); + Py_DECREF(pkgname); + if (fullmodname == NULL) + return NULL; + x = PyDict_GetItem(PyImport_GetModuleDict(), fullmodname); + if (x == NULL) PyErr_Format(PyExc_ImportError, "cannot import name %R", name); - } + else + Py_INCREF(x); + Py_DECREF(fullmodname); return x; } diff --git a/Python/ceval_gil.h b/Python/ceval_gil.h index 2702d5c..aafcbc2 100644 --- a/Python/ceval_gil.h +++ b/Python/ceval_gil.h @@ -31,7 +31,7 @@ static unsigned long gil_interval = DEFAULT_INTERVAL; variable (gil_drop_request) is used for that purpose, which is checked at every turn of the eval loop. That variable is set after a wait of `interval` microseconds on `gil_cond` has timed out. - + [Actually, another volatile boolean variable (eval_breaker) is used which ORs several conditions into one. Volatile booleans are sufficient as inter-thread signalling means since Python is run @@ -41,7 +41,7 @@ static unsigned long gil_interval = DEFAULT_INTERVAL; time (`interval` microseconds) before setting gil_drop_request. This encourages a defined switching period, but doesn't enforce it since opcodes can take an arbitrary time to execute. - + The `interval` value is available for the user to read and modify using the Python API `sys.{get,set}switchinterval()`. @@ -51,7 +51,7 @@ static unsigned long gil_interval = DEFAULT_INTERVAL; the value of gil_last_holder is changed to something else than its own thread state pointer, indicating that another thread was able to take the GIL. - + This is meant to prohibit the latency-adverse behaviour on multi-core machines where one thread would speculatively release the GIL, but still run and end up being the first to re-acquire it, making the "timeslices" @@ -186,12 +186,12 @@ static void drop_gil(PyThreadState *tstate) _Py_atomic_store_relaxed(&gil_locked, 0); COND_SIGNAL(gil_cond); MUTEX_UNLOCK(gil_mutex); - + #ifdef FORCE_SWITCHING if (_Py_atomic_load_relaxed(&gil_drop_request) && tstate != NULL) { MUTEX_LOCK(switch_mutex); /* Not switched yet => wait */ - if (_Py_atomic_load_relaxed(&gil_last_holder) == tstate) { + if ((PyThreadState*)_Py_atomic_load_relaxed(&gil_last_holder) == tstate) { RESET_GIL_DROP_REQUEST(); /* NOTE: if COND_WAIT does not atomically start waiting when releasing the mutex, another thread can run through, take @@ -215,7 +215,7 @@ static void take_gil(PyThreadState *tstate) if (!_Py_atomic_load_relaxed(&gil_locked)) goto _ready; - + while (_Py_atomic_load_relaxed(&gil_locked)) { int timed_out = 0; unsigned long saved_switchnum; @@ -239,7 +239,7 @@ _ready: _Py_atomic_store_relaxed(&gil_locked, 1); _Py_ANNOTATE_RWLOCK_ACQUIRED(&gil_locked, /*is_write=*/1); - if (tstate != _Py_atomic_load_relaxed(&gil_last_holder)) { + if (tstate != (PyThreadState*)_Py_atomic_load_relaxed(&gil_last_holder)) { _Py_atomic_store_relaxed(&gil_last_holder, tstate); ++gil_switch_number; } @@ -254,7 +254,7 @@ _ready: if (tstate->async_exc != NULL) { _PyEval_SignalAsyncExc(); } - + MUTEX_UNLOCK(gil_mutex); errno = err; } diff --git a/Python/clinic/bltinmodule.c.h b/Python/clinic/bltinmodule.c.h new file mode 100644 index 0000000..83e4f69 --- /dev/null +++ b/Python/clinic/bltinmodule.c.h @@ -0,0 +1,667 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(builtin_abs__doc__, +"abs($module, x, /)\n" +"--\n" +"\n" +"Return the absolute value of the argument."); + +#define BUILTIN_ABS_METHODDEF \ + {"abs", (PyCFunction)builtin_abs, METH_O, builtin_abs__doc__}, + +PyDoc_STRVAR(builtin_all__doc__, +"all($module, iterable, /)\n" +"--\n" +"\n" +"Return True if bool(x) is True for all values x in the iterable.\n" +"\n" +"If the iterable is empty, return True."); + +#define BUILTIN_ALL_METHODDEF \ + {"all", (PyCFunction)builtin_all, METH_O, builtin_all__doc__}, + +PyDoc_STRVAR(builtin_any__doc__, +"any($module, iterable, /)\n" +"--\n" +"\n" +"Return True if bool(x) is True for any x in the iterable.\n" +"\n" +"If the iterable is empty, return False."); + +#define BUILTIN_ANY_METHODDEF \ + {"any", (PyCFunction)builtin_any, METH_O, builtin_any__doc__}, + +PyDoc_STRVAR(builtin_ascii__doc__, +"ascii($module, obj, /)\n" +"--\n" +"\n" +"Return an ASCII-only representation of an object.\n" +"\n" +"As repr(), return a string containing a printable representation of an\n" +"object, but escape the non-ASCII characters in the string returned by\n" +"repr() using \\\\x, \\\\u or \\\\U escapes. This generates a string similar\n" +"to that returned by repr() in Python 2."); + +#define BUILTIN_ASCII_METHODDEF \ + {"ascii", (PyCFunction)builtin_ascii, METH_O, builtin_ascii__doc__}, + +PyDoc_STRVAR(builtin_bin__doc__, +"bin($module, number, /)\n" +"--\n" +"\n" +"Return the binary representation of an integer.\n" +"\n" +" >>> bin(2796202)\n" +" \'0b1010101010101010101010\'"); + +#define BUILTIN_BIN_METHODDEF \ + {"bin", (PyCFunction)builtin_bin, METH_O, builtin_bin__doc__}, + +PyDoc_STRVAR(builtin_callable__doc__, +"callable($module, obj, /)\n" +"--\n" +"\n" +"Return whether the object is callable (i.e., some kind of function).\n" +"\n" +"Note that classes are callable, as are instances of classes with a\n" +"__call__() method."); + +#define BUILTIN_CALLABLE_METHODDEF \ + {"callable", (PyCFunction)builtin_callable, METH_O, builtin_callable__doc__}, + +PyDoc_STRVAR(builtin_format__doc__, +"format($module, value, format_spec=\'\', /)\n" +"--\n" +"\n" +"Return value.__format__(format_spec)\n" +"\n" +"format_spec defaults to the empty string"); + +#define BUILTIN_FORMAT_METHODDEF \ + {"format", (PyCFunction)builtin_format, METH_VARARGS, builtin_format__doc__}, + +static PyObject * +builtin_format_impl(PyModuleDef *module, PyObject *value, + PyObject *format_spec); + +static PyObject * +builtin_format(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *value; + PyObject *format_spec = NULL; + + if (!PyArg_ParseTuple(args, + "O|U:format", + &value, &format_spec)) + goto exit; + return_value = builtin_format_impl(module, value, format_spec); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_chr__doc__, +"chr($module, i, /)\n" +"--\n" +"\n" +"Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff."); + +#define BUILTIN_CHR_METHODDEF \ + {"chr", (PyCFunction)builtin_chr, METH_O, builtin_chr__doc__}, + +static PyObject * +builtin_chr_impl(PyModuleDef *module, int i); + +static PyObject * +builtin_chr(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + int i; + + if (!PyArg_Parse(arg, + "i:chr", + &i)) + goto exit; + return_value = builtin_chr_impl(module, i); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_compile__doc__, +"compile($module, /, source, filename, mode, flags=0, dont_inherit=0,\n" +" optimize=-1)\n" +"--\n" +"\n" +"Compile source into a code object that can be executed by exec() or eval().\n" +"\n" +"The source code may represent a Python module, statement or expression.\n" +"The filename will be used for run-time error messages.\n" +"The mode must be \'exec\' to compile a module, \'single\' to compile a\n" +"single (interactive) statement, or \'eval\' to compile an expression.\n" +"The flags argument, if present, controls which future statements influence\n" +"the compilation of the code.\n" +"The dont_inherit argument, if non-zero, stops the compilation inheriting\n" +"the effects of any future statements in effect in the code calling\n" +"compile; if absent or zero these statements do influence the compilation,\n" +"in addition to any features explicitly specified."); + +#define BUILTIN_COMPILE_METHODDEF \ + {"compile", (PyCFunction)builtin_compile, METH_VARARGS|METH_KEYWORDS, builtin_compile__doc__}, + +static PyObject * +builtin_compile_impl(PyModuleDef *module, PyObject *source, + PyObject *filename, const char *mode, int flags, + int dont_inherit, int optimize); + +static PyObject * +builtin_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + static char *_keywords[] = {"source", "filename", "mode", "flags", "dont_inherit", "optimize", NULL}; + PyObject *source; + PyObject *filename; + const char *mode; + int flags = 0; + int dont_inherit = 0; + int optimize = -1; + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, + "OO&s|iii:compile", _keywords, + &source, PyUnicode_FSDecoder, &filename, &mode, &flags, &dont_inherit, &optimize)) + goto exit; + return_value = builtin_compile_impl(module, source, filename, mode, flags, dont_inherit, optimize); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_divmod__doc__, +"divmod($module, x, y, /)\n" +"--\n" +"\n" +"Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x."); + +#define BUILTIN_DIVMOD_METHODDEF \ + {"divmod", (PyCFunction)builtin_divmod, METH_VARARGS, builtin_divmod__doc__}, + +static PyObject * +builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y); + +static PyObject * +builtin_divmod(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *x; + PyObject *y; + + if (!PyArg_UnpackTuple(args, "divmod", + 2, 2, + &x, &y)) + goto exit; + return_value = builtin_divmod_impl(module, x, y); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_eval__doc__, +"eval($module, source, globals=None, locals=None, /)\n" +"--\n" +"\n" +"Evaluate the given source in the context of globals and locals.\n" +"\n" +"The source may be a string representing a Python expression\n" +"or a code object as returned by compile().\n" +"The globals must be a dictionary and locals can be any mapping,\n" +"defaulting to the current globals and locals.\n" +"If only globals is given, locals defaults to it."); + +#define BUILTIN_EVAL_METHODDEF \ + {"eval", (PyCFunction)builtin_eval, METH_VARARGS, builtin_eval__doc__}, + +static PyObject * +builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, + PyObject *locals); + +static PyObject * +builtin_eval(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *source; + PyObject *globals = Py_None; + PyObject *locals = Py_None; + + if (!PyArg_UnpackTuple(args, "eval", + 1, 3, + &source, &globals, &locals)) + goto exit; + return_value = builtin_eval_impl(module, source, globals, locals); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_exec__doc__, +"exec($module, source, globals=None, locals=None, /)\n" +"--\n" +"\n" +"Execute the given source in the context of globals and locals.\n" +"\n" +"The source may be a string representing one or more Python statements\n" +"or a code object as returned by compile().\n" +"The globals must be a dictionary and locals can be any mapping,\n" +"defaulting to the current globals and locals.\n" +"If only globals is given, locals defaults to it."); + +#define BUILTIN_EXEC_METHODDEF \ + {"exec", (PyCFunction)builtin_exec, METH_VARARGS, builtin_exec__doc__}, + +static PyObject * +builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, + PyObject *locals); + +static PyObject * +builtin_exec(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *source; + PyObject *globals = Py_None; + PyObject *locals = Py_None; + + if (!PyArg_UnpackTuple(args, "exec", + 1, 3, + &source, &globals, &locals)) + goto exit; + return_value = builtin_exec_impl(module, source, globals, locals); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_globals__doc__, +"globals($module, /)\n" +"--\n" +"\n" +"Return the dictionary containing the current scope\'s global variables.\n" +"\n" +"NOTE: Updates to this dictionary *will* affect name lookups in the current\n" +"global scope and vice-versa."); + +#define BUILTIN_GLOBALS_METHODDEF \ + {"globals", (PyCFunction)builtin_globals, METH_NOARGS, builtin_globals__doc__}, + +static PyObject * +builtin_globals_impl(PyModuleDef *module); + +static PyObject * +builtin_globals(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return builtin_globals_impl(module); +} + +PyDoc_STRVAR(builtin_hasattr__doc__, +"hasattr($module, obj, name, /)\n" +"--\n" +"\n" +"Return whether the object has an attribute with the given name.\n" +"\n" +"This is done by calling getattr(obj, name) and catching AttributeError."); + +#define BUILTIN_HASATTR_METHODDEF \ + {"hasattr", (PyCFunction)builtin_hasattr, METH_VARARGS, builtin_hasattr__doc__}, + +static PyObject * +builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name); + +static PyObject * +builtin_hasattr(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *obj; + PyObject *name; + + if (!PyArg_UnpackTuple(args, "hasattr", + 2, 2, + &obj, &name)) + goto exit; + return_value = builtin_hasattr_impl(module, obj, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_id__doc__, +"id($module, obj, /)\n" +"--\n" +"\n" +"Return the identity of an object.\n" +"\n" +"This is guaranteed to be unique among simultaneously existing objects.\n" +"(CPython uses the object\'s memory address.)"); + +#define BUILTIN_ID_METHODDEF \ + {"id", (PyCFunction)builtin_id, METH_O, builtin_id__doc__}, + +PyDoc_STRVAR(builtin_setattr__doc__, +"setattr($module, obj, name, value, /)\n" +"--\n" +"\n" +"Sets the named attribute on the given object to the specified value.\n" +"\n" +"setattr(x, \'y\', v) is equivalent to ``x.y = v\'\'"); + +#define BUILTIN_SETATTR_METHODDEF \ + {"setattr", (PyCFunction)builtin_setattr, METH_VARARGS, builtin_setattr__doc__}, + +static PyObject * +builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, + PyObject *value); + +static PyObject * +builtin_setattr(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *obj; + PyObject *name; + PyObject *value; + + if (!PyArg_UnpackTuple(args, "setattr", + 3, 3, + &obj, &name, &value)) + goto exit; + return_value = builtin_setattr_impl(module, obj, name, value); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_delattr__doc__, +"delattr($module, obj, name, /)\n" +"--\n" +"\n" +"Deletes the named attribute from the given object.\n" +"\n" +"delattr(x, \'y\') is equivalent to ``del x.y\'\'"); + +#define BUILTIN_DELATTR_METHODDEF \ + {"delattr", (PyCFunction)builtin_delattr, METH_VARARGS, builtin_delattr__doc__}, + +static PyObject * +builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name); + +static PyObject * +builtin_delattr(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *obj; + PyObject *name; + + if (!PyArg_UnpackTuple(args, "delattr", + 2, 2, + &obj, &name)) + goto exit; + return_value = builtin_delattr_impl(module, obj, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_hash__doc__, +"hash($module, obj, /)\n" +"--\n" +"\n" +"Return the hash value for the given object.\n" +"\n" +"Two objects that compare equal must also have the same hash value, but the\n" +"reverse is not necessarily true."); + +#define BUILTIN_HASH_METHODDEF \ + {"hash", (PyCFunction)builtin_hash, METH_O, builtin_hash__doc__}, + +PyDoc_STRVAR(builtin_hex__doc__, +"hex($module, number, /)\n" +"--\n" +"\n" +"Return the hexadecimal representation of an integer.\n" +"\n" +" >>> hex(12648430)\n" +" \'0xc0ffee\'"); + +#define BUILTIN_HEX_METHODDEF \ + {"hex", (PyCFunction)builtin_hex, METH_O, builtin_hex__doc__}, + +PyDoc_STRVAR(builtin_len__doc__, +"len($module, obj, /)\n" +"--\n" +"\n" +"Return the number of items in a container."); + +#define BUILTIN_LEN_METHODDEF \ + {"len", (PyCFunction)builtin_len, METH_O, builtin_len__doc__}, + +PyDoc_STRVAR(builtin_locals__doc__, +"locals($module, /)\n" +"--\n" +"\n" +"Return a dictionary containing the current scope\'s local variables.\n" +"\n" +"NOTE: Whether or not updates to this dictionary will affect name lookups in\n" +"the local scope and vice-versa is *implementation dependent* and not\n" +"covered by any backwards compatibility guarantees."); + +#define BUILTIN_LOCALS_METHODDEF \ + {"locals", (PyCFunction)builtin_locals, METH_NOARGS, builtin_locals__doc__}, + +static PyObject * +builtin_locals_impl(PyModuleDef *module); + +static PyObject * +builtin_locals(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return builtin_locals_impl(module); +} + +PyDoc_STRVAR(builtin_oct__doc__, +"oct($module, number, /)\n" +"--\n" +"\n" +"Return the octal representation of an integer.\n" +"\n" +" >>> oct(342391)\n" +" \'0o1234567\'"); + +#define BUILTIN_OCT_METHODDEF \ + {"oct", (PyCFunction)builtin_oct, METH_O, builtin_oct__doc__}, + +PyDoc_STRVAR(builtin_ord__doc__, +"ord($module, c, /)\n" +"--\n" +"\n" +"Return the Unicode code point for a one-character string."); + +#define BUILTIN_ORD_METHODDEF \ + {"ord", (PyCFunction)builtin_ord, METH_O, builtin_ord__doc__}, + +PyDoc_STRVAR(builtin_pow__doc__, +"pow($module, x, y, z=None, /)\n" +"--\n" +"\n" +"Equivalent to x**y (with two arguments) or x**y % z (with three arguments)\n" +"\n" +"Some types, such as ints, are able to use a more efficient algorithm when\n" +"invoked using the three argument form."); + +#define BUILTIN_POW_METHODDEF \ + {"pow", (PyCFunction)builtin_pow, METH_VARARGS, builtin_pow__doc__}, + +static PyObject * +builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z); + +static PyObject * +builtin_pow(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *x; + PyObject *y; + PyObject *z = Py_None; + + if (!PyArg_UnpackTuple(args, "pow", + 2, 3, + &x, &y, &z)) + goto exit; + return_value = builtin_pow_impl(module, x, y, z); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_input__doc__, +"input($module, prompt=None, /)\n" +"--\n" +"\n" +"Read a string from standard input. The trailing newline is stripped.\n" +"\n" +"The prompt string, if given, is printed to standard output without a\n" +"trailing newline before reading input.\n" +"\n" +"If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.\n" +"On *nix systems, readline is used if available."); + +#define BUILTIN_INPUT_METHODDEF \ + {"input", (PyCFunction)builtin_input, METH_VARARGS, builtin_input__doc__}, + +static PyObject * +builtin_input_impl(PyModuleDef *module, PyObject *prompt); + +static PyObject * +builtin_input(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *prompt = NULL; + + if (!PyArg_UnpackTuple(args, "input", + 0, 1, + &prompt)) + goto exit; + return_value = builtin_input_impl(module, prompt); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_repr__doc__, +"repr($module, obj, /)\n" +"--\n" +"\n" +"Return the canonical string representation of the object.\n" +"\n" +"For many object types, including most builtins, eval(repr(obj)) == obj."); + +#define BUILTIN_REPR_METHODDEF \ + {"repr", (PyCFunction)builtin_repr, METH_O, builtin_repr__doc__}, + +PyDoc_STRVAR(builtin_sum__doc__, +"sum($module, iterable, start=0, /)\n" +"--\n" +"\n" +"Return the sum of a \'start\' value (default: 0) plus an iterable of numbers\n" +"\n" +"When the iterable is empty, return the start value.\n" +"This function is intended specifically for use with numeric values and may\n" +"reject non-numeric types."); + +#define BUILTIN_SUM_METHODDEF \ + {"sum", (PyCFunction)builtin_sum, METH_VARARGS, builtin_sum__doc__}, + +static PyObject * +builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start); + +static PyObject * +builtin_sum(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *iterable; + PyObject *start = NULL; + + if (!PyArg_UnpackTuple(args, "sum", + 1, 2, + &iterable, &start)) + goto exit; + return_value = builtin_sum_impl(module, iterable, start); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_isinstance__doc__, +"isinstance($module, obj, class_or_tuple, /)\n" +"--\n" +"\n" +"Return whether an object is an instance of a class or of a subclass thereof.\n" +"\n" +"A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to\n" +"check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)\n" +"or ...`` etc."); + +#define BUILTIN_ISINSTANCE_METHODDEF \ + {"isinstance", (PyCFunction)builtin_isinstance, METH_VARARGS, builtin_isinstance__doc__}, + +static PyObject * +builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, + PyObject *class_or_tuple); + +static PyObject * +builtin_isinstance(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *obj; + PyObject *class_or_tuple; + + if (!PyArg_UnpackTuple(args, "isinstance", + 2, 2, + &obj, &class_or_tuple)) + goto exit; + return_value = builtin_isinstance_impl(module, obj, class_or_tuple); + +exit: + return return_value; +} + +PyDoc_STRVAR(builtin_issubclass__doc__, +"issubclass($module, cls, class_or_tuple, /)\n" +"--\n" +"\n" +"Return whether \'cls\' is a derived from another class or is the same class.\n" +"\n" +"A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to\n" +"check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)\n" +"or ...`` etc."); + +#define BUILTIN_ISSUBCLASS_METHODDEF \ + {"issubclass", (PyCFunction)builtin_issubclass, METH_VARARGS, builtin_issubclass__doc__}, + +static PyObject * +builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, + PyObject *class_or_tuple); + +static PyObject * +builtin_issubclass(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *cls; + PyObject *class_or_tuple; + + if (!PyArg_UnpackTuple(args, "issubclass", + 2, 2, + &cls, &class_or_tuple)) + goto exit; + return_value = builtin_issubclass_impl(module, cls, class_or_tuple); + +exit: + return return_value; +} +/*[clinic end generated code: output=b308ab64aa4d4ff8 input=a9049054013a1b77]*/ diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h new file mode 100644 index 0000000..9d28f3a --- /dev/null +++ b/Python/clinic/import.c.h @@ -0,0 +1,325 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_lock_held__doc__, +"lock_held($module, /)\n" +"--\n" +"\n" +"Return True if the import lock is currently held, else False.\n" +"\n" +"On platforms without threads, return False."); + +#define _IMP_LOCK_HELD_METHODDEF \ + {"lock_held", (PyCFunction)_imp_lock_held, METH_NOARGS, _imp_lock_held__doc__}, + +static PyObject * +_imp_lock_held_impl(PyModuleDef *module); + +static PyObject * +_imp_lock_held(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _imp_lock_held_impl(module); +} + +PyDoc_STRVAR(_imp_acquire_lock__doc__, +"acquire_lock($module, /)\n" +"--\n" +"\n" +"Acquires the interpreter\'s import lock for the current thread.\n" +"\n" +"This lock should be used by import hooks to ensure thread-safety when importing\n" +"modules. On platforms without threads, this function does nothing."); + +#define _IMP_ACQUIRE_LOCK_METHODDEF \ + {"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__}, + +static PyObject * +_imp_acquire_lock_impl(PyModuleDef *module); + +static PyObject * +_imp_acquire_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _imp_acquire_lock_impl(module); +} + +PyDoc_STRVAR(_imp_release_lock__doc__, +"release_lock($module, /)\n" +"--\n" +"\n" +"Release the interpreter\'s import lock.\n" +"\n" +"On platforms without threads, this function does nothing."); + +#define _IMP_RELEASE_LOCK_METHODDEF \ + {"release_lock", (PyCFunction)_imp_release_lock, METH_NOARGS, _imp_release_lock__doc__}, + +static PyObject * +_imp_release_lock_impl(PyModuleDef *module); + +static PyObject * +_imp_release_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _imp_release_lock_impl(module); +} + +PyDoc_STRVAR(_imp__fix_co_filename__doc__, +"_fix_co_filename($module, code, path, /)\n" +"--\n" +"\n" +"Changes code.co_filename to specify the passed-in file path.\n" +"\n" +" code\n" +" Code object to change.\n" +" path\n" +" File path to use."); + +#define _IMP__FIX_CO_FILENAME_METHODDEF \ + {"_fix_co_filename", (PyCFunction)_imp__fix_co_filename, METH_VARARGS, _imp__fix_co_filename__doc__}, + +static PyObject * +_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, + PyObject *path); + +static PyObject * +_imp__fix_co_filename(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyCodeObject *code; + PyObject *path; + + if (!PyArg_ParseTuple(args, + "O!U:_fix_co_filename", + &PyCode_Type, &code, &path)) + goto exit; + return_value = _imp__fix_co_filename_impl(module, code, path); + +exit: + return return_value; +} + +PyDoc_STRVAR(_imp_extension_suffixes__doc__, +"extension_suffixes($module, /)\n" +"--\n" +"\n" +"Returns the list of file suffixes used to identify extension modules."); + +#define _IMP_EXTENSION_SUFFIXES_METHODDEF \ + {"extension_suffixes", (PyCFunction)_imp_extension_suffixes, METH_NOARGS, _imp_extension_suffixes__doc__}, + +static PyObject * +_imp_extension_suffixes_impl(PyModuleDef *module); + +static PyObject * +_imp_extension_suffixes(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _imp_extension_suffixes_impl(module); +} + +PyDoc_STRVAR(_imp_init_builtin__doc__, +"init_builtin($module, name, /)\n" +"--\n" +"\n" +"Initializes a built-in module."); + +#define _IMP_INIT_BUILTIN_METHODDEF \ + {"init_builtin", (PyCFunction)_imp_init_builtin, METH_O, _imp_init_builtin__doc__}, + +static PyObject * +_imp_init_builtin_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +_imp_init_builtin(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *name; + + if (!PyArg_Parse(arg, + "U:init_builtin", + &name)) + goto exit; + return_value = _imp_init_builtin_impl(module, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(_imp_init_frozen__doc__, +"init_frozen($module, name, /)\n" +"--\n" +"\n" +"Initializes a frozen module."); + +#define _IMP_INIT_FROZEN_METHODDEF \ + {"init_frozen", (PyCFunction)_imp_init_frozen, METH_O, _imp_init_frozen__doc__}, + +static PyObject * +_imp_init_frozen_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +_imp_init_frozen(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *name; + + if (!PyArg_Parse(arg, + "U:init_frozen", + &name)) + goto exit; + return_value = _imp_init_frozen_impl(module, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(_imp_get_frozen_object__doc__, +"get_frozen_object($module, name, /)\n" +"--\n" +"\n" +"Create a code object for a frozen module."); + +#define _IMP_GET_FROZEN_OBJECT_METHODDEF \ + {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_O, _imp_get_frozen_object__doc__}, + +static PyObject * +_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +_imp_get_frozen_object(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *name; + + if (!PyArg_Parse(arg, + "U:get_frozen_object", + &name)) + goto exit; + return_value = _imp_get_frozen_object_impl(module, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(_imp_is_frozen_package__doc__, +"is_frozen_package($module, name, /)\n" +"--\n" +"\n" +"Returns True if the module name is of a frozen package."); + +#define _IMP_IS_FROZEN_PACKAGE_METHODDEF \ + {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_O, _imp_is_frozen_package__doc__}, + +static PyObject * +_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +_imp_is_frozen_package(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *name; + + if (!PyArg_Parse(arg, + "U:is_frozen_package", + &name)) + goto exit; + return_value = _imp_is_frozen_package_impl(module, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(_imp_is_builtin__doc__, +"is_builtin($module, name, /)\n" +"--\n" +"\n" +"Returns True if the module name corresponds to a built-in module."); + +#define _IMP_IS_BUILTIN_METHODDEF \ + {"is_builtin", (PyCFunction)_imp_is_builtin, METH_O, _imp_is_builtin__doc__}, + +static PyObject * +_imp_is_builtin_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +_imp_is_builtin(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *name; + + if (!PyArg_Parse(arg, + "U:is_builtin", + &name)) + goto exit; + return_value = _imp_is_builtin_impl(module, name); + +exit: + return return_value; +} + +PyDoc_STRVAR(_imp_is_frozen__doc__, +"is_frozen($module, name, /)\n" +"--\n" +"\n" +"Returns True if the module name corresponds to a frozen module."); + +#define _IMP_IS_FROZEN_METHODDEF \ + {"is_frozen", (PyCFunction)_imp_is_frozen, METH_O, _imp_is_frozen__doc__}, + +static PyObject * +_imp_is_frozen_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +_imp_is_frozen(PyModuleDef *module, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *name; + + if (!PyArg_Parse(arg, + "U:is_frozen", + &name)) + goto exit; + return_value = _imp_is_frozen_impl(module, name); + +exit: + return return_value; +} + +#if defined(HAVE_DYNAMIC_LOADING) + +PyDoc_STRVAR(_imp_load_dynamic__doc__, +"load_dynamic($module, name, path, file=None, /)\n" +"--\n" +"\n" +"Loads an extension module."); + +#define _IMP_LOAD_DYNAMIC_METHODDEF \ + {"load_dynamic", (PyCFunction)_imp_load_dynamic, METH_VARARGS, _imp_load_dynamic__doc__}, + +static PyObject * +_imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, + PyObject *file); + +static PyObject * +_imp_load_dynamic(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *name; + PyObject *path; + PyObject *file = NULL; + + if (!PyArg_ParseTuple(args, + "UO&|O:load_dynamic", + &name, PyUnicode_FSDecoder, &path, &file)) + goto exit; + return_value = _imp_load_dynamic_impl(module, name, path, file); + +exit: + return return_value; +} + +#endif /* defined(HAVE_DYNAMIC_LOADING) */ + +#ifndef _IMP_LOAD_DYNAMIC_METHODDEF + #define _IMP_LOAD_DYNAMIC_METHODDEF +#endif /* !defined(_IMP_LOAD_DYNAMIC_METHODDEF) */ +/*[clinic end generated code: output=b64fe33fe76591cf input=a9049054013a1b77]*/ diff --git a/Python/codecs.c b/Python/codecs.c index 6849c0f..64fc3d6 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -9,6 +9,7 @@ Copyright (c) Corporation for National Research Initiatives. ------------------------------------------------------------------------ */ #include "Python.h" +#include "ucnhash.h" #include <ctype.h> const char *Py_hexdigits = "0123456789abcdef"; @@ -863,6 +864,119 @@ PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc) PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc) { + PyObject *object; + Py_ssize_t i; + Py_ssize_t start; + Py_ssize_t end; + PyObject *res; + unsigned char *outp; + int ressize; + Py_UCS4 c; + + if (PyObject_IsInstance(exc, PyExc_UnicodeDecodeError)) { + unsigned char *p; + if (PyUnicodeDecodeError_GetStart(exc, &start)) + return NULL; + if (PyUnicodeDecodeError_GetEnd(exc, &end)) + return NULL; + if (!(object = PyUnicodeDecodeError_GetObject(exc))) + return NULL; + if (!(p = (unsigned char*)PyBytes_AsString(object))) { + Py_DECREF(object); + return NULL; + } + res = PyUnicode_New(4 * (end - start), 127); + if (res == NULL) { + Py_DECREF(object); + return NULL; + } + outp = PyUnicode_1BYTE_DATA(res); + for (i = start; i < end; i++, outp += 4) { + unsigned char c = p[i]; + outp[0] = '\\'; + outp[1] = 'x'; + outp[2] = Py_hexdigits[(c>>4)&0xf]; + outp[3] = Py_hexdigits[c&0xf]; + } + + assert(_PyUnicode_CheckConsistency(res, 1)); + Py_DECREF(object); + return Py_BuildValue("(Nn)", res, end); + } + if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) { + if (PyUnicodeEncodeError_GetStart(exc, &start)) + return NULL; + if (PyUnicodeEncodeError_GetEnd(exc, &end)) + return NULL; + if (!(object = PyUnicodeEncodeError_GetObject(exc))) + return NULL; + } + else if (PyObject_IsInstance(exc, PyExc_UnicodeTranslateError)) { + if (PyUnicodeTranslateError_GetStart(exc, &start)) + return NULL; + if (PyUnicodeTranslateError_GetEnd(exc, &end)) + return NULL; + if (!(object = PyUnicodeTranslateError_GetObject(exc))) + return NULL; + } + else { + wrong_exception_type(exc); + return NULL; + } + + if (end - start > PY_SSIZE_T_MAX / (1+1+8)) + end = start + PY_SSIZE_T_MAX / (1+1+8); + for (i = start, ressize = 0; i < end; ++i) { + /* object is guaranteed to be "ready" */ + c = PyUnicode_READ_CHAR(object, i); + if (c >= 0x10000) { + ressize += 1+1+8; + } + else if (c >= 0x100) { + ressize += 1+1+4; + } + else + ressize += 1+1+2; + } + res = PyUnicode_New(ressize, 127); + if (res == NULL) { + Py_DECREF(object); + return NULL; + } + outp = PyUnicode_1BYTE_DATA(res); + for (i = start; i < end; ++i) { + c = PyUnicode_READ_CHAR(object, i); + *outp++ = '\\'; + if (c >= 0x00010000) { + *outp++ = 'U'; + *outp++ = Py_hexdigits[(c>>28)&0xf]; + *outp++ = Py_hexdigits[(c>>24)&0xf]; + *outp++ = Py_hexdigits[(c>>20)&0xf]; + *outp++ = Py_hexdigits[(c>>16)&0xf]; + *outp++ = Py_hexdigits[(c>>12)&0xf]; + *outp++ = Py_hexdigits[(c>>8)&0xf]; + } + else if (c >= 0x100) { + *outp++ = 'u'; + *outp++ = Py_hexdigits[(c>>12)&0xf]; + *outp++ = Py_hexdigits[(c>>8)&0xf]; + } + else + *outp++ = 'x'; + *outp++ = Py_hexdigits[(c>>4)&0xf]; + *outp++ = Py_hexdigits[c&0xf]; + } + + assert(_PyUnicode_CheckConsistency(res, 1)); + Py_DECREF(object); + return Py_BuildValue("(Nn)", res, end); +} + +static _PyUnicode_Name_CAPI *ucnhash_CAPI = NULL; +static int ucnhash_initialized = 0; + +PyObject *PyCodec_NameReplaceErrors(PyObject *exc) +{ if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) { PyObject *restuple; PyObject *object; @@ -872,36 +986,57 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc) PyObject *res; unsigned char *outp; Py_ssize_t ressize; + int replsize; Py_UCS4 c; + char buffer[256]; /* NAME_MAXLEN */ if (PyUnicodeEncodeError_GetStart(exc, &start)) return NULL; if (PyUnicodeEncodeError_GetEnd(exc, &end)) return NULL; if (!(object = PyUnicodeEncodeError_GetObject(exc))) return NULL; - if (end - start > PY_SSIZE_T_MAX / (1+1+8)) - end = start + PY_SSIZE_T_MAX / (1+1+8); + if (!ucnhash_initialized) { + /* load the unicode data module */ + ucnhash_CAPI = (_PyUnicode_Name_CAPI *)PyCapsule_Import( + PyUnicodeData_CAPSULE_NAME, 1); + ucnhash_initialized = 1; + } for (i = start, ressize = 0; i < end; ++i) { /* object is guaranteed to be "ready" */ c = PyUnicode_READ_CHAR(object, i); - if (c >= 0x10000) { - ressize += 1+1+8; + if (ucnhash_CAPI && + ucnhash_CAPI->getname(NULL, c, buffer, sizeof(buffer), 1)) { + replsize = 1+1+1+(int)strlen(buffer)+1; + } + else if (c >= 0x10000) { + replsize = 1+1+8; } else if (c >= 0x100) { - ressize += 1+1+4; + replsize = 1+1+4; } else - ressize += 1+1+2; + replsize = 1+1+2; + if (ressize > PY_SSIZE_T_MAX - replsize) + break; + ressize += replsize; } + end = i; res = PyUnicode_New(ressize, 127); - if (res == NULL) { - Py_DECREF(object); + if (res==NULL) return NULL; - } for (i = start, outp = PyUnicode_1BYTE_DATA(res); i < end; ++i) { c = PyUnicode_READ_CHAR(object, i); *outp++ = '\\'; + if (ucnhash_CAPI && + ucnhash_CAPI->getname(NULL, c, buffer, sizeof(buffer), 1)) { + *outp++ = 'N'; + *outp++ = '{'; + strcpy((char *)outp, buffer); + outp += strlen(buffer); + *outp++ = '}'; + continue; + } if (c >= 0x00010000) { *outp++ = 'U'; *outp++ = Py_hexdigits[(c>>28)&0xf]; @@ -922,6 +1057,7 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc) *outp++ = Py_hexdigits[c&0xf]; } + assert(outp == PyUnicode_1BYTE_DATA(res) + ressize); assert(_PyUnicode_CheckConsistency(res, 1)); restuple = Py_BuildValue("(Nn)", res, end); Py_DECREF(object); @@ -933,6 +1069,7 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc) } } +#define ENC_UNKNOWN -1 #define ENC_UTF8 0 #define ENC_UTF16BE 1 #define ENC_UTF16LE 2 @@ -948,7 +1085,11 @@ get_standard_encoding(const char *encoding, int *bytelength) encoding += 3; if (*encoding == '-' || *encoding == '_' ) encoding++; - if (encoding[0] == '1' && encoding[1] == '6') { + if (encoding[0] == '8' && encoding[1] == '\0') { + *bytelength = 3; + return ENC_UTF8; + } + else if (encoding[0] == '1' && encoding[1] == '6') { encoding += 2; *bytelength = 2; if (*encoding == '\0') { @@ -987,9 +1128,11 @@ get_standard_encoding(const char *encoding, int *bytelength) } } } - /* utf-8 */ - *bytelength = 3; - return ENC_UTF8; + else if (strcmp(encoding, "CP_UTF8") == 0) { + *bytelength = 3; + return ENC_UTF8; + } + return ENC_UNKNOWN; } /* This handler is declared static until someone demonstrates @@ -1026,6 +1169,12 @@ PyCodec_SurrogatePassErrors(PyObject *exc) } code = get_standard_encoding(encoding, &bytelength); Py_DECREF(encode); + if (code == ENC_UNKNOWN) { + /* Not supported, fail with original exception */ + PyErr_SetObject(PyExceptionInstance_Class(exc), exc); + Py_DECREF(object); + return NULL; + } if (end - start > PY_SSIZE_T_MAX / bytelength) end = start + PY_SSIZE_T_MAX / bytelength; @@ -1102,6 +1251,12 @@ PyCodec_SurrogatePassErrors(PyObject *exc) } code = get_standard_encoding(encoding, &bytelength); Py_DECREF(encode); + if (code == ENC_UNKNOWN) { + /* Not supported, fail with original exception */ + PyErr_SetObject(PyExceptionInstance_Class(exc), exc); + Py_DECREF(object); + return NULL; + } /* Try decoding a single surrogate character. If there are more, let the codec call us again. */ @@ -1257,6 +1412,11 @@ static PyObject *backslashreplace_errors(PyObject *self, PyObject *exc) return PyCodec_BackslashReplaceErrors(exc); } +static PyObject *namereplace_errors(PyObject *self, PyObject *exc) +{ + return PyCodec_NameReplaceErrors(exc); +} + static PyObject *surrogatepass_errors(PyObject *self, PyObject *exc) { return PyCodec_SurrogatePassErrors(exc); @@ -1322,8 +1482,19 @@ static int _PyCodecRegistry_Init(void) backslashreplace_errors, METH_O, PyDoc_STR("Implements the 'backslashreplace' error handling, " + "which replaces malformed data with a backslashed " + "escape sequence.") + } + }, + { + "namereplace", + { + "namereplace_errors", + namereplace_errors, + METH_O, + PyDoc_STR("Implements the 'namereplace' error handling, " "which replaces an unencodable character with a " - "backslashed escape sequence.") + "\\N{...} escape sequence.") } }, { diff --git a/Python/compile.c b/Python/compile.c index 3d7152c..d5009e1 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -30,8 +30,6 @@ #include "symtable.h" #include "opcode.h" -int Py_OptimizeFlag = 0; - #define DEFAULT_BLOCK_SIZE 16 #define DEFAULT_BLOCKS 8 #define DEFAULT_CODE_SIZE 128 @@ -881,6 +879,7 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) case BINARY_POWER: case BINARY_MULTIPLY: + case BINARY_MATRIX_MULTIPLY: case BINARY_MODULO: case BINARY_ADD: case BINARY_SUBTRACT: @@ -895,6 +894,7 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) case INPLACE_ADD: case INPLACE_SUBTRACT: case INPLACE_MULTIPLY: + case INPLACE_MATRIX_MULTIPLY: case INPLACE_MODULO: return -1; case STORE_SUBSCR: @@ -1938,7 +1938,7 @@ compiler_if(struct compiler *c, stmt_ty s) } else if (constant == 1) { VISIT_SEQ(c, stmt, s->v.If.body); } else { - if (s->v.If.orelse) { + if (asdl_seq_LEN(s->v.If.orelse)) { next = compiler_new_block(c); if (next == NULL) return 0; @@ -1948,8 +1948,8 @@ compiler_if(struct compiler *c, stmt_ty s) VISIT(c, expr, s->v.If.test); ADDOP_JABS(c, POP_JUMP_IF_FALSE, next); VISIT_SEQ(c, stmt, s->v.If.body); - ADDOP_JREL(c, JUMP_FORWARD, end); - if (s->v.If.orelse) { + if (asdl_seq_LEN(s->v.If.orelse)) { + ADDOP_JREL(c, JUMP_FORWARD, end); compiler_use_next_block(c, next); VISIT_SEQ(c, stmt, s->v.If.orelse); } @@ -2624,6 +2624,8 @@ binop(struct compiler *c, operator_ty op) return BINARY_SUBTRACT; case Mult: return BINARY_MULTIPLY; + case MatMult: + return BINARY_MATRIX_MULTIPLY; case Div: return BINARY_TRUE_DIVIDE; case Mod: @@ -2688,6 +2690,8 @@ inplace_binop(struct compiler *c, operator_ty op) return INPLACE_SUBTRACT; case Mult: return INPLACE_MULTIPLY; + case MatMult: + return INPLACE_MATRIX_MULTIPLY; case Div: return INPLACE_TRUE_DIVIDE; case Mod: diff --git a/Python/condvar.h b/Python/condvar.h index ef818c4..bb5b1b6 100644 --- a/Python/condvar.h +++ b/Python/condvar.h @@ -1,4 +1,4 @@ -/* +/* * Portable condition variable support for windows and pthreads. * Everything is inline, this header can be included where needed. * @@ -105,7 +105,7 @@ PyCOND_TIMEDWAIT(PyCOND_T *cond, PyMUTEX_T *mut, PY_LONG_LONG us) return 1; else if (r) return -1; - else + else return 0; } @@ -255,7 +255,7 @@ _PyCOND_WAIT_MS(PyCOND_T *cv, PyMUTEX_T *cs, DWORD ms) * a new thread comes along, it will pass right throuhgh, having * adjusted it to (waiting == 0 && sem.count == 0). */ - + if (wait == WAIT_FAILED) return -1; /* return 0 on success, 1 on timeout */ diff --git a/Python/dtoa.c b/Python/dtoa.c index 8996a72..3da546e 100644 --- a/Python/dtoa.c +++ b/Python/dtoa.c @@ -373,7 +373,7 @@ Balloc(int k) x = 1 << k; len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1) /sizeof(double); - if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) { + if (k <= Kmax && pmem_next - private_mem + len <= (Py_ssize_t)PRIVATE_mem) { rv = (Bigint*)pmem_next; pmem_next += len; } @@ -1087,7 +1087,7 @@ sd2b(U *d, int scale, int *e) b = Balloc(1); if (b == NULL) return NULL; - + /* First construct b and e assuming that scale == 0. */ b->wds = 2; b->x[0] = word1(d); diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c index 5cd1efd..1a467fd 100644 --- a/Python/dynload_shlib.c +++ b/Python/dynload_shlib.c @@ -71,22 +71,20 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname, if (fp != NULL) { int i; - struct stat statb; - if (fstat(fileno(fp), &statb) == -1) { - PyErr_SetFromErrno(PyExc_IOError); + struct _Py_stat_struct status; + if (_Py_fstat(fileno(fp), &status) == -1) return NULL; - } for (i = 0; i < nhandles; i++) { - if (statb.st_dev == handles[i].dev && - statb.st_ino == handles[i].ino) { + if (status.st_dev == handles[i].dev && + status.st_ino == handles[i].ino) { p = (dl_funcptr) dlsym(handles[i].handle, funcname); return p; } } if (nhandles < 128) { - handles[nhandles].dev = statb.st_dev; - handles[nhandles].ino = statb.st_ino; + handles[nhandles].dev = status.st_dev; + handles[nhandles].ino = status.st_ino; } } diff --git a/Python/dynload_win.c b/Python/dynload_win.c index ffcf0ee..9ed9eea 100644 --- a/Python/dynload_win.c +++ b/Python/dynload_win.c @@ -9,6 +9,7 @@ #include <ctype.h> #include "importdl.h" +#include "patchlevel.h" #include <windows.h> // "activation context" magic - see dl_nt.c... @@ -17,16 +18,28 @@ extern ULONG_PTR _Py_ActivateActCtx(); void _Py_DeactivateActCtx(ULONG_PTR cookie); #endif -const char *_PyImport_DynLoadFiletab[] = { #ifdef _DEBUG - "_d.pyd", +#define PYD_DEBUG_SUFFIX "_d" +#else +#define PYD_DEBUG_SUFFIX "" +#endif + +#define STRINGIZE2(x) #x +#define STRINGIZE(x) STRINGIZE2(x) +#ifdef PYD_PLATFORM_TAG +#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" STRINGIZE(PY_MAJOR_VERSION) STRINGIZE(PY_MINOR_VERSION) "-" PYD_PLATFORM_TAG ".pyd" #else - ".pyd", +#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" STRINGIZE(PY_MAJOR_VERSION) STRINGIZE(PY_MINOR_VERSION) ".pyd" #endif + +#define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd" + +const char *_PyImport_DynLoadFiletab[] = { + PYD_TAGGED_SUFFIX, + PYD_UNTAGGED_SUFFIX, NULL }; - /* Case insensitive string compare, to avoid any dependencies on particular C RTL implementations */ diff --git a/Python/errors.c b/Python/errors.c index b0ad9aa..1172c59 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -74,11 +74,11 @@ PyErr_SetObject(PyObject *exception, PyObject *value) if (value == NULL || !PyExceptionInstance_Check(value)) { /* We must normalize the value right now */ PyObject *args, *fixed_value; -#ifdef Py_DEBUG - /* in debug mode, PyEval_EvalFrameEx() fails with an assertion - error if an exception is set when it is called */ + + /* Issue #23571: PyEval_CallObject() must not be called with an + exception set */ PyErr_Clear(); -#endif + if (value == NULL || value == Py_None) args = PyTuple_New(0); else if (PyTuple_Check(value)) { @@ -773,34 +773,38 @@ PyErr_BadInternalCall(void) #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) +PyObject * +PyErr_FormatV(PyObject *exception, const char *format, va_list vargs) +{ + PyObject* string; + + /* Issue #23571: PyUnicode_FromFormatV() must not be called with an + exception set, it calls arbitrary Python code like PyObject_Repr() */ + PyErr_Clear(); + + string = PyUnicode_FromFormatV(format, vargs); + + PyErr_SetObject(exception, string); + Py_XDECREF(string); + return NULL; +} + PyObject * PyErr_Format(PyObject *exception, const char *format, ...) { va_list vargs; - PyObject* string; - #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif - -#ifdef Py_DEBUG - /* in debug mode, PyEval_EvalFrameEx() fails with an assertion error - if an exception is set when it is called */ - PyErr_Clear(); -#endif - - string = PyUnicode_FromFormatV(format, vargs); - PyErr_SetObject(exception, string); - Py_XDECREF(string); + PyErr_FormatV(exception, format, vargs); va_end(vargs); return NULL; } - PyObject * PyErr_NewException(const char *name, PyObject *base, PyObject *dict) { @@ -1121,6 +1125,10 @@ PyErr_ProgramTextObject(PyObject *filename, int lineno) if (filename == NULL || lineno <= 0) return NULL; fp = _Py_fopen_obj(filename, "r" PY_STDIOTEXTMODE); + if (fp == NULL) { + PyErr_Clear(); + return NULL; + } return err_programtext(fp, lineno); } diff --git a/Python/fileutils.c b/Python/fileutils.c index 31689c0..bccd321 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -3,7 +3,9 @@ #include <locale.h> #ifdef MS_WINDOWS +# include <malloc.h> # include <windows.h> +extern int winerror_to_errno(int); #endif #ifdef HAVE_LANGINFO_H @@ -29,7 +31,8 @@ extern wchar_t* _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size); 0: open() ignores O_CLOEXEC flag, ex: Linux kernel older than 2.6.23 1: open() supports O_CLOEXEC flag, close-on-exec is set - The flag is used by _Py_open(), io.FileIO and os.open() */ + The flag is used by _Py_open(), _Py_open_noraise(), io.FileIO + and os.open(). */ int _Py_open_cloexec_works = -1; #endif @@ -39,9 +42,13 @@ _Py_device_encoding(int fd) #if defined(MS_WINDOWS) UINT cp; #endif - if (!_PyVerify_fd(fd) || !isatty(fd)) { + int valid; + _Py_BEGIN_SUPPRESS_IPH + valid = _PyVerify_fd(fd) && isatty(fd); + _Py_END_SUPPRESS_IPH + if (!valid) Py_RETURN_NONE; - } + #if defined(MS_WINDOWS) if (fd == 0) cp = GetConsoleCP(); @@ -82,11 +89,11 @@ extern int _Py_normalize_encoding(const char *, char *, size_t); Values of force_ascii: - 1: the workaround is used: _Py_wchar2char() uses - encode_ascii_surrogateescape() and _Py_char2wchar() uses + 1: the workaround is used: Py_EncodeLocale() uses + encode_ascii_surrogateescape() and Py_DecodeLocale() uses decode_ascii_surrogateescape() - 0: the workaround is not used: _Py_wchar2char() uses wcstombs() and - _Py_char2wchar() uses mbstowcs() + 0: the workaround is not used: Py_EncodeLocale() uses wcstombs() and + Py_DecodeLocale() uses mbstowcs() -1: unknown, need to call check_force_ascii() to get the value */ static int force_ascii = -1; @@ -244,24 +251,26 @@ decode_ascii_surrogateescape(const char *arg, size_t *size) /* Decode a byte string from the locale encoding with the - surrogateescape error handler (undecodable bytes are decoded as characters - in range U+DC80..U+DCFF). If a byte sequence can be decoded as a surrogate + surrogateescape error handler: undecodable bytes are decoded as characters + in range U+DC80..U+DCFF. If a byte sequence can be decoded as a surrogate character, escape the bytes using the surrogateescape error handler instead of decoding them. - Use _Py_wchar2char() to encode the character string back to a byte string. + Return a pointer to a newly allocated wide character string, use + PyMem_RawFree() to free the memory. If size is not NULL, write the number of + wide characters excluding the null character into *size - Return a pointer to a newly allocated wide character string (use - PyMem_RawFree() to free the memory) and write the number of written wide - characters excluding the null character into *size if size is not NULL, or - NULL on error (decoding or memory allocation error). If size is not NULL, - *size is set to (size_t)-1 on memory error and (size_t)-2 on decoding - error. + Return NULL on decoding error or memory allocation error. If *size* is not + NULL, *size is set to (size_t)-1 on memory error or set to (size_t)-2 on + decoding error. + + Decoding errors should never happen, unless there is a bug in the C + library. - Conversion errors should never happen, unless there is a bug in the C - library. */ + Use the Py_EncodeLocale() function to encode the character string back to a + byte string. */ wchar_t* -_Py_char2wchar(const char* arg, size_t *size) +Py_DecodeLocale(const char* arg, size_t *size) { #ifdef __APPLE__ wchar_t *wstr; @@ -399,19 +408,20 @@ oom: #endif /* __APPLE__ */ } -/* Encode a (wide) character string to the locale encoding with the - surrogateescape error handler (characters in range U+DC80..U+DCFF are - converted to bytes 0x80..0xFF). +/* Encode a wide character string to the locale encoding with the + surrogateescape error handler: surrogate characters in the range + U+DC80..U+DCFF are converted to bytes 0x80..0xFF. - This function is the reverse of _Py_char2wchar(). + Return a pointer to a newly allocated byte string, use PyMem_Free() to free + the memory. Return NULL on encoding or memory allocation error. - Return a pointer to a newly allocated byte string (use PyMem_Free() to free - the memory), or NULL on encoding or memory allocation error. + If error_pos is not NULL, *error_pos is set to the index of the invalid + character on encoding error, or set to (size_t)-1 otherwise. - If error_pos is not NULL: *error_pos is the index of the invalid character - on encoding error, or (size_t)-1 otherwise. */ + Use the Py_DecodeLocale() function to decode the bytes string back to a wide + character string. */ char* -_Py_wchar2char(const wchar_t *text, size_t *error_pos) +Py_EncodeLocale(const wchar_t *text, size_t *error_pos) { #ifdef __APPLE__ Py_ssize_t len; @@ -514,34 +524,179 @@ _Py_wchar2char(const wchar_t *text, size_t *error_pos) #endif /* __APPLE__ */ } -/* In principle, this should use HAVE__WSTAT, and _wstat - should be detected by autoconf. However, no current - POSIX system provides that function, so testing for - it is pointless. - Not sure whether the MS_WINDOWS guards are necessary: - perhaps for cygwin/mingw builds? -*/ -#if defined(HAVE_STAT) && !defined(MS_WINDOWS) -/* Get file status. Encode the path to the locale encoding. */ +#ifdef MS_WINDOWS +static __int64 secs_between_epochs = 11644473600; /* Seconds between 1.1.1601 and 1.1.1970 */ + +static void +FILE_TIME_to_time_t_nsec(FILETIME *in_ptr, time_t *time_out, int* nsec_out) +{ + /* XXX endianness. Shouldn't matter, as all Windows implementations are little-endian */ + /* Cannot simply cast and dereference in_ptr, + since it might not be aligned properly */ + __int64 in; + memcpy(&in, in_ptr, sizeof(in)); + *nsec_out = (int)(in % 10000000) * 100; /* FILETIME is in units of 100 nsec. */ + *time_out = Py_SAFE_DOWNCAST((in / 10000000) - secs_between_epochs, __int64, time_t); +} + +void +_Py_time_t_to_FILE_TIME(time_t time_in, int nsec_in, FILETIME *out_ptr) +{ + /* XXX endianness */ + __int64 out; + out = time_in + secs_between_epochs; + out = out * 10000000 + nsec_in / 100; + memcpy(out_ptr, &out, sizeof(out)); +} +/* Below, we *know* that ugo+r is 0444 */ +#if _S_IREAD != 0400 +#error Unsupported C library +#endif +static int +attributes_to_mode(DWORD attr) +{ + int m = 0; + if (attr & FILE_ATTRIBUTE_DIRECTORY) + m |= _S_IFDIR | 0111; /* IFEXEC for user,group,other */ + else + m |= _S_IFREG; + if (attr & FILE_ATTRIBUTE_READONLY) + m |= 0444; + else + m |= 0666; + return m; +} + +void +_Py_attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, + struct _Py_stat_struct *result) +{ + memset(result, 0, sizeof(*result)); + result->st_mode = attributes_to_mode(info->dwFileAttributes); + result->st_size = (((__int64)info->nFileSizeHigh)<<32) + info->nFileSizeLow; + result->st_dev = info->dwVolumeSerialNumber; + result->st_rdev = result->st_dev; + FILE_TIME_to_time_t_nsec(&info->ftCreationTime, &result->st_ctime, &result->st_ctime_nsec); + FILE_TIME_to_time_t_nsec(&info->ftLastWriteTime, &result->st_mtime, &result->st_mtime_nsec); + FILE_TIME_to_time_t_nsec(&info->ftLastAccessTime, &result->st_atime, &result->st_atime_nsec); + result->st_nlink = info->nNumberOfLinks; + result->st_ino = (((__int64)info->nFileIndexHigh)<<32) + info->nFileIndexLow; + if (reparse_tag == IO_REPARSE_TAG_SYMLINK) { + /* first clear the S_IFMT bits */ + result->st_mode ^= (result->st_mode & S_IFMT); + /* now set the bits that make this a symlink */ + result->st_mode |= S_IFLNK; + } + result->st_file_attributes = info->dwFileAttributes; +} +#endif + +/* Return information about a file. + + On POSIX, use fstat(). + + On Windows, use GetFileType() and GetFileInformationByHandle() which support + files larger than 2 GB. fstat() may fail with EOVERFLOW on files larger + than 2 GB because the file size type is an signed 32-bit integer: see issue + #23152. + + On Windows, set the last Windows error and return nonzero on error. On + POSIX, set errno and return nonzero on error. Fill status and return 0 on + success. */ int -_Py_wstat(const wchar_t* path, struct stat *buf) +_Py_fstat_noraise(int fd, struct _Py_stat_struct *status) { - int err; - char *fname; - fname = _Py_wchar2char(path, NULL); - if (fname == NULL) { - errno = EINVAL; +#ifdef MS_WINDOWS + BY_HANDLE_FILE_INFORMATION info; + HANDLE h; + int type; + + if (!_PyVerify_fd(fd)) + h = INVALID_HANDLE_VALUE; + else { + _Py_BEGIN_SUPPRESS_IPH + h = (HANDLE)_get_osfhandle(fd); + _Py_END_SUPPRESS_IPH + } + + if (h == INVALID_HANDLE_VALUE) { + /* errno is already set by _get_osfhandle, but we also set + the Win32 error for callers who expect that */ + SetLastError(ERROR_INVALID_HANDLE); return -1; } - err = stat(fname, buf); - PyMem_Free(fname); - return err; -} + memset(status, 0, sizeof(*status)); + + type = GetFileType(h); + if (type == FILE_TYPE_UNKNOWN) { + DWORD error = GetLastError(); + if (error != 0) { + errno = winerror_to_errno(error); + return -1; + } + /* else: valid but unknown file */ + } + + if (type != FILE_TYPE_DISK) { + if (type == FILE_TYPE_CHAR) + status->st_mode = _S_IFCHR; + else if (type == FILE_TYPE_PIPE) + status->st_mode = _S_IFIFO; + return 0; + } + + if (!GetFileInformationByHandle(h, &info)) { + /* The Win32 error is already set, but we also set errno for + callers who expect it */ + errno = winerror_to_errno(GetLastError()); + return -1; + } + + _Py_attribute_data_to_stat(&info, 0, status); + /* specific to fstat() */ + status->st_ino = (((__int64)info.nFileIndexHigh)<<32) + info.nFileIndexLow; + return 0; +#else + return fstat(fd, status); #endif +} + +/* Return information about a file. + + On POSIX, use fstat(). -#ifdef HAVE_STAT + On Windows, use GetFileType() and GetFileInformationByHandle() which support + files larger than 2 GB. fstat() may fail with EOVERFLOW on files larger + than 2 GB because the file size type is an signed 32-bit integer: see issue + #23152. + + Raise an exception and return -1 on error. On Windows, set the last Windows + error on error. On POSIX, set errno on error. Fill status and return 0 on + success. + + Release the GIL to call GetFileType() and GetFileInformationByHandle(), or + to call fstat(). The caller must hold the GIL. */ +int +_Py_fstat(int fd, struct _Py_stat_struct *status) +{ + int res; + + Py_BEGIN_ALLOW_THREADS + res = _Py_fstat_noraise(fd, status); + Py_END_ALLOW_THREADS + + if (res != 0) { +#ifdef MS_WINDOWS + PyErr_SetFromWindowsErr(0); +#else + PyErr_SetFromErrno(PyExc_OSError); +#endif + return -1; + } + return 0; +} /* Call _wstat() on Windows, or encode the path to the filesystem encoding and call stat() otherwise. Only fill st_mode attribute on Windows. @@ -575,7 +730,6 @@ _Py_stat(PyObject *path, struct stat *statbuf) #endif } -#endif static int get_inheritable(int fd, int raise) @@ -590,7 +744,9 @@ get_inheritable(int fd, int raise) return -1; } + _Py_BEGIN_SUPPRESS_IPH handle = (HANDLE)_get_osfhandle(fd); + _Py_END_SUPPRESS_IPH if (handle == INVALID_HANDLE_VALUE) { if (raise) PyErr_SetFromErrno(PyExc_OSError); @@ -665,7 +821,9 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) return -1; } + _Py_BEGIN_SUPPRESS_IPH handle = (HANDLE)_get_osfhandle(fd); + _Py_END_SUPPRESS_IPH if (handle == INVALID_HANDLE_VALUE) { if (raise) PyErr_SetFromErrno(PyExc_OSError); @@ -767,40 +925,90 @@ _Py_set_inheritable(int fd, int inheritable, int *atomic_flag_works) return set_inheritable(fd, inheritable, 1, atomic_flag_works); } -/* Open a file with the specified flags (wrapper to open() function). - The file descriptor is created non-inheritable. */ -int -_Py_open(const char *pathname, int flags) +static int +_Py_open_impl(const char *pathname, int flags, int gil_held) { int fd; -#ifdef MS_WINDOWS - fd = open(pathname, flags | O_NOINHERIT); - if (fd < 0) - return fd; -#else - + int async_err = 0; +#ifndef MS_WINDOWS int *atomic_flag_works; -#ifdef O_CLOEXEC +#endif + +#ifdef MS_WINDOWS + flags |= O_NOINHERIT; +#elif defined(O_CLOEXEC) atomic_flag_works = &_Py_open_cloexec_works; flags |= O_CLOEXEC; #else atomic_flag_works = NULL; #endif - fd = open(pathname, flags); - if (fd < 0) - return fd; - if (set_inheritable(fd, 0, 0, atomic_flag_works) < 0) { + if (gil_held) { + do { + Py_BEGIN_ALLOW_THREADS + fd = open(pathname, flags); + Py_END_ALLOW_THREADS + } while (fd < 0 + && errno == EINTR && !(async_err = PyErr_CheckSignals())); + if (async_err) + return -1; + if (fd < 0) { + PyErr_SetFromErrnoWithFilename(PyExc_OSError, pathname); + return -1; + } + } + else { + fd = open(pathname, flags); + if (fd < 0) + return -1; + } + +#ifndef MS_WINDOWS + if (set_inheritable(fd, 0, gil_held, atomic_flag_works) < 0) { close(fd); return -1; } -#endif /* !MS_WINDOWS */ +#endif + return fd; } +/* Open a file with the specified flags (wrapper to open() function). + Return a file descriptor on success. Raise an exception and return -1 on + error. + + The file descriptor is created non-inheritable. + + When interrupted by a signal (open() fails with EINTR), retry the syscall, + except if the Python signal handler raises an exception. + + Release the GIL to call open(). The caller must hold the GIL. */ +int +_Py_open(const char *pathname, int flags) +{ + /* _Py_open() must be called with the GIL held. */ + assert(PyGILState_Check()); + return _Py_open_impl(pathname, flags, 1); +} + +/* Open a file with the specified flags (wrapper to open() function). + Return a file descriptor on success. Set errno and return -1 on error. + + The file descriptor is created non-inheritable. + + If interrupted by a signal, fail with EINTR. */ +int +_Py_open_noraise(const char *pathname, int flags) +{ + return _Py_open_impl(pathname, flags, 0); +} + /* Open a file. Use _wfopen() on Windows, encode the path to the locale - encoding and use fopen() otherwise. The file descriptor is created - non-inheritable. */ + encoding and use fopen() otherwise. + + The file descriptor is created non-inheritable. + + If interrupted by a signal, fail with EINTR. */ FILE * _Py_wfopen(const wchar_t *path, const wchar_t *mode) { @@ -814,7 +1022,7 @@ _Py_wfopen(const wchar_t *path, const wchar_t *mode) errno = EINVAL; return NULL; } - cpath = _Py_wchar2char(path, NULL); + cpath = Py_EncodeLocale(path, NULL); if (cpath == NULL) return NULL; f = fopen(cpath, cmode); @@ -831,7 +1039,11 @@ _Py_wfopen(const wchar_t *path, const wchar_t *mode) return f; } -/* Wrapper to fopen(). The file descriptor is created non-inheritable. */ +/* Wrapper to fopen(). + + The file descriptor is created non-inheritable. + + If interrupted by a signal, fail with EINTR. */ FILE* _Py_fopen(const char *pathname, const char *mode) { @@ -846,20 +1058,30 @@ _Py_fopen(const char *pathname, const char *mode) } /* Open a file. Call _wfopen() on Windows, or encode the path to the filesystem - encoding and call fopen() otherwise. The file descriptor is created - non-inheritable. + encoding and call fopen() otherwise. + + Return the new file object on success. Raise an exception and return NULL + on error. + + The file descriptor is created non-inheritable. + + When interrupted by a signal (open() fails with EINTR), retry the syscall, + except if the Python signal handler raises an exception. - Return the new file object on success, or NULL if the file cannot be open or - (if PyErr_Occurred()) on unicode error. */ + Release the GIL to call _wfopen() or fopen(). The caller must hold + the GIL. */ FILE* _Py_fopen_obj(PyObject *path, const char *mode) { FILE *f; + int async_err = 0; #ifdef MS_WINDOWS wchar_t *wpath; wchar_t wmode[10]; int usize; + assert(PyGILState_Check()); + if (!PyUnicode_Check(path)) { PyErr_Format(PyExc_TypeError, "str file path expected under Windows, got %R", @@ -871,26 +1093,247 @@ _Py_fopen_obj(PyObject *path, const char *mode) return NULL; usize = MultiByteToWideChar(CP_ACP, 0, mode, -1, wmode, sizeof(wmode)); - if (usize == 0) + if (usize == 0) { + PyErr_SetFromWindowsErr(0); return NULL; + } - f = _wfopen(wpath, wmode); + do { + Py_BEGIN_ALLOW_THREADS + f = _wfopen(wpath, wmode); + Py_END_ALLOW_THREADS + } while (f == NULL + && errno == EINTR && !(async_err = PyErr_CheckSignals())); #else PyObject *bytes; + char *path_bytes; + + assert(PyGILState_Check()); + if (!PyUnicode_FSConverter(path, &bytes)) return NULL; - f = fopen(PyBytes_AS_STRING(bytes), mode); + path_bytes = PyBytes_AS_STRING(bytes); + + do { + Py_BEGIN_ALLOW_THREADS + f = fopen(path_bytes, mode); + Py_END_ALLOW_THREADS + } while (f == NULL + && errno == EINTR && !(async_err = PyErr_CheckSignals())); + Py_DECREF(bytes); #endif - if (f == NULL) + if (async_err) return NULL; - if (make_non_inheritable(fileno(f)) < 0) { + + if (f == NULL) { + PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path); + return NULL; + } + + if (set_inheritable(fileno(f), 0, 1, NULL) < 0) { fclose(f); return NULL; } return f; } +/* Read count bytes from fd into buf. + + On success, return the number of read bytes, it can be lower than count. + If the current file offset is at or past the end of file, no bytes are read, + and read() returns zero. + + On error, raise an exception, set errno and return -1. + + When interrupted by a signal (read() fails with EINTR), retry the syscall. + If the Python signal handler raises an exception, the function returns -1 + (the syscall is not retried). + + Release the GIL to call read(). The caller must hold the GIL. */ +Py_ssize_t +_Py_read(int fd, void *buf, size_t count) +{ + Py_ssize_t n; + int err; + int async_err = 0; + + /* _Py_read() must not be called with an exception set, otherwise the + * caller may think that read() was interrupted by a signal and the signal + * handler raised an exception. */ + assert(!PyErr_Occurred()); + + if (!_PyVerify_fd(fd)) { + /* save/restore errno because PyErr_SetFromErrno() can modify it */ + err = errno; + PyErr_SetFromErrno(PyExc_OSError); + errno = err; + return -1; + } + +#ifdef MS_WINDOWS + if (count > INT_MAX) { + /* On Windows, the count parameter of read() is an int */ + count = INT_MAX; + } +#else + if (count > PY_SSIZE_T_MAX) { + /* if count is greater than PY_SSIZE_T_MAX, + * read() result is undefined */ + count = PY_SSIZE_T_MAX; + } +#endif + + _Py_BEGIN_SUPPRESS_IPH + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; +#ifdef MS_WINDOWS + n = read(fd, buf, (int)count); +#else + n = read(fd, buf, count); +#endif + /* save/restore errno because PyErr_CheckSignals() + * and PyErr_SetFromErrno() can modify it */ + err = errno; + Py_END_ALLOW_THREADS + } while (n < 0 && err == EINTR && + !(async_err = PyErr_CheckSignals())); + _Py_END_SUPPRESS_IPH + + if (async_err) { + /* read() was interrupted by a signal (failed with EINTR) + * and the Python signal handler raised an exception */ + errno = err; + assert(errno == EINTR && PyErr_Occurred()); + return -1; + } + if (n < 0) { + PyErr_SetFromErrno(PyExc_OSError); + errno = err; + return -1; + } + + return n; +} + +static Py_ssize_t +_Py_write_impl(int fd, const void *buf, size_t count, int gil_held) +{ + Py_ssize_t n; + int err; + int async_err = 0; + + if (!_PyVerify_fd(fd)) { + if (gil_held) { + /* save/restore errno because PyErr_SetFromErrno() can modify it */ + err = errno; + PyErr_SetFromErrno(PyExc_OSError); + errno = err; + } + return -1; + } + + _Py_BEGIN_SUPPRESS_IPH +#ifdef MS_WINDOWS + if (count > 32767 && isatty(fd)) { + /* Issue #11395: the Windows console returns an error (12: not + enough space error) on writing into stdout if stdout mode is + binary and the length is greater than 66,000 bytes (or less, + depending on heap usage). */ + count = 32767; + } + else if (count > INT_MAX) + count = INT_MAX; +#else + if (count > PY_SSIZE_T_MAX) { + /* write() should truncate count to PY_SSIZE_T_MAX, but it's safer + * to do it ourself to have a portable behaviour. */ + count = PY_SSIZE_T_MAX; + } +#endif + + if (gil_held) { + do { + Py_BEGIN_ALLOW_THREADS + errno = 0; +#ifdef MS_WINDOWS + n = write(fd, buf, (int)count); +#else + n = write(fd, buf, count); +#endif + /* save/restore errno because PyErr_CheckSignals() + * and PyErr_SetFromErrno() can modify it */ + err = errno; + Py_END_ALLOW_THREADS + } while (n < 0 && err == EINTR && + !(async_err = PyErr_CheckSignals())); + } + else { + do { + errno = 0; +#ifdef MS_WINDOWS + n = write(fd, buf, (int)count); +#else + n = write(fd, buf, count); +#endif + err = errno; + } while (n < 0 && err == EINTR); + } + _Py_END_SUPPRESS_IPH + + if (async_err) { + /* write() was interrupted by a signal (failed with EINTR) + and the Python signal handler raised an exception (if gil_held is + nonzero). */ + errno = err; + assert(errno == EINTR && (!gil_held || PyErr_Occurred())); + return -1; + } + if (n < 0) { + if (gil_held) + PyErr_SetFromErrno(PyExc_OSError); + errno = err; + return -1; + } + + return n; +} + +/* Write count bytes of buf into fd. + + On success, return the number of written bytes, it can be lower than count + including 0. On error, raise an exception, set errno and return -1. + + When interrupted by a signal (write() fails with EINTR), retry the syscall. + If the Python signal handler raises an exception, the function returns -1 + (the syscall is not retried). + + Release the GIL to call write(). The caller must hold the GIL. */ +Py_ssize_t +_Py_write(int fd, const void *buf, size_t count) +{ + /* _Py_write() must not be called with an exception set, otherwise the + * caller may think that write() was interrupted by a signal and the signal + * handler raised an exception. */ + assert(!PyErr_Occurred()); + + return _Py_write_impl(fd, buf, count, 1); +} + +/* Write count bytes of buf into fd. + * + * On success, return the number of written bytes, it can be lower than count + * including 0. On error, set errno and return -1. + * + * When interrupted by a signal (write() fails with EINTR), retry the syscall + * without calling the Python signal handler. */ +Py_ssize_t +_Py_write_noraise(int fd, const void *buf, size_t count) +{ + return _Py_write_impl(fd, buf, count, 0); +} + #ifdef HAVE_READLINK /* Read value of symbolic link. Encode the path to the locale encoding, decode @@ -905,7 +1348,7 @@ _Py_wreadlink(const wchar_t *path, wchar_t *buf, size_t bufsiz) int res; size_t r1; - cpath = _Py_wchar2char(path, NULL); + cpath = Py_EncodeLocale(path, NULL); if (cpath == NULL) { errno = EINVAL; return -1; @@ -919,7 +1362,7 @@ _Py_wreadlink(const wchar_t *path, wchar_t *buf, size_t bufsiz) return -1; } cbuf[res] = '\0'; /* buf will be null terminated */ - wbuf = _Py_char2wchar(cbuf, &r1); + wbuf = Py_DecodeLocale(cbuf, &r1); if (wbuf == NULL) { errno = EINVAL; return -1; @@ -950,7 +1393,7 @@ _Py_wrealpath(const wchar_t *path, wchar_t *wresolved_path; char *res; size_t r; - cpath = _Py_wchar2char(path, NULL); + cpath = Py_EncodeLocale(path, NULL); if (cpath == NULL) { errno = EINVAL; return NULL; @@ -960,7 +1403,7 @@ _Py_wrealpath(const wchar_t *path, if (res == NULL) return NULL; - wresolved_path = _Py_char2wchar(cresolved_path, &r); + wresolved_path = Py_DecodeLocale(cresolved_path, &r); if (wresolved_path == NULL) { errno = EINVAL; return NULL; @@ -993,7 +1436,7 @@ _Py_wgetcwd(wchar_t *buf, size_t size) if (getcwd(fname, Py_ARRAY_LENGTH(fname)) == NULL) return NULL; - wname = _Py_char2wchar(fname, &len); + wname = Py_DecodeLocale(fname, &len); if (wname == NULL) return NULL; if (size <= len) { @@ -1025,7 +1468,9 @@ _Py_dup(int fd) } #ifdef MS_WINDOWS + _Py_BEGIN_SUPPRESS_IPH handle = (HANDLE)_get_osfhandle(fd); + _Py_END_SUPPRESS_IPH if (handle == INVALID_HANDLE_VALUE) { PyErr_SetFromErrno(PyExc_OSError); return -1; @@ -1035,7 +1480,9 @@ _Py_dup(int fd) ftype = GetFileType(handle); Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH fd = dup(fd); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (fd < 0) { PyErr_SetFromErrno(PyExc_OSError); @@ -1045,13 +1492,17 @@ _Py_dup(int fd) /* Character files like console cannot be make non-inheritable */ if (ftype != FILE_TYPE_CHAR) { if (_Py_set_inheritable(fd, 0, NULL) < 0) { + _Py_BEGIN_SUPPRESS_IPH close(fd); + _Py_END_SUPPRESS_IPH return -1; } } #elif defined(HAVE_FCNTL_H) && defined(F_DUPFD_CLOEXEC) Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH fd = fcntl(fd, F_DUPFD_CLOEXEC, 0); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (fd < 0) { PyErr_SetFromErrno(PyExc_OSError); @@ -1060,7 +1511,9 @@ _Py_dup(int fd) #else Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH fd = dup(fd); + _Py_END_SUPPRESS_IPH Py_END_ALLOW_THREADS if (fd < 0) { PyErr_SetFromErrno(PyExc_OSError); @@ -1068,10 +1521,152 @@ _Py_dup(int fd) } if (_Py_set_inheritable(fd, 0, NULL) < 0) { + _Py_BEGIN_SUPPRESS_IPH close(fd); + _Py_END_SUPPRESS_IPH return -1; } #endif return fd; } +#ifndef MS_WINDOWS +/* Get the blocking mode of the file descriptor. + Return 0 if the O_NONBLOCK flag is set, 1 if the flag is cleared, + raise an exception and return -1 on error. */ +int +_Py_get_blocking(int fd) +{ + int flags; + _Py_BEGIN_SUPPRESS_IPH + flags = fcntl(fd, F_GETFL, 0); + _Py_END_SUPPRESS_IPH + if (flags < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + return !(flags & O_NONBLOCK); +} + +/* Set the blocking mode of the specified file descriptor. + + Set the O_NONBLOCK flag if blocking is False, clear the O_NONBLOCK flag + otherwise. + + Return 0 on success, raise an exception and return -1 on error. */ +int +_Py_set_blocking(int fd, int blocking) +{ +#if defined(HAVE_SYS_IOCTL_H) && defined(FIONBIO) + int arg = !blocking; + if (ioctl(fd, FIONBIO, &arg) < 0) + goto error; +#else + int flags, res; + + _Py_BEGIN_SUPPRESS_IPH + flags = fcntl(fd, F_GETFL, 0); + if (flags >= 0) { + if (blocking) + flags = flags & (~O_NONBLOCK); + else + flags = flags | O_NONBLOCK; + + res = fcntl(fd, F_SETFL, flags); + } else { + res = -1; + } + _Py_END_SUPPRESS_IPH + + if (res < 0) + goto error; +#endif + return 0; + +error: + PyErr_SetFromErrno(PyExc_OSError); + return -1; +} +#endif + +#if defined _MSC_VER && _MSC_VER >= 1400 && _MSC_VER < 1900 +/* Legacy implementation of _PyVerify_fd while transitioning to + * MSVC 14.0. This should eventually be removed. (issue23524) + */ + +/* Microsoft CRT in VS2005 and higher will verify that a filehandle is + * valid and raise an assertion if it isn't. + * Normally, an invalid fd is likely to be a C program error and therefore + * an assertion can be useful, but it does contradict the POSIX standard + * which for write(2) states: + * "Otherwise, -1 shall be returned and errno set to indicate the error." + * "[EBADF] The fildes argument is not a valid file descriptor open for + * writing." + * Furthermore, python allows the user to enter any old integer + * as a fd and should merely raise a python exception on error. + * The Microsoft CRT doesn't provide an official way to check for the + * validity of a file descriptor, but we can emulate its internal behaviour + * by using the exported __pinfo data member and knowledge of the + * internal structures involved. + * The structures below must be updated for each version of visual studio + * according to the file internal.h in the CRT source, until MS comes + * up with a less hacky way to do this. + * (all of this is to avoid globally modifying the CRT behaviour using + * _set_invalid_parameter_handler() and _CrtSetReportMode()) + */ +/* The actual size of the structure is determined at runtime. + * Only the first items must be present. + */ +typedef struct { + intptr_t osfhnd; + char osfile; +} my_ioinfo; + +extern __declspec(dllimport) char * __pioinfo[]; +#define IOINFO_L2E 5 +#define IOINFO_ARRAYS 64 +#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) +#define _NHANDLE_ (IOINFO_ARRAYS * IOINFO_ARRAY_ELTS) +#define FOPEN 0x01 +#define _NO_CONSOLE_FILENO (intptr_t)-2 + +/* This function emulates what the windows CRT does to validate file handles */ +int +_PyVerify_fd(int fd) +{ + const int i1 = fd >> IOINFO_L2E; + const int i2 = fd & ((1 << IOINFO_L2E) - 1); + + static size_t sizeof_ioinfo = 0; + + /* Determine the actual size of the ioinfo structure, + * as used by the CRT loaded in memory + */ + if (sizeof_ioinfo == 0 && __pioinfo[0] != NULL) { + sizeof_ioinfo = _msize(__pioinfo[0]) / IOINFO_ARRAY_ELTS; + } + if (sizeof_ioinfo == 0) { + /* This should not happen... */ + goto fail; + } + + /* See that it isn't a special CLEAR fileno */ + if (fd != _NO_CONSOLE_FILENO) { + /* Microsoft CRT would check that 0<=fd<_nhandle but we can't do that. Instead + * we check pointer validity and other info + */ + if (0 <= i1 && i1 < IOINFO_ARRAYS && __pioinfo[i1] != NULL) { + /* finally, check that the file is open */ + my_ioinfo* info = (my_ioinfo*)(__pioinfo[i1] + i2 * sizeof_ioinfo); + if (info->osfile & FOPEN) { + return 1; + } + } + } + fail: + errno = EBADF; + return 0; +} + +#endif /* defined _MSC_VER && _MSC_VER >= 1400 && _MSC_VER < 1900 */ diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index e3a8149..056bb76 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -846,6 +846,13 @@ format_long_internal(PyObject *value, const InternalFormatSpec *format, " format specifier 'c'"); goto done; } + /* error to request alternate format */ + if (format->alternate) { + PyErr_SetString(PyExc_ValueError, + "Alternate form (#) not allowed with integer" + " format specifier 'c'"); + goto done; + } /* taken from unicodeobject.c formatchar() */ /* Integer input truncated to a character */ diff --git a/Python/frozenmain.c b/Python/frozenmain.c index b05c94a..de8bd35 100644 --- a/Python/frozenmain.c +++ b/Python/frozenmain.c @@ -54,7 +54,7 @@ Py_FrozenMain(int argc, char **argv) setlocale(LC_ALL, ""); for (i = 0; i < argc; i++) { - argv_copy[i] = _Py_char2wchar(argv[i], NULL); + argv_copy[i] = Py_DecodeLocale(argv[i], NULL); argv_copy2[i] = argv_copy[i]; if (!argv_copy[i]) { fprintf(stderr, "Unable to decode the command line argument #%i\n", diff --git a/Python/getargs.c b/Python/getargs.c index 6902d13..c365fc2 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -872,10 +872,10 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, STORE_SIZE(count); format++; } else { - if (strlen(*p) != count) - return converterr( - "bytes without null bytes", - arg, msgbuf, bufsize); + if (strlen(*p) != (size_t)count) { + PyErr_SetString(PyExc_ValueError, "embedded null byte"); + RETURN_ERR_OCCURRED; + } } break; } @@ -948,16 +948,15 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, if (sarg == NULL) return converterr(CONV_UNICODE, arg, msgbuf, bufsize); + if (strlen(sarg) != (size_t)len) { + PyErr_SetString(PyExc_ValueError, "embedded null character"); + RETURN_ERR_OCCURRED; + } *p = sarg; } else return converterr(c == 'z' ? "str or None" : "str", arg, msgbuf, bufsize); - if (*p != NULL && sarg != NULL && (Py_ssize_t) strlen(*p) != len) - return converterr( - c == 'z' ? "str without null characters or None" - : "str without null characters", - arg, msgbuf, bufsize); } break; } @@ -995,10 +994,10 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, *p = PyUnicode_AsUnicodeAndSize(arg, &len); if (*p == NULL) RETURN_ERR_OCCURRED; - if (Py_UNICODE_strlen(*p) != len) - return converterr( - "str without null characters or None", - arg, msgbuf, bufsize); + if (Py_UNICODE_strlen(*p) != (size_t)len) { + PyErr_SetString(PyExc_ValueError, "embedded null character"); + RETURN_ERR_OCCURRED; + } } else return converterr(c == 'Z' ? "str or None" : "str", arg, msgbuf, bufsize); @@ -1246,7 +1245,8 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, supports it directly. */ if (PyObject_GetBuffer(arg, (Py_buffer*)p, PyBUF_WRITABLE) < 0) { PyErr_Clear(); - return converterr("read-write buffer", arg, msgbuf, bufsize); + return converterr("read-write bytes-like object", + arg, msgbuf, bufsize); } if (!PyBuffer_IsContiguous((Py_buffer*)p, 'C')) { PyBuffer_Release((Py_buffer*)p); @@ -1284,7 +1284,7 @@ convertbuffer(PyObject *arg, void **p, char **errmsg) *errmsg = NULL; *p = NULL; if (pb != NULL && pb->bf_releasebuffer != NULL) { - *errmsg = "read-only pinned buffer"; + *errmsg = "read-only bytes-like object"; return -1; } @@ -1300,7 +1300,7 @@ static int getbuffer(PyObject *arg, Py_buffer *view, char **errmsg) { if (PyObject_GetBuffer(arg, view, PyBUF_SIMPLE) != 0) { - *errmsg = "bytes or buffer"; + *errmsg = "bytes-like object"; return -1; } if (!PyBuffer_IsContiguous(view, 'C')) { diff --git a/Python/graminit.c b/Python/graminit.c index e04999b..9f79d59 100644 --- a/Python/graminit.c +++ b/Python/graminit.c @@ -476,7 +476,7 @@ static state states_16[3] = { {2, arcs_16_1}, {3, arcs_16_2}, }; -static arc arcs_17_0[12] = { +static arc arcs_17_0[13] = { {49, 1}, {50, 1}, {51, 1}, @@ -489,19 +489,20 @@ static arc arcs_17_0[12] = { {58, 1}, {59, 1}, {60, 1}, + {61, 1}, }; static arc arcs_17_1[1] = { {0, 1}, }; static state states_17[2] = { - {12, arcs_17_0}, + {13, arcs_17_0}, {1, arcs_17_1}, }; static arc arcs_18_0[1] = { - {61, 1}, + {62, 1}, }; static arc arcs_18_1[1] = { - {62, 2}, + {63, 2}, }; static arc arcs_18_2[1] = { {0, 2}, @@ -512,7 +513,7 @@ static state states_18[3] = { {1, arcs_18_2}, }; static arc arcs_19_0[1] = { - {63, 1}, + {64, 1}, }; static arc arcs_19_1[1] = { {0, 1}, @@ -522,11 +523,11 @@ static state states_19[2] = { {1, arcs_19_1}, }; static arc arcs_20_0[5] = { - {64, 1}, {65, 1}, {66, 1}, {67, 1}, {68, 1}, + {69, 1}, }; static arc arcs_20_1[1] = { {0, 1}, @@ -536,7 +537,7 @@ static state states_20[2] = { {1, arcs_20_1}, }; static arc arcs_21_0[1] = { - {69, 1}, + {70, 1}, }; static arc arcs_21_1[1] = { {0, 1}, @@ -546,7 +547,7 @@ static state states_21[2] = { {1, arcs_21_1}, }; static arc arcs_22_0[1] = { - {70, 1}, + {71, 1}, }; static arc arcs_22_1[1] = { {0, 1}, @@ -556,7 +557,7 @@ static state states_22[2] = { {1, arcs_22_1}, }; static arc arcs_23_0[1] = { - {71, 1}, + {72, 1}, }; static arc arcs_23_1[2] = { {9, 2}, @@ -581,14 +582,14 @@ static state states_24[2] = { {1, arcs_24_1}, }; static arc arcs_25_0[1] = { - {72, 1}, + {73, 1}, }; static arc arcs_25_1[2] = { {24, 2}, {0, 1}, }; static arc arcs_25_2[2] = { - {73, 3}, + {74, 3}, {0, 2}, }; static arc arcs_25_3[1] = { @@ -605,8 +606,8 @@ static state states_25[5] = { {1, arcs_25_4}, }; static arc arcs_26_0[2] = { - {74, 1}, {75, 1}, + {76, 1}, }; static arc arcs_26_1[1] = { {0, 1}, @@ -616,10 +617,10 @@ static state states_26[2] = { {1, arcs_26_1}, }; static arc arcs_27_0[1] = { - {76, 1}, + {77, 1}, }; static arc arcs_27_1[1] = { - {77, 2}, + {78, 2}, }; static arc arcs_27_2[1] = { {0, 2}, @@ -630,32 +631,32 @@ static state states_27[3] = { {1, arcs_27_2}, }; static arc arcs_28_0[1] = { - {73, 1}, + {74, 1}, }; static arc arcs_28_1[3] = { - {78, 2}, {79, 2}, + {80, 2}, {12, 3}, }; static arc arcs_28_2[4] = { - {78, 2}, {79, 2}, + {80, 2}, {12, 3}, - {76, 4}, + {77, 4}, }; static arc arcs_28_3[1] = { - {76, 4}, + {77, 4}, }; static arc arcs_28_4[3] = { {31, 5}, {13, 6}, - {80, 5}, + {81, 5}, }; static arc arcs_28_5[1] = { {0, 5}, }; static arc arcs_28_6[1] = { - {80, 7}, + {81, 7}, }; static arc arcs_28_7[1] = { {15, 5}, @@ -674,7 +675,7 @@ static arc arcs_29_0[1] = { {21, 1}, }; static arc arcs_29_1[2] = { - {82, 2}, + {83, 2}, {0, 1}, }; static arc arcs_29_2[1] = { @@ -693,7 +694,7 @@ static arc arcs_30_0[1] = { {12, 1}, }; static arc arcs_30_1[2] = { - {82, 2}, + {83, 2}, {0, 1}, }; static arc arcs_30_2[1] = { @@ -709,14 +710,14 @@ static state states_30[4] = { {1, arcs_30_3}, }; static arc arcs_31_0[1] = { - {81, 1}, + {82, 1}, }; static arc arcs_31_1[2] = { {30, 2}, {0, 1}, }; static arc arcs_31_2[2] = { - {81, 1}, + {82, 1}, {0, 2}, }; static state states_31[3] = { @@ -725,7 +726,7 @@ static state states_31[3] = { {2, arcs_31_2}, }; static arc arcs_32_0[1] = { - {83, 1}, + {84, 1}, }; static arc arcs_32_1[2] = { {30, 0}, @@ -739,7 +740,7 @@ static arc arcs_33_0[1] = { {21, 1}, }; static arc arcs_33_1[2] = { - {78, 0}, + {79, 0}, {0, 1}, }; static state states_33[2] = { @@ -747,7 +748,7 @@ static state states_33[2] = { {2, arcs_33_1}, }; static arc arcs_34_0[1] = { - {84, 1}, + {85, 1}, }; static arc arcs_34_1[1] = { {21, 2}, @@ -762,7 +763,7 @@ static state states_34[3] = { {2, arcs_34_2}, }; static arc arcs_35_0[1] = { - {85, 1}, + {86, 1}, }; static arc arcs_35_1[1] = { {21, 2}, @@ -777,7 +778,7 @@ static state states_35[3] = { {2, arcs_35_2}, }; static arc arcs_36_0[1] = { - {86, 1}, + {87, 1}, }; static arc arcs_36_1[1] = { {24, 2}, @@ -800,11 +801,11 @@ static state states_36[5] = { {1, arcs_36_4}, }; static arc arcs_37_0[8] = { - {87, 1}, {88, 1}, {89, 1}, {90, 1}, {91, 1}, + {92, 1}, {19, 1}, {18, 1}, {17, 1}, @@ -817,7 +818,7 @@ static state states_37[2] = { {1, arcs_37_1}, }; static arc arcs_38_0[1] = { - {92, 1}, + {93, 1}, }; static arc arcs_38_1[1] = { {24, 2}, @@ -829,8 +830,8 @@ static arc arcs_38_3[1] = { {26, 4}, }; static arc arcs_38_4[3] = { - {93, 1}, - {94, 5}, + {94, 1}, + {95, 5}, {0, 4}, }; static arc arcs_38_5[1] = { @@ -853,7 +854,7 @@ static state states_38[8] = { {1, arcs_38_7}, }; static arc arcs_39_0[1] = { - {95, 1}, + {96, 1}, }; static arc arcs_39_1[1] = { {24, 2}, @@ -865,7 +866,7 @@ static arc arcs_39_3[1] = { {26, 4}, }; static arc arcs_39_4[2] = { - {94, 5}, + {95, 5}, {0, 4}, }; static arc arcs_39_5[1] = { @@ -888,13 +889,13 @@ static state states_39[8] = { {1, arcs_39_7}, }; static arc arcs_40_0[1] = { - {96, 1}, + {97, 1}, }; static arc arcs_40_1[1] = { - {62, 2}, + {63, 2}, }; static arc arcs_40_2[1] = { - {97, 3}, + {98, 3}, }; static arc arcs_40_3[1] = { {9, 4}, @@ -906,7 +907,7 @@ static arc arcs_40_5[1] = { {26, 6}, }; static arc arcs_40_6[2] = { - {94, 7}, + {95, 7}, {0, 6}, }; static arc arcs_40_7[1] = { @@ -931,7 +932,7 @@ static state states_40[10] = { {1, arcs_40_9}, }; static arc arcs_41_0[1] = { - {98, 1}, + {99, 1}, }; static arc arcs_41_1[1] = { {25, 2}, @@ -940,8 +941,8 @@ static arc arcs_41_2[1] = { {26, 3}, }; static arc arcs_41_3[2] = { - {99, 4}, - {100, 5}, + {100, 4}, + {101, 5}, }; static arc arcs_41_4[1] = { {25, 6}, @@ -956,9 +957,9 @@ static arc arcs_41_7[1] = { {26, 9}, }; static arc arcs_41_8[4] = { - {99, 4}, - {94, 10}, - {100, 5}, + {100, 4}, + {95, 10}, + {101, 5}, {0, 8}, }; static arc arcs_41_9[1] = { @@ -971,7 +972,7 @@ static arc arcs_41_11[1] = { {26, 12}, }; static arc arcs_41_12[2] = { - {100, 5}, + {101, 5}, {0, 12}, }; static state states_41[13] = { @@ -990,10 +991,10 @@ static state states_41[13] = { {2, arcs_41_12}, }; static arc arcs_42_0[1] = { - {101, 1}, + {102, 1}, }; static arc arcs_42_1[1] = { - {102, 2}, + {103, 2}, }; static arc arcs_42_2[2] = { {30, 1}, @@ -1016,11 +1017,11 @@ static arc arcs_43_0[1] = { {24, 1}, }; static arc arcs_43_1[2] = { - {82, 2}, + {83, 2}, {0, 1}, }; static arc arcs_43_2[1] = { - {103, 3}, + {104, 3}, }; static arc arcs_43_3[1] = { {0, 3}, @@ -1032,14 +1033,14 @@ static state states_43[4] = { {1, arcs_43_3}, }; static arc arcs_44_0[1] = { - {104, 1}, + {105, 1}, }; static arc arcs_44_1[2] = { {24, 2}, {0, 1}, }; static arc arcs_44_2[2] = { - {82, 3}, + {83, 3}, {0, 2}, }; static arc arcs_44_3[1] = { @@ -1063,14 +1064,14 @@ static arc arcs_45_1[1] = { {0, 1}, }; static arc arcs_45_2[1] = { - {105, 3}, + {106, 3}, }; static arc arcs_45_3[1] = { {6, 4}, }; static arc arcs_45_4[2] = { {6, 4}, - {106, 1}, + {107, 1}, }; static state states_45[5] = { {2, arcs_45_0}, @@ -1080,21 +1081,21 @@ static state states_45[5] = { {2, arcs_45_4}, }; static arc arcs_46_0[2] = { - {107, 1}, - {108, 2}, + {108, 1}, + {109, 2}, }; static arc arcs_46_1[2] = { - {92, 3}, + {93, 3}, {0, 1}, }; static arc arcs_46_2[1] = { {0, 2}, }; static arc arcs_46_3[1] = { - {107, 4}, + {108, 4}, }; static arc arcs_46_4[1] = { - {94, 5}, + {95, 5}, }; static arc arcs_46_5[1] = { {24, 2}, @@ -1108,8 +1109,8 @@ static state states_46[6] = { {1, arcs_46_5}, }; static arc arcs_47_0[2] = { - {107, 1}, - {110, 1}, + {108, 1}, + {111, 1}, }; static arc arcs_47_1[1] = { {0, 1}, @@ -1119,7 +1120,7 @@ static state states_47[2] = { {1, arcs_47_1}, }; static arc arcs_48_0[1] = { - {111, 1}, + {112, 1}, }; static arc arcs_48_1[2] = { {33, 2}, @@ -1142,7 +1143,7 @@ static state states_48[5] = { {1, arcs_48_4}, }; static arc arcs_49_0[1] = { - {111, 1}, + {112, 1}, }; static arc arcs_49_1[2] = { {33, 2}, @@ -1152,7 +1153,7 @@ static arc arcs_49_2[1] = { {25, 3}, }; static arc arcs_49_3[1] = { - {109, 4}, + {110, 4}, }; static arc arcs_49_4[1] = { {0, 4}, @@ -1165,10 +1166,10 @@ static state states_49[5] = { {1, arcs_49_4}, }; static arc arcs_50_0[1] = { - {112, 1}, + {113, 1}, }; static arc arcs_50_1[2] = { - {113, 0}, + {114, 0}, {0, 1}, }; static state states_50[2] = { @@ -1176,10 +1177,10 @@ static state states_50[2] = { {2, arcs_50_1}, }; static arc arcs_51_0[1] = { - {114, 1}, + {115, 1}, }; static arc arcs_51_1[2] = { - {115, 0}, + {116, 0}, {0, 1}, }; static state states_51[2] = { @@ -1187,11 +1188,11 @@ static state states_51[2] = { {2, arcs_51_1}, }; static arc arcs_52_0[2] = { - {116, 1}, - {117, 2}, + {117, 1}, + {118, 2}, }; static arc arcs_52_1[1] = { - {114, 2}, + {115, 2}, }; static arc arcs_52_2[1] = { {0, 2}, @@ -1202,10 +1203,10 @@ static state states_52[3] = { {1, arcs_52_2}, }; static arc arcs_53_0[1] = { - {103, 1}, + {104, 1}, }; static arc arcs_53_1[2] = { - {118, 0}, + {119, 0}, {0, 1}, }; static state states_53[2] = { @@ -1213,25 +1214,25 @@ static state states_53[2] = { {2, arcs_53_1}, }; static arc arcs_54_0[10] = { - {119, 1}, {120, 1}, {121, 1}, {122, 1}, {123, 1}, {124, 1}, {125, 1}, - {97, 1}, - {116, 2}, - {126, 3}, + {126, 1}, + {98, 1}, + {117, 2}, + {127, 3}, }; static arc arcs_54_1[1] = { {0, 1}, }; static arc arcs_54_2[1] = { - {97, 1}, + {98, 1}, }; static arc arcs_54_3[2] = { - {116, 1}, + {117, 1}, {0, 3}, }; static state states_54[4] = { @@ -1244,7 +1245,7 @@ static arc arcs_55_0[1] = { {31, 1}, }; static arc arcs_55_1[1] = { - {103, 2}, + {104, 2}, }; static arc arcs_55_2[1] = { {0, 2}, @@ -1255,10 +1256,10 @@ static state states_55[3] = { {1, arcs_55_2}, }; static arc arcs_56_0[1] = { - {127, 1}, + {128, 1}, }; static arc arcs_56_1[2] = { - {128, 0}, + {129, 0}, {0, 1}, }; static state states_56[2] = { @@ -1266,10 +1267,10 @@ static state states_56[2] = { {2, arcs_56_1}, }; static arc arcs_57_0[1] = { - {129, 1}, + {130, 1}, }; static arc arcs_57_1[2] = { - {130, 0}, + {131, 0}, {0, 1}, }; static state states_57[2] = { @@ -1277,10 +1278,10 @@ static state states_57[2] = { {2, arcs_57_1}, }; static arc arcs_58_0[1] = { - {131, 1}, + {132, 1}, }; static arc arcs_58_1[2] = { - {132, 0}, + {133, 0}, {0, 1}, }; static state states_58[2] = { @@ -1288,11 +1289,11 @@ static state states_58[2] = { {2, arcs_58_1}, }; static arc arcs_59_0[1] = { - {133, 1}, + {134, 1}, }; static arc arcs_59_1[3] = { - {134, 0}, {135, 0}, + {136, 0}, {0, 1}, }; static state states_59[2] = { @@ -1300,11 +1301,11 @@ static state states_59[2] = { {3, arcs_59_1}, }; static arc arcs_60_0[1] = { - {136, 1}, + {137, 1}, }; static arc arcs_60_1[3] = { - {137, 0}, {138, 0}, + {139, 0}, {0, 1}, }; static state states_60[2] = { @@ -1312,27 +1313,28 @@ static state states_60[2] = { {3, arcs_60_1}, }; static arc arcs_61_0[1] = { - {139, 1}, + {140, 1}, }; -static arc arcs_61_1[5] = { +static arc arcs_61_1[6] = { {31, 0}, - {140, 0}, + {11, 0}, {141, 0}, {142, 0}, + {143, 0}, {0, 1}, }; static state states_61[2] = { {1, arcs_61_0}, - {5, arcs_61_1}, + {6, arcs_61_1}, }; static arc arcs_62_0[4] = { - {137, 1}, {138, 1}, - {143, 1}, - {144, 2}, + {139, 1}, + {144, 1}, + {145, 2}, }; static arc arcs_62_1[1] = { - {139, 2}, + {140, 2}, }; static arc arcs_62_2[1] = { {0, 2}, @@ -1343,15 +1345,15 @@ static state states_62[3] = { {1, arcs_62_2}, }; static arc arcs_63_0[1] = { - {145, 1}, + {146, 1}, }; static arc arcs_63_1[3] = { - {146, 1}, + {147, 1}, {32, 2}, {0, 1}, }; static arc arcs_63_2[1] = { - {139, 3}, + {140, 3}, }; static arc arcs_63_3[1] = { {0, 3}, @@ -1364,44 +1366,44 @@ static state states_63[4] = { }; static arc arcs_64_0[10] = { {13, 1}, - {148, 2}, - {150, 3}, + {149, 2}, + {151, 3}, {21, 4}, - {153, 4}, - {154, 5}, - {79, 4}, - {155, 4}, + {154, 4}, + {155, 5}, + {80, 4}, {156, 4}, {157, 4}, + {158, 4}, }; static arc arcs_64_1[3] = { {47, 6}, - {147, 6}, + {148, 6}, {15, 4}, }; static arc arcs_64_2[2] = { - {147, 7}, - {149, 4}, + {148, 7}, + {150, 4}, }; static arc arcs_64_3[2] = { - {151, 8}, - {152, 4}, + {152, 8}, + {153, 4}, }; static arc arcs_64_4[1] = { {0, 4}, }; static arc arcs_64_5[2] = { - {154, 5}, + {155, 5}, {0, 5}, }; static arc arcs_64_6[1] = { {15, 4}, }; static arc arcs_64_7[1] = { - {149, 4}, + {150, 4}, }; static arc arcs_64_8[1] = { - {152, 4}, + {153, 4}, }; static state states_64[9] = { {10, arcs_64_0}, @@ -1419,7 +1421,7 @@ static arc arcs_65_0[2] = { {48, 1}, }; static arc arcs_65_1[3] = { - {158, 2}, + {159, 2}, {30, 3}, {0, 1}, }; @@ -1444,15 +1446,15 @@ static state states_65[5] = { }; static arc arcs_66_0[3] = { {13, 1}, - {148, 2}, - {78, 3}, + {149, 2}, + {79, 3}, }; static arc arcs_66_1[2] = { {14, 4}, {15, 5}, }; static arc arcs_66_2[1] = { - {159, 6}, + {160, 6}, }; static arc arcs_66_3[1] = { {21, 5}, @@ -1464,7 +1466,7 @@ static arc arcs_66_5[1] = { {0, 5}, }; static arc arcs_66_6[1] = { - {149, 5}, + {150, 5}, }; static state states_66[7] = { {3, arcs_66_0}, @@ -1476,14 +1478,14 @@ static state states_66[7] = { {1, arcs_66_6}, }; static arc arcs_67_0[1] = { - {160, 1}, + {161, 1}, }; static arc arcs_67_1[2] = { {30, 2}, {0, 1}, }; static arc arcs_67_2[2] = { - {160, 1}, + {161, 1}, {0, 2}, }; static state states_67[3] = { @@ -1501,11 +1503,11 @@ static arc arcs_68_1[2] = { }; static arc arcs_68_2[3] = { {24, 3}, - {161, 4}, + {162, 4}, {0, 2}, }; static arc arcs_68_3[2] = { - {161, 4}, + {162, 4}, {0, 3}, }; static arc arcs_68_4[1] = { @@ -1534,7 +1536,7 @@ static state states_69[3] = { {1, arcs_69_2}, }; static arc arcs_70_0[2] = { - {103, 1}, + {104, 1}, {48, 1}, }; static arc arcs_70_1[2] = { @@ -1542,7 +1544,7 @@ static arc arcs_70_1[2] = { {0, 1}, }; static arc arcs_70_2[3] = { - {103, 1}, + {104, 1}, {48, 1}, {0, 2}, }; @@ -1572,7 +1574,7 @@ static arc arcs_72_0[1] = { }; static arc arcs_72_1[4] = { {25, 2}, - {158, 3}, + {159, 3}, {30, 4}, {0, 1}, }; @@ -1587,7 +1589,7 @@ static arc arcs_72_4[2] = { {0, 4}, }; static arc arcs_72_5[3] = { - {158, 3}, + {159, 3}, {30, 7}, {0, 5}, }; @@ -1623,7 +1625,7 @@ static state states_72[11] = { {2, arcs_72_10}, }; static arc arcs_73_0[1] = { - {162, 1}, + {163, 1}, }; static arc arcs_73_1[1] = { {21, 2}, @@ -1659,7 +1661,7 @@ static state states_73[8] = { {1, arcs_73_7}, }; static arc arcs_74_0[3] = { - {163, 1}, + {164, 1}, {31, 2}, {32, 3}, }; @@ -1674,7 +1676,7 @@ static arc arcs_74_3[1] = { {24, 6}, }; static arc arcs_74_4[4] = { - {163, 1}, + {164, 1}, {31, 2}, {32, 3}, {0, 4}, @@ -1687,7 +1689,7 @@ static arc arcs_74_6[1] = { {0, 6}, }; static arc arcs_74_7[2] = { - {163, 5}, + {164, 5}, {32, 3}, }; static state states_74[8] = { @@ -1704,7 +1706,7 @@ static arc arcs_75_0[1] = { {24, 1}, }; static arc arcs_75_1[3] = { - {158, 2}, + {159, 2}, {29, 3}, {0, 1}, }; @@ -1721,8 +1723,8 @@ static state states_75[4] = { {1, arcs_75_3}, }; static arc arcs_76_0[2] = { - {158, 1}, - {165, 1}, + {159, 1}, + {166, 1}, }; static arc arcs_76_1[1] = { {0, 1}, @@ -1732,19 +1734,19 @@ static state states_76[2] = { {1, arcs_76_1}, }; static arc arcs_77_0[1] = { - {96, 1}, + {97, 1}, }; static arc arcs_77_1[1] = { - {62, 2}, + {63, 2}, }; static arc arcs_77_2[1] = { - {97, 3}, + {98, 3}, }; static arc arcs_77_3[1] = { - {107, 4}, + {108, 4}, }; static arc arcs_77_4[2] = { - {164, 5}, + {165, 5}, {0, 4}, }; static arc arcs_77_5[1] = { @@ -1759,13 +1761,13 @@ static state states_77[6] = { {1, arcs_77_5}, }; static arc arcs_78_0[1] = { - {92, 1}, + {93, 1}, }; static arc arcs_78_1[1] = { - {109, 2}, + {110, 2}, }; static arc arcs_78_2[2] = { - {164, 3}, + {165, 3}, {0, 2}, }; static arc arcs_78_3[1] = { @@ -1788,10 +1790,10 @@ static state states_79[2] = { {1, arcs_79_1}, }; static arc arcs_80_0[1] = { - {167, 1}, + {168, 1}, }; static arc arcs_80_1[2] = { - {168, 2}, + {169, 2}, {0, 1}, }; static arc arcs_80_2[1] = { @@ -1803,7 +1805,7 @@ static state states_80[3] = { {1, arcs_80_2}, }; static arc arcs_81_0[2] = { - {73, 1}, + {74, 1}, {9, 2}, }; static arc arcs_81_1[1] = { @@ -1819,11 +1821,11 @@ static state states_81[3] = { }; static dfa dfas[82] = { {256, "single_input", 0, 3, states_0, - "\004\050\060\200\000\000\000\240\340\223\160\220\045\200\020\000\000\206\120\076\204\000"}, + "\004\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"}, {257, "file_input", 0, 2, states_1, - "\204\050\060\200\000\000\000\240\340\223\160\220\045\200\020\000\000\206\120\076\204\000"}, + "\204\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"}, {258, "eval_input", 0, 3, states_2, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {259, "decorator", 0, 7, states_3, "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {260, "decorators", 0, 2, states_4, @@ -1843,39 +1845,39 @@ static dfa dfas[82] = { {267, "vfpdef", 0, 2, states_11, "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {268, "stmt", 0, 2, states_12, - "\000\050\060\200\000\000\000\240\340\223\160\220\045\200\020\000\000\206\120\076\204\000"}, + "\000\050\060\200\000\000\000\100\301\047\341\040\113\000\041\000\000\014\241\174\010\001"}, {269, "simple_stmt", 0, 4, states_13, - "\000\040\040\200\000\000\000\240\340\223\160\000\000\200\020\000\000\206\120\076\200\000"}, + "\000\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"}, {270, "small_stmt", 0, 2, states_14, - "\000\040\040\200\000\000\000\240\340\223\160\000\000\200\020\000\000\206\120\076\200\000"}, + "\000\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"}, {271, "expr_stmt", 0, 6, states_15, - "\000\040\040\200\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {272, "testlist_star_expr", 0, 3, states_16, - "\000\040\040\200\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {273, "augassign", 0, 2, states_17, - "\000\000\000\000\000\000\376\037\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\376\077\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {274, "del_stmt", 0, 3, states_18, - "\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {275, "pass_stmt", 0, 2, states_19, - "\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {276, "flow_stmt", 0, 2, states_20, - "\000\000\000\000\000\000\000\000\340\001\000\000\000\000\000\000\000\000\000\000\200\000"}, + "\000\000\000\000\000\000\000\000\300\003\000\000\000\000\000\000\000\000\000\000\000\001"}, {277, "break_stmt", 0, 2, states_21, - "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {278, "continue_stmt", 0, 2, states_22, "\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {279, "return_stmt", 0, 3, states_23, + {278, "continue_stmt", 0, 2, states_22, "\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + {279, "return_stmt", 0, 3, states_23, + "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"}, {280, "yield_stmt", 0, 2, states_24, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"}, {281, "raise_stmt", 0, 5, states_25, - "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"}, {282, "import_stmt", 0, 2, states_26, - "\000\000\000\000\000\000\000\000\000\022\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\044\000\000\000\000\000\000\000\000\000\000\000\000"}, {283, "import_name", 0, 3, states_27, - "\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"}, {284, "import_from", 0, 8, states_28, - "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"}, {285, "import_as_name", 0, 4, states_29, "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {286, "dotted_as_name", 0, 4, states_30, @@ -1887,103 +1889,103 @@ static dfa dfas[82] = { {289, "dotted_name", 0, 2, states_33, "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {290, "global_stmt", 0, 3, states_34, - "\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000"}, - {291, "nonlocal_stmt", 0, 3, states_35, "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000"}, - {292, "assert_stmt", 0, 5, states_36, + {291, "nonlocal_stmt", 0, 3, states_35, "\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"}, + {292, "assert_stmt", 0, 5, states_36, + "\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000"}, {293, "compound_stmt", 0, 2, states_37, - "\000\010\020\000\000\000\000\000\000\000\000\220\045\000\000\000\000\000\000\000\004\000"}, + "\000\010\020\000\000\000\000\000\000\000\000\040\113\000\000\000\000\000\000\000\010\000"}, {294, "if_stmt", 0, 8, states_38, - "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"}, {295, "while_stmt", 0, 8, states_39, - "\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"}, - {296, "for_stmt", 0, 10, states_40, "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"}, + {296, "for_stmt", 0, 10, states_40, + "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"}, {297, "try_stmt", 0, 13, states_41, - "\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"}, {298, "with_stmt", 0, 5, states_42, - "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"}, {299, "with_item", 0, 4, states_43, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {300, "except_clause", 0, 5, states_44, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"}, {301, "suite", 0, 5, states_45, - "\004\040\040\200\000\000\000\240\340\223\160\000\000\200\020\000\000\206\120\076\200\000"}, + "\004\040\040\200\000\000\000\100\301\047\341\000\000\000\041\000\000\014\241\174\000\001"}, {302, "test", 0, 6, states_46, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {303, "test_nocond", 0, 2, states_47, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {304, "lambdef", 0, 5, states_48, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"}, {305, "lambdef_nocond", 0, 5, states_49, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"}, {306, "or_test", 0, 2, states_50, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"}, {307, "and_test", 0, 2, states_51, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"}, {308, "not_test", 0, 3, states_52, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\040\000\000\014\241\174\000\000"}, {309, "comparison", 0, 2, states_53, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {310, "comp_op", 0, 4, states_54, - "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\220\177\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\004\000\040\377\000\000\000\000\000\000"}, {311, "star_expr", 0, 3, states_55, "\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {312, "expr", 0, 2, states_56, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {313, "xor_expr", 0, 2, states_57, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {314, "and_expr", 0, 2, states_58, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {315, "shift_expr", 0, 2, states_59, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {316, "arith_expr", 0, 2, states_60, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {317, "term", 0, 2, states_61, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {318, "factor", 0, 3, states_62, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {319, "power", 0, 4, states_63, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\240\174\000\000"}, {320, "atom", 0, 9, states_64, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\240\174\000\000"}, {321, "testlist_comp", 0, 5, states_65, - "\000\040\040\200\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {322, "trailer", 0, 7, states_66, - "\000\040\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\020\000\000\000"}, + "\000\040\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\040\000\000\000"}, {323, "subscriptlist", 0, 3, states_67, - "\000\040\040\002\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\002\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {324, "subscript", 0, 5, states_68, - "\000\040\040\002\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\002\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {325, "sliceop", 0, 3, states_69, "\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {326, "exprlist", 0, 3, states_70, - "\000\040\040\200\000\000\000\000\000\200\000\000\000\000\000\000\000\206\120\076\000\000"}, + "\000\040\040\200\000\000\000\000\000\000\001\000\000\000\000\000\000\014\241\174\000\000"}, {327, "testlist", 0, 3, states_71, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {328, "dictorsetmaker", 0, 11, states_72, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {329, "classdef", 0, 8, states_73, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000"}, {330, "arglist", 0, 8, states_74, - "\000\040\040\200\001\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\200\001\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {331, "argument", 0, 4, states_75, - "\000\040\040\000\000\000\000\000\000\200\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\000\001\000\000\000\041\000\000\014\241\174\000\000"}, {332, "comp_iter", 0, 2, states_76, - "\000\000\000\000\000\000\000\000\000\000\000\020\001\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\040\002\000\000\000\000\000\000\000\000\000"}, {333, "comp_for", 0, 6, states_77, - "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"}, {334, "comp_if", 0, 4, states_78, - "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"}, {335, "encoding_decl", 0, 2, states_79, "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {336, "yield_expr", 0, 3, states_80, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000"}, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"}, {337, "yield_arg", 0, 3, states_81, - "\000\040\040\000\000\000\000\000\000\202\000\000\000\200\020\000\000\206\120\076\000\000"}, + "\000\040\040\000\000\000\000\000\000\004\001\000\000\000\041\000\000\014\241\174\000\000"}, }; -static label labels[169] = { +static label labels[170] = { {0, "EMPTY"}, {256, 0}, {4, 0}, @@ -2007,7 +2009,7 @@ static label labels[169] = { {1, "def"}, {1, 0}, {263, 0}, - {50, 0}, + {51, 0}, {302, 0}, {11, 0}, {301, 0}, @@ -2036,6 +2038,7 @@ static label labels[169] = { {36, 0}, {37, 0}, {38, 0}, + {50, 0}, {39, 0}, {40, 0}, {41, 0}, @@ -2063,7 +2066,7 @@ static label labels[169] = { {1, "import"}, {288, 0}, {23, 0}, - {51, 0}, + {52, 0}, {287, 0}, {285, 0}, {1, "as"}, @@ -2157,6 +2160,6 @@ static label labels[169] = { grammar _PyParser_Grammar = { 82, dfas, - {169, labels}, + {170, labels}, 256 }; diff --git a/Python/import.c b/Python/import.c index 7ee7ed9..46c6b53 100644 --- a/Python/import.c +++ b/Python/import.c @@ -36,6 +36,8 @@ module _imp [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=9c332475d8686284]*/ +#include "clinic/import.c.h" + /*[python input] class fs_unicode_converter(CConverter): type = 'PyObject *' @@ -235,29 +237,9 @@ Return True if the import lock is currently held, else False. On platforms without threads, return False. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_lock_held__doc__, -"lock_held($module, /)\n" -"--\n" -"\n" -"Return True if the import lock is currently held, else False.\n" -"\n" -"On platforms without threads, return False."); - -#define _IMP_LOCK_HELD_METHODDEF \ - {"lock_held", (PyCFunction)_imp_lock_held, METH_NOARGS, _imp_lock_held__doc__}, - -static PyObject * -_imp_lock_held_impl(PyModuleDef *module); - -static PyObject * -_imp_lock_held(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return _imp_lock_held_impl(module); -} - static PyObject * _imp_lock_held_impl(PyModuleDef *module) -/*[clinic end generated code: output=dae65674966baa65 input=9b088f9b217d9bdf]*/ +/*[clinic end generated code: output=d7a8cc3a5169081a input=9b088f9b217d9bdf]*/ { #ifdef WITH_THREAD return PyBool_FromLong(import_lock_thread != -1); @@ -275,30 +257,9 @@ This lock should be used by import hooks to ensure thread-safety when importing modules. On platforms without threads, this function does nothing. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_acquire_lock__doc__, -"acquire_lock($module, /)\n" -"--\n" -"\n" -"Acquires the interpreter\'s import lock for the current thread.\n" -"\n" -"This lock should be used by import hooks to ensure thread-safety when importing\n" -"modules. On platforms without threads, this function does nothing."); - -#define _IMP_ACQUIRE_LOCK_METHODDEF \ - {"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__}, - -static PyObject * -_imp_acquire_lock_impl(PyModuleDef *module); - -static PyObject * -_imp_acquire_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return _imp_acquire_lock_impl(module); -} - static PyObject * _imp_acquire_lock_impl(PyModuleDef *module) -/*[clinic end generated code: output=478f1fa089fdb9a4 input=4a2d4381866d5fdc]*/ +/*[clinic end generated code: output=cc143b1d16422cae input=4a2d4381866d5fdc]*/ { #ifdef WITH_THREAD _PyImport_AcquireLock(); @@ -315,29 +276,9 @@ Release the interpreter's import lock. On platforms without threads, this function does nothing. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_release_lock__doc__, -"release_lock($module, /)\n" -"--\n" -"\n" -"Release the interpreter\'s import lock.\n" -"\n" -"On platforms without threads, this function does nothing."); - -#define _IMP_RELEASE_LOCK_METHODDEF \ - {"release_lock", (PyCFunction)_imp_release_lock, METH_NOARGS, _imp_release_lock__doc__}, - -static PyObject * -_imp_release_lock_impl(PyModuleDef *module); - -static PyObject * -_imp_release_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return _imp_release_lock_impl(module); -} - static PyObject * _imp_release_lock_impl(PyModuleDef *module) -/*[clinic end generated code: output=36c77a6832fdafd4 input=934fb11516dd778b]*/ +/*[clinic end generated code: output=74d28e38ebe2b224 input=934fb11516dd778b]*/ { #ifdef WITH_THREAD if (_PyImport_ReleaseLock() < 0) { @@ -962,43 +903,10 @@ _imp._fix_co_filename Changes code.co_filename to specify the passed-in file path. [clinic start generated code]*/ -PyDoc_STRVAR(_imp__fix_co_filename__doc__, -"_fix_co_filename($module, code, path, /)\n" -"--\n" -"\n" -"Changes code.co_filename to specify the passed-in file path.\n" -"\n" -" code\n" -" Code object to change.\n" -" path\n" -" File path to use."); - -#define _IMP__FIX_CO_FILENAME_METHODDEF \ - {"_fix_co_filename", (PyCFunction)_imp__fix_co_filename, METH_VARARGS, _imp__fix_co_filename__doc__}, - -static PyObject * -_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, PyObject *path); - static PyObject * -_imp__fix_co_filename(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyCodeObject *code; - PyObject *path; - - if (!PyArg_ParseTuple(args, - "O!U:_fix_co_filename", - &PyCode_Type, &code, &path)) - goto exit; - return_value = _imp__fix_co_filename_impl(module, code, path); - -exit: - return return_value; -} - -static PyObject * -_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, PyObject *path) -/*[clinic end generated code: output=6b4b1edeb0d55c5d input=895ba50e78b82f05]*/ +_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, + PyObject *path) +/*[clinic end generated code: output=f4db56aac0a1327f input=895ba50e78b82f05]*/ { update_compiled_module(code, path); @@ -1860,27 +1768,9 @@ _imp.extension_suffixes Returns the list of file suffixes used to identify extension modules. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_extension_suffixes__doc__, -"extension_suffixes($module, /)\n" -"--\n" -"\n" -"Returns the list of file suffixes used to identify extension modules."); - -#define _IMP_EXTENSION_SUFFIXES_METHODDEF \ - {"extension_suffixes", (PyCFunction)_imp_extension_suffixes, METH_NOARGS, _imp_extension_suffixes__doc__}, - -static PyObject * -_imp_extension_suffixes_impl(PyModuleDef *module); - -static PyObject * -_imp_extension_suffixes(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) -{ - return _imp_extension_suffixes_impl(module); -} - static PyObject * _imp_extension_suffixes_impl(PyModuleDef *module) -/*[clinic end generated code: output=bb30a2438167798c input=ecdeeecfcb6f839e]*/ +/*[clinic end generated code: output=d44c1566ef362229 input=ecdeeecfcb6f839e]*/ { PyObject *list; const char *suffix; @@ -1917,37 +1807,9 @@ _imp.init_builtin Initializes a built-in module. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_init_builtin__doc__, -"init_builtin($module, name, /)\n" -"--\n" -"\n" -"Initializes a built-in module."); - -#define _IMP_INIT_BUILTIN_METHODDEF \ - {"init_builtin", (PyCFunction)_imp_init_builtin, METH_VARARGS, _imp_init_builtin__doc__}, - -static PyObject * -_imp_init_builtin_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -_imp_init_builtin(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name; - - if (!PyArg_ParseTuple(args, - "U:init_builtin", - &name)) - goto exit; - return_value = _imp_init_builtin_impl(module, name); - -exit: - return return_value; -} - static PyObject * _imp_init_builtin_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=a0244948a43f8e26 input=f934d2231ec52a2e]*/ +/*[clinic end generated code: output=1868f473685f6d67 input=f934d2231ec52a2e]*/ { int ret; PyObject *m; @@ -1973,37 +1835,9 @@ _imp.init_frozen Initializes a frozen module. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_init_frozen__doc__, -"init_frozen($module, name, /)\n" -"--\n" -"\n" -"Initializes a frozen module."); - -#define _IMP_INIT_FROZEN_METHODDEF \ - {"init_frozen", (PyCFunction)_imp_init_frozen, METH_VARARGS, _imp_init_frozen__doc__}, - -static PyObject * -_imp_init_frozen_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -_imp_init_frozen(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name; - - if (!PyArg_ParseTuple(args, - "U:init_frozen", - &name)) - goto exit; - return_value = _imp_init_frozen_impl(module, name); - -exit: - return return_value; -} - static PyObject * _imp_init_frozen_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=e4bc2bff296f8f22 input=13019adfc04f3fb3]*/ +/*[clinic end generated code: output=a9de493bdd711878 input=13019adfc04f3fb3]*/ { int ret; PyObject *m; @@ -2029,37 +1863,9 @@ _imp.get_frozen_object Create a code object for a frozen module. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_get_frozen_object__doc__, -"get_frozen_object($module, name, /)\n" -"--\n" -"\n" -"Create a code object for a frozen module."); - -#define _IMP_GET_FROZEN_OBJECT_METHODDEF \ - {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_VARARGS, _imp_get_frozen_object__doc__}, - -static PyObject * -_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -_imp_get_frozen_object(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name; - - if (!PyArg_ParseTuple(args, - "U:get_frozen_object", - &name)) - goto exit; - return_value = _imp_get_frozen_object_impl(module, name); - -exit: - return return_value; -} - static PyObject * _imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=4089ec702a9d70c5 input=ed689bc05358fdbd]*/ +/*[clinic end generated code: output=3114c970a47f2e3c input=ed689bc05358fdbd]*/ { return get_frozen_object(name); } @@ -2073,37 +1879,9 @@ _imp.is_frozen_package Returns True if the module name is of a frozen package. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_is_frozen_package__doc__, -"is_frozen_package($module, name, /)\n" -"--\n" -"\n" -"Returns True if the module name is of a frozen package."); - -#define _IMP_IS_FROZEN_PACKAGE_METHODDEF \ - {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_VARARGS, _imp_is_frozen_package__doc__}, - -static PyObject * -_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -_imp_is_frozen_package(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name; - - if (!PyArg_ParseTuple(args, - "U:is_frozen_package", - &name)) - goto exit; - return_value = _imp_is_frozen_package_impl(module, name); - -exit: - return return_value; -} - static PyObject * _imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=86aab14dcd4b959b input=81b6cdecd080fbb8]*/ +/*[clinic end generated code: output=3e4cab802b56d649 input=81b6cdecd080fbb8]*/ { return is_frozen_package(name); } @@ -2117,37 +1895,9 @@ _imp.is_builtin Returns True if the module name corresponds to a built-in module. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_is_builtin__doc__, -"is_builtin($module, name, /)\n" -"--\n" -"\n" -"Returns True if the module name corresponds to a built-in module."); - -#define _IMP_IS_BUILTIN_METHODDEF \ - {"is_builtin", (PyCFunction)_imp_is_builtin, METH_VARARGS, _imp_is_builtin__doc__}, - -static PyObject * -_imp_is_builtin_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -_imp_is_builtin(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name; - - if (!PyArg_ParseTuple(args, - "U:is_builtin", - &name)) - goto exit; - return_value = _imp_is_builtin_impl(module, name); - -exit: - return return_value; -} - static PyObject * _imp_is_builtin_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=d5847f8cac50946e input=86befdac021dd1c7]*/ +/*[clinic end generated code: output=2deec9cac6fb9a7e input=86befdac021dd1c7]*/ { return PyLong_FromLong(is_builtin(name)); } @@ -2161,37 +1911,9 @@ _imp.is_frozen Returns True if the module name corresponds to a frozen module. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_is_frozen__doc__, -"is_frozen($module, name, /)\n" -"--\n" -"\n" -"Returns True if the module name corresponds to a frozen module."); - -#define _IMP_IS_FROZEN_METHODDEF \ - {"is_frozen", (PyCFunction)_imp_is_frozen, METH_VARARGS, _imp_is_frozen__doc__}, - -static PyObject * -_imp_is_frozen_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -_imp_is_frozen(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name; - - if (!PyArg_ParseTuple(args, - "U:is_frozen", - &name)) - goto exit; - return_value = _imp_is_frozen_impl(module, name); - -exit: - return return_value; -} - static PyObject * _imp_is_frozen_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=6691af884ba4987d input=7301dbca1897d66b]*/ +/*[clinic end generated code: output=7de8e260c8e36aed input=7301dbca1897d66b]*/ { const struct _frozen *p; @@ -2212,39 +1934,10 @@ _imp.load_dynamic Loads an extension module. [clinic start generated code]*/ -PyDoc_STRVAR(_imp_load_dynamic__doc__, -"load_dynamic($module, name, path, file=None, /)\n" -"--\n" -"\n" -"Loads an extension module."); - -#define _IMP_LOAD_DYNAMIC_METHODDEF \ - {"load_dynamic", (PyCFunction)_imp_load_dynamic, METH_VARARGS, _imp_load_dynamic__doc__}, - -static PyObject * -_imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, PyObject *file); - static PyObject * -_imp_load_dynamic(PyModuleDef *module, PyObject *args) -{ - PyObject *return_value = NULL; - PyObject *name; - PyObject *path; - PyObject *file = NULL; - - if (!PyArg_ParseTuple(args, - "UO&|O:load_dynamic", - &name, PyUnicode_FSDecoder, &path, &file)) - goto exit; - return_value = _imp_load_dynamic_impl(module, name, path, file); - -exit: - return return_value; -} - -static PyObject * -_imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, PyObject *file) -/*[clinic end generated code: output=81d11a1fbd1ea0a8 input=af64f06e4bad3526]*/ +_imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, + PyObject *file) +/*[clinic end generated code: output=e84e5f7f0f39bc54 input=af64f06e4bad3526]*/ { PyObject *mod; FILE *fp; @@ -2253,8 +1946,6 @@ _imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, PyOb fp = _Py_fopen_obj(path, "r"); if (fp == NULL) { Py_DECREF(path); - if (!PyErr_Occurred()) - PyErr_SetFromErrno(PyExc_IOError); return NULL; } } @@ -2272,11 +1963,7 @@ _imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, PyOb /*[clinic input] dump buffer [clinic start generated code]*/ - -#ifndef _IMP_LOAD_DYNAMIC_METHODDEF - #define _IMP_LOAD_DYNAMIC_METHODDEF -#endif /* !defined(_IMP_LOAD_DYNAMIC_METHODDEF) */ -/*[clinic end generated code: output=d07c1d4a343a9579 input=524ce2e021e4eba6]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=524ce2e021e4eba6]*/ PyDoc_STRVAR(doc_imp, @@ -2376,7 +2063,7 @@ PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void)) memset(newtab, '\0', sizeof newtab); - newtab[0].name = (char *)name; + newtab[0].name = name; newtab[0].initfunc = initfunc; return PyImport_ExtendInittab(newtab); @@ -2385,4 +2072,3 @@ PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void)) #ifdef __cplusplus } #endif - diff --git a/Python/importlib.h b/Python/importlib.h index ef8bf27..d40828e 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1,8 +1,8 @@ -/* Auto-generated by Modules/_freeze_importlib.c */ +/* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,64,0,0,0,115,228,4,0,0,100,0,0,90,0,0, - 100,163,0,90,1,0,100,4,0,100,5,0,132,0,0,90, + 0,64,0,0,0,115,56,5,0,0,100,0,0,90,0,0, + 100,178,0,90,1,0,100,4,0,100,5,0,132,0,0,90, 2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8, 0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0, 132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90, @@ -24,1025 +24,1088 @@ const unsigned char _Py_M__importlib[] = { 0,100,44,0,132,0,0,90,27,0,100,45,0,106,28,0, 100,46,0,100,47,0,131,2,0,100,48,0,23,90,29,0, 101,30,0,106,31,0,101,29,0,100,47,0,131,2,0,90, - 32,0,100,49,0,90,33,0,100,50,0,103,1,0,90,34, - 0,100,51,0,103,1,0,90,35,0,100,52,0,103,1,0, - 90,36,0,100,53,0,100,54,0,100,55,0,132,1,0,90, - 37,0,100,56,0,100,57,0,132,0,0,90,38,0,100,58, - 0,100,59,0,132,0,0,90,39,0,100,60,0,100,61,0, - 132,0,0,90,40,0,100,62,0,100,63,0,100,64,0,100, - 65,0,132,0,1,90,41,0,100,66,0,100,67,0,132,0, - 0,90,42,0,100,68,0,100,69,0,132,0,0,90,43,0, - 100,70,0,100,71,0,132,0,0,90,44,0,100,72,0,100, - 73,0,132,0,0,90,45,0,100,74,0,100,75,0,132,0, - 0,90,46,0,100,53,0,100,53,0,100,53,0,100,76,0, - 100,77,0,132,3,0,90,47,0,100,53,0,100,53,0,100, - 53,0,100,78,0,100,79,0,132,3,0,90,48,0,100,80, - 0,100,80,0,100,81,0,100,82,0,132,2,0,90,49,0, - 100,83,0,100,84,0,132,0,0,90,50,0,100,85,0,100, - 86,0,132,0,0,90,51,0,71,100,87,0,100,88,0,132, - 0,0,100,88,0,131,2,0,90,52,0,71,100,89,0,100, - 90,0,132,0,0,100,90,0,131,2,0,90,53,0,100,91, - 0,100,53,0,100,92,0,100,53,0,100,93,0,100,94,0, - 132,0,2,90,54,0,101,55,0,131,0,0,90,56,0,100, - 53,0,100,95,0,100,53,0,100,96,0,101,56,0,100,97, - 0,100,98,0,132,1,2,90,57,0,100,53,0,100,53,0, - 100,99,0,100,100,0,132,2,0,90,58,0,71,100,101,0, - 100,102,0,132,0,0,100,102,0,131,2,0,90,59,0,100, - 53,0,100,103,0,100,104,0,132,1,0,90,60,0,71,100, - 105,0,100,106,0,132,0,0,100,106,0,131,2,0,90,61, - 0,71,100,107,0,100,108,0,132,0,0,100,108,0,131,2, - 0,90,62,0,71,100,109,0,100,110,0,132,0,0,100,110, - 0,131,2,0,90,63,0,71,100,111,0,100,112,0,132,0, - 0,100,112,0,131,2,0,90,64,0,71,100,113,0,100,114, - 0,132,0,0,100,114,0,101,64,0,131,3,0,90,65,0, - 71,100,115,0,100,116,0,132,0,0,100,116,0,131,2,0, - 90,66,0,71,100,117,0,100,118,0,132,0,0,100,118,0, - 101,66,0,101,65,0,131,4,0,90,67,0,71,100,119,0, - 100,120,0,132,0,0,100,120,0,101,66,0,101,64,0,131, - 4,0,90,68,0,103,0,0,90,69,0,71,100,121,0,100, - 122,0,132,0,0,100,122,0,131,2,0,90,70,0,71,100, - 123,0,100,124,0,132,0,0,100,124,0,131,2,0,90,71, - 0,71,100,125,0,100,126,0,132,0,0,100,126,0,131,2, - 0,90,72,0,71,100,127,0,100,128,0,132,0,0,100,128, - 0,131,2,0,90,73,0,71,100,129,0,100,130,0,132,0, - 0,100,130,0,131,2,0,90,74,0,71,100,131,0,100,132, - 0,132,0,0,100,132,0,131,2,0,90,75,0,100,133,0, - 100,134,0,132,0,0,90,76,0,100,135,0,100,136,0,132, - 0,0,90,77,0,100,53,0,100,137,0,100,138,0,132,1, - 0,90,78,0,100,139,0,100,140,0,132,0,0,90,79,0, - 100,141,0,90,80,0,101,80,0,100,142,0,23,90,81,0, - 100,143,0,100,144,0,132,0,0,90,82,0,100,145,0,100, - 146,0,132,0,0,90,83,0,100,53,0,100,80,0,100,147, - 0,100,148,0,132,2,0,90,84,0,100,149,0,100,150,0, - 132,0,0,90,85,0,100,151,0,100,152,0,132,0,0,90, - 86,0,100,153,0,100,154,0,132,0,0,90,87,0,100,53, - 0,100,53,0,102,0,0,100,80,0,100,155,0,100,156,0, - 132,4,0,90,88,0,100,157,0,100,158,0,132,0,0,90, - 89,0,100,159,0,100,160,0,132,0,0,90,90,0,100,161, - 0,100,162,0,132,0,0,90,91,0,100,53,0,83,41,164, - 97,83,1,0,0,67,111,114,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,111, - 114,116,46,10,10,84,104,105,115,32,109,111,100,117,108,101, - 32,105,115,32,78,79,84,32,109,101,97,110,116,32,116,111, - 32,98,101,32,100,105,114,101,99,116,108,121,32,105,109,112, - 111,114,116,101,100,33,32,73,116,32,104,97,115,32,98,101, - 101,110,32,100,101,115,105,103,110,101,100,32,115,117,99,104, - 10,116,104,97,116,32,105,116,32,99,97,110,32,98,101,32, - 98,111,111,116,115,116,114,97,112,112,101,100,32,105,110,116, - 111,32,80,121,116,104,111,110,32,97,115,32,116,104,101,32, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, - 102,32,105,109,112,111,114,116,46,32,65,115,10,115,117,99, - 104,32,105,116,32,114,101,113,117,105,114,101,115,32,116,104, - 101,32,105,110,106,101,99,116,105,111,110,32,111,102,32,115, - 112,101,99,105,102,105,99,32,109,111,100,117,108,101,115,32, - 97,110,100,32,97,116,116,114,105,98,117,116,101,115,32,105, - 110,32,111,114,100,101,114,32,116,111,10,119,111,114,107,46, - 32,79,110,101,32,115,104,111,117,108,100,32,117,115,101,32, - 105,109,112,111,114,116,108,105,98,32,97,115,32,116,104,101, - 32,112,117,98,108,105,99,45,102,97,99,105,110,103,32,118, - 101,114,115,105,111,110,32,111,102,32,116,104,105,115,32,109, - 111,100,117,108,101,46,10,10,218,3,119,105,110,218,6,99, - 121,103,119,105,110,218,6,100,97,114,119,105,110,99,0,0, - 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, - 0,0,115,49,0,0,0,116,0,0,106,1,0,106,2,0, - 116,3,0,131,1,0,114,33,0,100,1,0,100,2,0,132, - 0,0,125,0,0,110,12,0,100,3,0,100,2,0,132,0, - 0,125,0,0,124,0,0,83,41,4,78,99,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,83,0,0,0, - 115,13,0,0,0,100,1,0,116,0,0,106,1,0,107,6, - 0,83,41,2,122,53,84,114,117,101,32,105,102,32,102,105, - 108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32, - 99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115, - 101,110,115,105,116,105,118,101,108,121,46,115,12,0,0,0, - 80,89,84,72,79,78,67,65,83,69,79,75,41,2,218,3, - 95,111,115,90,7,101,110,118,105,114,111,110,169,0,114,4, - 0,0,0,114,4,0,0,0,250,29,60,102,114,111,122,101, - 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, - 116,115,116,114,97,112,62,218,11,95,114,101,108,97,120,95, - 99,97,115,101,30,0,0,0,115,2,0,0,0,0,2,122, - 37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, - 101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97, - 120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0, - 100,1,0,83,41,2,122,53,84,114,117,101,32,105,102,32, - 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98, - 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105, - 110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,6,0,0,0,34,0,0,0, - 115,2,0,0,0,0,2,41,4,218,3,115,121,115,218,8, - 112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115, - 119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69, - 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, - 83,41,1,114,6,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,16,95,109,97,107,101,95,114, - 101,108,97,120,95,99,97,115,101,28,0,0,0,115,8,0, - 0,0,0,1,18,1,15,4,12,3,114,11,0,0,0,99, - 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,131, - 1,0,100,1,0,64,106,1,0,100,2,0,100,3,0,131, - 2,0,83,41,4,122,42,67,111,110,118,101,114,116,32,97, - 32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,32, - 116,111,32,108,105,116,116,108,101,45,101,110,100,105,97,110, - 46,108,3,0,0,0,255,127,255,127,3,0,233,4,0,0, - 0,218,6,108,105,116,116,108,101,41,2,218,3,105,110,116, - 218,8,116,111,95,98,121,116,101,115,41,1,218,1,120,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,7, - 95,119,95,108,111,110,103,40,0,0,0,115,2,0,0,0, - 0,2,114,17,0,0,0,99,1,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, - 0,116,0,0,106,1,0,124,0,0,100,1,0,131,2,0, - 83,41,2,122,47,67,111,110,118,101,114,116,32,52,32,98, - 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, - 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, - 103,101,114,46,114,13,0,0,0,41,2,114,14,0,0,0, - 218,10,102,114,111,109,95,98,121,116,101,115,41,1,90,9, - 105,110,116,95,98,121,116,101,115,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,7,95,114,95,108,111,110, - 103,45,0,0,0,115,2,0,0,0,0,2,114,19,0,0, - 0,99,0,0,0,0,0,0,0,0,1,0,0,0,3,0, - 0,0,71,0,0,0,115,26,0,0,0,116,0,0,106,1, - 0,100,1,0,100,2,0,132,0,0,124,0,0,68,131,1, - 0,131,1,0,83,41,3,122,31,82,101,112,108,97,99,101, - 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, - 46,106,111,105,110,40,41,46,99,1,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,83,0,0,0,115,37,0, - 0,0,103,0,0,124,0,0,93,27,0,125,1,0,124,1, - 0,114,6,0,124,1,0,106,0,0,116,1,0,131,1,0, - 145,2,0,113,6,0,83,114,4,0,0,0,41,2,218,6, - 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, - 97,114,97,116,111,114,115,41,2,218,2,46,48,218,4,112, - 97,114,116,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,250,10,60,108,105,115,116,99,111,109,112,62,52,0, - 0,0,115,2,0,0,0,9,1,122,30,95,112,97,116,104, - 95,106,111,105,110,46,60,108,111,99,97,108,115,62,46,60, - 108,105,115,116,99,111,109,112,62,41,2,218,8,112,97,116, - 104,95,115,101,112,218,4,106,111,105,110,41,1,218,10,112, - 97,116,104,95,112,97,114,116,115,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,10,95,112,97,116,104,95, - 106,111,105,110,50,0,0,0,115,4,0,0,0,0,2,15, - 1,114,28,0,0,0,99,1,0,0,0,0,0,0,0,5, - 0,0,0,5,0,0,0,67,0,0,0,115,134,0,0,0, - 116,0,0,116,1,0,131,1,0,100,1,0,107,2,0,114, - 52,0,124,0,0,106,2,0,116,3,0,131,1,0,92,3, - 0,125,1,0,125,2,0,125,3,0,124,1,0,124,3,0, - 102,2,0,83,120,69,0,116,4,0,124,0,0,131,1,0, - 68,93,55,0,125,4,0,124,4,0,116,1,0,107,6,0, - 114,65,0,124,0,0,106,5,0,124,4,0,100,2,0,100, - 1,0,131,1,1,92,2,0,125,1,0,125,3,0,124,1, - 0,124,3,0,102,2,0,83,113,65,0,87,100,3,0,124, - 0,0,102,2,0,83,41,4,122,32,82,101,112,108,97,99, - 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, - 104,46,115,112,108,105,116,40,41,46,233,1,0,0,0,90, - 8,109,97,120,115,112,108,105,116,218,0,41,6,218,3,108, - 101,110,114,21,0,0,0,218,10,114,112,97,114,116,105,116, - 105,111,110,114,25,0,0,0,218,8,114,101,118,101,114,115, - 101,100,218,6,114,115,112,108,105,116,41,5,218,4,112,97, - 116,104,90,5,102,114,111,110,116,218,1,95,218,4,116,97, - 105,108,114,16,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,11,95,112,97,116,104,95,115,112, - 108,105,116,56,0,0,0,115,16,0,0,0,0,2,18,1, - 24,1,10,1,19,1,12,1,27,1,14,1,114,38,0,0, - 0,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,13,0,0,0,116,0,0,106,1, - 0,124,0,0,131,1,0,83,41,1,122,126,83,116,97,116, - 32,116,104,101,32,112,97,116,104,46,10,10,32,32,32,32, - 77,97,100,101,32,97,32,115,101,112,97,114,97,116,101,32, - 102,117,110,99,116,105,111,110,32,116,111,32,109,97,107,101, - 32,105,116,32,101,97,115,105,101,114,32,116,111,32,111,118, - 101,114,114,105,100,101,32,105,110,32,101,120,112,101,114,105, - 109,101,110,116,115,10,32,32,32,32,40,101,46,103,46,32, - 99,97,99,104,101,32,115,116,97,116,32,114,101,115,117,108, - 116,115,41,46,10,10,32,32,32,32,41,2,114,3,0,0, - 0,90,4,115,116,97,116,41,1,114,35,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,95, - 112,97,116,104,95,115,116,97,116,68,0,0,0,115,2,0, - 0,0,0,7,114,39,0,0,0,99,2,0,0,0,0,0, - 0,0,3,0,0,0,11,0,0,0,67,0,0,0,115,58, - 0,0,0,121,16,0,116,0,0,124,0,0,131,1,0,125, - 2,0,87,110,22,0,4,116,1,0,107,10,0,114,40,0, - 1,1,1,100,1,0,83,89,110,1,0,88,124,2,0,106, - 2,0,100,2,0,64,124,1,0,107,2,0,83,41,3,122, - 49,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104, - 101,32,112,97,116,104,32,105,115,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,32,109,111,100,101,32,116,121,112, - 101,46,70,105,0,240,0,0,41,3,114,39,0,0,0,218, - 7,79,83,69,114,114,111,114,218,7,115,116,95,109,111,100, - 101,41,3,114,35,0,0,0,218,4,109,111,100,101,90,9, - 115,116,97,116,95,105,110,102,111,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,18,95,112,97,116,104,95, - 105,115,95,109,111,100,101,95,116,121,112,101,78,0,0,0, - 115,10,0,0,0,0,2,3,1,16,1,13,1,9,1,114, - 43,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,115,13,0,0,0,116,0, - 0,124,0,0,100,1,0,131,2,0,83,41,2,122,31,82, - 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, - 115,46,112,97,116,104,46,105,115,102,105,108,101,46,105,0, - 128,0,0,41,1,114,43,0,0,0,41,1,114,35,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,12,95,112,97,116,104,95,105,115,102,105,108,101,87,0, - 0,0,115,2,0,0,0,0,2,114,44,0,0,0,99,1, - 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, - 0,0,0,115,34,0,0,0,124,0,0,115,21,0,116,0, - 0,106,1,0,131,0,0,125,0,0,110,0,0,116,2,0, - 124,0,0,100,1,0,131,2,0,83,41,2,122,30,82,101, + 32,0,100,49,0,90,33,0,100,50,0,90,34,0,100,51, + 0,103,1,0,90,35,0,100,52,0,103,1,0,90,36,0, + 101,36,0,4,90,37,0,90,38,0,100,53,0,100,54,0, + 100,53,0,100,55,0,100,56,0,132,1,1,90,39,0,100, + 57,0,100,58,0,132,0,0,90,40,0,100,59,0,100,60, + 0,132,0,0,90,41,0,100,61,0,100,62,0,132,0,0, + 90,42,0,100,63,0,100,64,0,100,65,0,100,66,0,132, + 0,1,90,43,0,100,67,0,100,68,0,132,0,0,90,44, + 0,100,69,0,100,70,0,132,0,0,90,45,0,100,71,0, + 100,72,0,132,0,0,90,46,0,100,73,0,100,74,0,132, + 0,0,90,47,0,100,75,0,100,76,0,132,0,0,90,48, + 0,100,53,0,100,53,0,100,53,0,100,77,0,100,78,0, + 132,3,0,90,49,0,100,53,0,100,53,0,100,53,0,100, + 79,0,100,80,0,132,3,0,90,50,0,100,81,0,100,81, + 0,100,82,0,100,83,0,132,2,0,90,51,0,100,84,0, + 100,85,0,132,0,0,90,52,0,100,86,0,100,87,0,132, + 0,0,90,53,0,71,100,88,0,100,89,0,132,0,0,100, + 89,0,131,2,0,90,54,0,71,100,90,0,100,91,0,132, + 0,0,100,91,0,131,2,0,90,55,0,100,92,0,100,53, + 0,100,93,0,100,53,0,100,94,0,100,95,0,132,0,2, + 90,56,0,101,57,0,131,0,0,90,58,0,100,53,0,100, + 96,0,100,53,0,100,97,0,101,58,0,100,98,0,100,99, + 0,132,1,2,90,59,0,100,53,0,100,53,0,100,100,0, + 100,101,0,132,2,0,90,60,0,100,102,0,100,103,0,100, + 104,0,100,105,0,132,0,1,90,61,0,100,106,0,100,107, + 0,132,0,0,90,62,0,100,108,0,100,109,0,132,0,0, + 90,63,0,100,110,0,100,111,0,132,0,0,90,64,0,100, + 112,0,100,113,0,132,0,0,90,65,0,100,114,0,100,115, + 0,132,0,0,90,66,0,100,116,0,100,117,0,132,0,0, + 90,67,0,100,53,0,100,118,0,100,119,0,132,1,0,90, + 68,0,71,100,120,0,100,121,0,132,0,0,100,121,0,131, + 2,0,90,69,0,71,100,122,0,100,123,0,132,0,0,100, + 123,0,131,2,0,90,70,0,71,100,124,0,100,125,0,132, + 0,0,100,125,0,131,2,0,90,71,0,71,100,126,0,100, + 127,0,132,0,0,100,127,0,131,2,0,90,72,0,71,100, + 128,0,100,129,0,132,0,0,100,129,0,101,72,0,131,3, + 0,90,73,0,71,100,130,0,100,131,0,132,0,0,100,131, + 0,131,2,0,90,74,0,71,100,132,0,100,133,0,132,0, + 0,100,133,0,101,74,0,101,73,0,131,4,0,90,75,0, + 71,100,134,0,100,135,0,132,0,0,100,135,0,101,74,0, + 101,72,0,131,4,0,90,76,0,103,0,0,90,77,0,71, + 100,136,0,100,137,0,132,0,0,100,137,0,131,2,0,90, + 78,0,71,100,138,0,100,139,0,132,0,0,100,139,0,131, + 2,0,90,79,0,71,100,140,0,100,141,0,132,0,0,100, + 141,0,131,2,0,90,80,0,71,100,142,0,100,143,0,132, + 0,0,100,143,0,131,2,0,90,81,0,71,100,144,0,100, + 145,0,132,0,0,100,145,0,131,2,0,90,82,0,71,100, + 146,0,100,147,0,132,0,0,100,147,0,131,2,0,90,83, + 0,100,148,0,100,149,0,132,0,0,90,84,0,100,150,0, + 100,151,0,132,0,0,90,85,0,100,53,0,100,152,0,100, + 153,0,132,1,0,90,86,0,100,154,0,100,155,0,132,0, + 0,90,87,0,100,156,0,90,88,0,101,88,0,100,157,0, + 23,90,89,0,100,158,0,100,159,0,132,0,0,90,90,0, + 100,160,0,100,161,0,132,0,0,90,91,0,100,53,0,100, + 81,0,100,162,0,100,163,0,132,2,0,90,92,0,100,164, + 0,100,165,0,132,0,0,90,93,0,100,166,0,100,167,0, + 132,0,0,90,94,0,100,168,0,100,169,0,132,0,0,90, + 95,0,100,53,0,100,53,0,102,0,0,100,81,0,100,170, + 0,100,171,0,132,4,0,90,96,0,100,172,0,100,173,0, + 132,0,0,90,97,0,100,174,0,100,175,0,132,0,0,90, + 98,0,100,176,0,100,177,0,132,0,0,90,99,0,100,53, + 0,83,41,179,97,83,1,0,0,67,111,114,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 105,109,112,111,114,116,46,10,10,84,104,105,115,32,109,111, + 100,117,108,101,32,105,115,32,78,79,84,32,109,101,97,110, + 116,32,116,111,32,98,101,32,100,105,114,101,99,116,108,121, + 32,105,109,112,111,114,116,101,100,33,32,73,116,32,104,97, + 115,32,98,101,101,110,32,100,101,115,105,103,110,101,100,32, + 115,117,99,104,10,116,104,97,116,32,105,116,32,99,97,110, + 32,98,101,32,98,111,111,116,115,116,114,97,112,112,101,100, + 32,105,110,116,111,32,80,121,116,104,111,110,32,97,115,32, + 116,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,105,109,112,111,114,116,46,32,65,115, + 10,115,117,99,104,32,105,116,32,114,101,113,117,105,114,101, + 115,32,116,104,101,32,105,110,106,101,99,116,105,111,110,32, + 111,102,32,115,112,101,99,105,102,105,99,32,109,111,100,117, + 108,101,115,32,97,110,100,32,97,116,116,114,105,98,117,116, + 101,115,32,105,110,32,111,114,100,101,114,32,116,111,10,119, + 111,114,107,46,32,79,110,101,32,115,104,111,117,108,100,32, + 117,115,101,32,105,109,112,111,114,116,108,105,98,32,97,115, + 32,116,104,101,32,112,117,98,108,105,99,45,102,97,99,105, + 110,103,32,118,101,114,115,105,111,110,32,111,102,32,116,104, + 105,115,32,109,111,100,117,108,101,46,10,10,218,3,119,105, + 110,218,6,99,121,103,119,105,110,218,6,100,97,114,119,105, + 110,99,0,0,0,0,0,0,0,0,1,0,0,0,2,0, + 0,0,67,0,0,0,115,49,0,0,0,116,0,0,106,1, + 0,106,2,0,116,3,0,131,1,0,114,33,0,100,1,0, + 100,2,0,132,0,0,125,0,0,110,12,0,100,3,0,100, + 2,0,132,0,0,125,0,0,124,0,0,83,41,4,78,99, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 83,0,0,0,115,13,0,0,0,100,1,0,116,0,0,106, + 1,0,107,6,0,83,41,2,122,53,84,114,117,101,32,105, + 102,32,102,105,108,101,110,97,109,101,115,32,109,117,115,116, + 32,98,101,32,99,104,101,99,107,101,100,32,99,97,115,101, + 45,105,110,115,101,110,115,105,116,105,118,101,108,121,46,115, + 12,0,0,0,80,89,84,72,79,78,67,65,83,69,79,75, + 41,2,218,3,95,111,115,90,7,101,110,118,105,114,111,110, + 169,0,114,4,0,0,0,114,4,0,0,0,250,29,60,102, + 114,111,122,101,110,32,105,109,112,111,114,116,108,105,98,46, + 95,98,111,111,116,115,116,114,97,112,62,218,11,95,114,101, + 108,97,120,95,99,97,115,101,30,0,0,0,115,2,0,0, + 0,0,2,122,37,95,109,97,107,101,95,114,101,108,97,120, + 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, + 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,83,0,0,0,115, + 4,0,0,0,100,1,0,83,41,2,122,53,84,114,117,101, + 32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117, + 115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97, + 115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121, + 46,70,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,6,0,0,0, + 34,0,0,0,115,2,0,0,0,0,2,41,4,218,3,115, + 121,115,218,8,112,108,97,116,102,111,114,109,218,10,115,116, + 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, + 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, + 70,79,82,77,83,41,1,114,6,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,16,95,109,97, + 107,101,95,114,101,108,97,120,95,99,97,115,101,28,0,0, + 0,115,8,0,0,0,0,1,18,1,15,4,12,3,114,11, + 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,26,0,0,0,116,0,0, + 124,0,0,131,1,0,100,1,0,64,106,1,0,100,2,0, + 100,3,0,131,2,0,83,41,4,122,42,67,111,110,118,101, + 114,116,32,97,32,51,50,45,98,105,116,32,105,110,116,101, + 103,101,114,32,116,111,32,108,105,116,116,108,101,45,101,110, + 100,105,97,110,46,108,3,0,0,0,255,127,255,127,3,0, + 233,4,0,0,0,218,6,108,105,116,116,108,101,41,2,218, + 3,105,110,116,218,8,116,111,95,98,121,116,101,115,41,1, + 218,1,120,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,7,95,119,95,108,111,110,103,40,0,0,0,115, + 2,0,0,0,0,2,114,17,0,0,0,99,1,0,0,0, + 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, + 115,16,0,0,0,116,0,0,106,1,0,124,0,0,100,1, + 0,131,2,0,83,41,2,122,47,67,111,110,118,101,114,116, + 32,52,32,98,121,116,101,115,32,105,110,32,108,105,116,116, + 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32, + 105,110,116,101,103,101,114,46,114,13,0,0,0,41,2,114, + 14,0,0,0,218,10,102,114,111,109,95,98,121,116,101,115, + 41,1,90,9,105,110,116,95,98,121,116,101,115,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,114, + 95,108,111,110,103,45,0,0,0,115,2,0,0,0,0,2, + 114,19,0,0,0,99,0,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,71,0,0,0,115,26,0,0,0,116, + 0,0,106,1,0,100,1,0,100,2,0,132,0,0,124,0, + 0,68,131,1,0,131,1,0,83,41,3,122,31,82,101,112, + 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, + 112,97,116,104,46,106,111,105,110,40,41,46,99,1,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, + 0,115,37,0,0,0,103,0,0,124,0,0,93,27,0,125, + 1,0,124,1,0,114,6,0,124,1,0,106,0,0,116,1, + 0,131,1,0,145,2,0,113,6,0,83,114,4,0,0,0, + 41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104, + 95,115,101,112,97,114,97,116,111,114,115,41,2,218,2,46, + 48,218,4,112,97,114,116,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,250,10,60,108,105,115,116,99,111,109, + 112,62,52,0,0,0,115,2,0,0,0,9,1,122,30,95, + 112,97,116,104,95,106,111,105,110,46,60,108,111,99,97,108, + 115,62,46,60,108,105,115,116,99,111,109,112,62,41,2,218, + 8,112,97,116,104,95,115,101,112,218,4,106,111,105,110,41, + 1,218,10,112,97,116,104,95,112,97,114,116,115,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,112, + 97,116,104,95,106,111,105,110,50,0,0,0,115,4,0,0, + 0,0,2,15,1,114,28,0,0,0,99,1,0,0,0,0, + 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, + 134,0,0,0,116,0,0,116,1,0,131,1,0,100,1,0, + 107,2,0,114,52,0,124,0,0,106,2,0,116,3,0,131, + 1,0,92,3,0,125,1,0,125,2,0,125,3,0,124,1, + 0,124,3,0,102,2,0,83,120,69,0,116,4,0,124,0, + 0,131,1,0,68,93,55,0,125,4,0,124,4,0,116,1, + 0,107,6,0,114,65,0,124,0,0,106,5,0,124,4,0, + 100,2,0,100,1,0,131,1,1,92,2,0,125,1,0,125, + 3,0,124,1,0,124,3,0,102,2,0,83,113,65,0,87, + 100,3,0,124,0,0,102,2,0,83,41,4,122,32,82,101, 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, - 46,112,97,116,104,46,105,115,100,105,114,46,105,0,64,0, - 0,41,3,114,3,0,0,0,218,6,103,101,116,99,119,100, - 114,43,0,0,0,41,1,114,35,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97, - 116,104,95,105,115,100,105,114,92,0,0,0,115,6,0,0, - 0,0,2,6,1,15,1,114,46,0,0,0,105,182,1,0, - 0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0, - 0,0,67,0,0,0,115,192,0,0,0,100,1,0,106,0, - 0,124,0,0,116,1,0,124,0,0,131,1,0,131,2,0, - 125,3,0,116,2,0,106,3,0,124,3,0,116,2,0,106, - 4,0,116,2,0,106,5,0,66,116,2,0,106,6,0,66, - 124,2,0,100,2,0,64,131,3,0,125,4,0,121,60,0, - 116,7,0,106,8,0,124,4,0,100,3,0,131,2,0,143, - 20,0,125,5,0,124,5,0,106,9,0,124,1,0,131,1, - 0,1,87,100,4,0,81,88,116,2,0,106,10,0,124,3, - 0,124,0,0,131,2,0,1,87,110,59,0,4,116,11,0, - 107,10,0,114,187,0,1,1,1,121,17,0,116,2,0,106, - 12,0,124,3,0,131,1,0,1,87,110,18,0,4,116,11, - 0,107,10,0,114,179,0,1,1,1,89,110,1,0,88,130, - 0,0,89,110,1,0,88,100,4,0,83,41,5,122,162,66, - 101,115,116,45,101,102,102,111,114,116,32,102,117,110,99,116, - 105,111,110,32,116,111,32,119,114,105,116,101,32,100,97,116, - 97,32,116,111,32,97,32,112,97,116,104,32,97,116,111,109, - 105,99,97,108,108,121,46,10,32,32,32,32,66,101,32,112, - 114,101,112,97,114,101,100,32,116,111,32,104,97,110,100,108, - 101,32,97,32,70,105,108,101,69,120,105,115,116,115,69,114, - 114,111,114,32,105,102,32,99,111,110,99,117,114,114,101,110, - 116,32,119,114,105,116,105,110,103,32,111,102,32,116,104,101, - 10,32,32,32,32,116,101,109,112,111,114,97,114,121,32,102, - 105,108,101,32,105,115,32,97,116,116,101,109,112,116,101,100, - 46,122,5,123,125,46,123,125,105,182,1,0,0,90,2,119, - 98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100, - 114,3,0,0,0,90,4,111,112,101,110,90,6,79,95,69, - 88,67,76,90,7,79,95,67,82,69,65,84,90,8,79,95, - 87,82,79,78,76,89,218,3,95,105,111,218,6,70,105,108, - 101,73,79,218,5,119,114,105,116,101,218,7,114,101,112,108, - 97,99,101,114,40,0,0,0,90,6,117,110,108,105,110,107, - 41,6,114,35,0,0,0,218,4,100,97,116,97,114,42,0, - 0,0,90,8,112,97,116,104,95,116,109,112,90,2,102,100, - 218,4,102,105,108,101,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,13,95,119,114,105,116,101,95,97,116, - 111,109,105,99,99,0,0,0,115,26,0,0,0,0,5,24, - 1,9,1,33,1,3,3,21,1,19,1,20,1,13,1,3, - 1,17,1,13,1,5,1,114,55,0,0,0,99,2,0,0, - 0,0,0,0,0,3,0,0,0,7,0,0,0,67,0,0, - 0,115,95,0,0,0,120,69,0,100,1,0,100,2,0,100, - 3,0,100,4,0,103,4,0,68,93,49,0,125,2,0,116, - 0,0,124,1,0,124,2,0,131,2,0,114,19,0,116,1, - 0,124,0,0,124,2,0,116,2,0,124,1,0,124,2,0, - 131,2,0,131,3,0,1,113,19,0,113,19,0,87,124,0, - 0,106,3,0,106,4,0,124,1,0,106,3,0,131,1,0, - 1,100,5,0,83,41,6,122,47,83,105,109,112,108,101,32, - 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, - 117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95, - 119,114,97,112,112,101,114,46,218,10,95,95,109,111,100,117, - 108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12, - 95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95, - 100,111,99,95,95,78,41,5,218,7,104,97,115,97,116,116, - 114,218,7,115,101,116,97,116,116,114,218,7,103,101,116,97, - 116,116,114,218,8,95,95,100,105,99,116,95,95,218,6,117, - 112,100,97,116,101,41,3,90,3,110,101,119,90,3,111,108, - 100,114,52,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,5,95,119,114,97,112,121,0,0,0, - 115,8,0,0,0,0,2,25,1,15,1,32,1,114,65,0, - 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,2, - 0,0,0,67,0,0,0,115,16,0,0,0,116,0,0,116, - 1,0,131,1,0,124,0,0,131,1,0,83,41,1,78,41, - 2,218,4,116,121,112,101,114,7,0,0,0,41,1,218,4, - 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,11,95,110,101,119,95,109,111,100,117,108,101, - 129,0,0,0,115,2,0,0,0,0,1,114,68,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,64,0,0,0,115,58,0,0,0,101,0,0,90,1,0, - 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, - 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, - 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, - 100,8,0,83,41,9,218,13,95,77,97,110,97,103,101,82, - 101,108,111,97,100,122,63,77,97,110,97,103,101,115,32,116, - 104,101,32,112,111,115,115,105,98,108,101,32,99,108,101,97, - 110,45,117,112,32,111,102,32,115,121,115,46,109,111,100,117, - 108,101,115,32,102,111,114,32,108,111,97,100,95,109,111,100, - 117,108,101,40,41,46,99,2,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,0, - 124,1,0,124,0,0,95,0,0,100,0,0,83,41,1,78, - 41,1,218,5,95,110,97,109,101,41,2,218,4,115,101,108, - 102,114,67,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,8,95,95,105,110,105,116,95,95,141, - 0,0,0,115,2,0,0,0,0,1,122,22,95,77,97,110, - 97,103,101,82,101,108,111,97,100,46,95,95,105,110,105,116, - 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, - 0,0,0,67,0,0,0,115,25,0,0,0,124,0,0,106, - 0,0,116,1,0,106,2,0,107,6,0,124,0,0,95,3, - 0,100,0,0,83,41,1,78,41,4,114,70,0,0,0,114, - 7,0,0,0,218,7,109,111,100,117,108,101,115,218,10,95, - 105,115,95,114,101,108,111,97,100,41,1,114,71,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 9,95,95,101,110,116,101,114,95,95,144,0,0,0,115,2, - 0,0,0,0,1,122,23,95,77,97,110,97,103,101,82,101, - 108,111,97,100,46,95,95,101,110,116,101,114,95,95,99,1, - 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,71, - 0,0,0,115,80,0,0,0,116,0,0,100,1,0,100,2, - 0,132,0,0,124,1,0,68,131,1,0,131,1,0,114,76, - 0,124,0,0,106,1,0,12,114,76,0,121,17,0,116,2, - 0,106,3,0,124,0,0,106,4,0,61,87,113,76,0,4, - 116,5,0,107,10,0,114,72,0,1,1,1,89,113,76,0, - 88,110,0,0,100,0,0,83,41,3,78,99,1,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,115,0,0,0, - 115,27,0,0,0,124,0,0,93,17,0,125,1,0,124,1, - 0,100,0,0,107,9,0,86,1,113,3,0,100,0,0,83, - 41,1,78,114,4,0,0,0,41,2,114,22,0,0,0,218, - 3,97,114,103,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,250,9,60,103,101,110,101,120,112,114,62,148,0, - 0,0,115,2,0,0,0,6,0,122,41,95,77,97,110,97, - 103,101,82,101,108,111,97,100,46,95,95,101,120,105,116,95, - 95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, - 120,112,114,62,41,6,218,3,97,110,121,114,74,0,0,0, - 114,7,0,0,0,114,73,0,0,0,114,70,0,0,0,218, - 8,75,101,121,69,114,114,111,114,41,2,114,71,0,0,0, - 218,4,97,114,103,115,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,8,95,95,101,120,105,116,95,95,147, - 0,0,0,115,10,0,0,0,0,1,35,1,3,1,17,1, - 13,1,122,22,95,77,97,110,97,103,101,82,101,108,111,97, - 100,46,95,95,101,120,105,116,95,95,78,41,7,114,57,0, - 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, - 0,114,72,0,0,0,114,75,0,0,0,114,81,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,69,0,0,0,137,0,0,0,115,8,0, - 0,0,12,2,6,2,12,3,12,3,114,69,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 64,0,0,0,115,16,0,0,0,101,0,0,90,1,0,100, - 0,0,90,2,0,100,1,0,83,41,2,218,14,95,68,101, - 97,100,108,111,99,107,69,114,114,111,114,78,41,3,114,57, - 0,0,0,114,56,0,0,0,114,58,0,0,0,114,4,0, + 46,112,97,116,104,46,115,112,108,105,116,40,41,46,233,1, + 0,0,0,90,8,109,97,120,115,112,108,105,116,218,0,41, + 6,218,3,108,101,110,114,21,0,0,0,218,10,114,112,97, + 114,116,105,116,105,111,110,114,25,0,0,0,218,8,114,101, + 118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,5, + 218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,95, + 218,4,116,97,105,108,114,16,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,11,95,112,97,116, + 104,95,115,112,108,105,116,56,0,0,0,115,16,0,0,0, + 0,2,18,1,24,1,10,1,19,1,12,1,27,1,14,1, + 114,38,0,0,0,99,1,0,0,0,0,0,0,0,1,0, + 0,0,2,0,0,0,67,0,0,0,115,13,0,0,0,116, + 0,0,106,1,0,124,0,0,131,1,0,83,41,1,122,126, + 83,116,97,116,32,116,104,101,32,112,97,116,104,46,10,10, + 32,32,32,32,77,97,100,101,32,97,32,115,101,112,97,114, + 97,116,101,32,102,117,110,99,116,105,111,110,32,116,111,32, + 109,97,107,101,32,105,116,32,101,97,115,105,101,114,32,116, + 111,32,111,118,101,114,114,105,100,101,32,105,110,32,101,120, + 112,101,114,105,109,101,110,116,115,10,32,32,32,32,40,101, + 46,103,46,32,99,97,99,104,101,32,115,116,97,116,32,114, + 101,115,117,108,116,115,41,46,10,10,32,32,32,32,41,2, + 114,3,0,0,0,90,4,115,116,97,116,41,1,114,35,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,82,0,0,0,162,0,0,0,115,2,0,0,0,12, - 1,114,82,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,64,0,0,0,115,82,0,0,0, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, - 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, - 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, - 132,0,0,90,6,0,100,8,0,100,9,0,132,0,0,90, - 7,0,100,10,0,100,11,0,132,0,0,90,8,0,100,12, - 0,83,41,13,218,11,95,77,111,100,117,108,101,76,111,99, - 107,122,169,65,32,114,101,99,117,114,115,105,118,101,32,108, - 111,99,107,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,119,104,105,99,104,32,105,115,32,97,98,108,101, - 32,116,111,32,100,101,116,101,99,116,32,100,101,97,100,108, - 111,99,107,115,10,32,32,32,32,40,101,46,103,46,32,116, - 104,114,101,97,100,32,49,32,116,114,121,105,110,103,32,116, - 111,32,116,97,107,101,32,108,111,99,107,115,32,65,32,116, - 104,101,110,32,66,44,32,97,110,100,32,116,104,114,101,97, - 100,32,50,32,116,114,121,105,110,103,32,116,111,10,32,32, - 32,32,116,97,107,101,32,108,111,99,107,115,32,66,32,116, - 104,101,110,32,65,41,46,10,32,32,32,32,99,2,0,0, - 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, - 0,115,70,0,0,0,116,0,0,106,1,0,131,0,0,124, - 0,0,95,2,0,116,0,0,106,1,0,131,0,0,124,0, - 0,95,3,0,124,1,0,124,0,0,95,4,0,100,0,0, - 124,0,0,95,5,0,100,1,0,124,0,0,95,6,0,100, - 1,0,124,0,0,95,7,0,100,0,0,83,41,2,78,233, - 0,0,0,0,41,8,218,7,95,116,104,114,101,97,100,90, - 13,97,108,108,111,99,97,116,101,95,108,111,99,107,218,4, - 108,111,99,107,218,6,119,97,107,101,117,112,114,67,0,0, - 0,218,5,111,119,110,101,114,218,5,99,111,117,110,116,218, - 7,119,97,105,116,101,114,115,41,2,114,71,0,0,0,114, + 0,218,10,95,112,97,116,104,95,115,116,97,116,68,0,0, + 0,115,2,0,0,0,0,7,114,39,0,0,0,99,2,0, + 0,0,0,0,0,0,3,0,0,0,11,0,0,0,67,0, + 0,0,115,58,0,0,0,121,16,0,116,0,0,124,0,0, + 131,1,0,125,2,0,87,110,22,0,4,116,1,0,107,10, + 0,114,40,0,1,1,1,100,1,0,83,89,110,1,0,88, + 124,2,0,106,2,0,100,2,0,64,124,1,0,107,2,0, + 83,41,3,122,49,84,101,115,116,32,119,104,101,116,104,101, + 114,32,116,104,101,32,112,97,116,104,32,105,115,32,116,104, + 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,101, + 32,116,121,112,101,46,70,105,0,240,0,0,41,3,114,39, + 0,0,0,218,7,79,83,69,114,114,111,114,218,7,115,116, + 95,109,111,100,101,41,3,114,35,0,0,0,218,4,109,111, + 100,101,90,9,115,116,97,116,95,105,110,102,111,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,18,95,112, + 97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,101, + 78,0,0,0,115,10,0,0,0,0,2,3,1,16,1,13, + 1,9,1,114,43,0,0,0,99,1,0,0,0,0,0,0, + 0,1,0,0,0,3,0,0,0,67,0,0,0,115,13,0, + 0,0,116,0,0,124,0,0,100,1,0,131,2,0,83,41, + 2,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, + 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, + 101,46,105,0,128,0,0,41,1,114,43,0,0,0,41,1, + 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,12,95,112,97,116,104,95,105,115,102,105, + 108,101,87,0,0,0,115,2,0,0,0,0,2,114,44,0, + 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,67,0,0,0,115,31,0,0,0,124,0,0,115, + 18,0,116,0,0,106,1,0,131,0,0,125,0,0,116,2, + 0,124,0,0,100,1,0,131,2,0,83,41,2,122,30,82, + 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, + 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, + 0,0,41,3,114,3,0,0,0,218,6,103,101,116,99,119, + 100,114,43,0,0,0,41,1,114,35,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,11,95,112, + 97,116,104,95,105,115,100,105,114,92,0,0,0,115,6,0, + 0,0,0,2,6,1,12,1,114,46,0,0,0,105,182,1, + 0,0,99,3,0,0,0,0,0,0,0,6,0,0,0,17, + 0,0,0,67,0,0,0,115,192,0,0,0,100,1,0,106, + 0,0,124,0,0,116,1,0,124,0,0,131,1,0,131,2, + 0,125,3,0,116,2,0,106,3,0,124,3,0,116,2,0, + 106,4,0,116,2,0,106,5,0,66,116,2,0,106,6,0, + 66,124,2,0,100,2,0,64,131,3,0,125,4,0,121,60, + 0,116,7,0,106,8,0,124,4,0,100,3,0,131,2,0, + 143,20,0,125,5,0,124,5,0,106,9,0,124,1,0,131, + 1,0,1,87,100,4,0,81,88,116,2,0,106,10,0,124, + 3,0,124,0,0,131,2,0,1,87,110,59,0,4,116,11, + 0,107,10,0,114,187,0,1,1,1,121,17,0,116,2,0, + 106,12,0,124,3,0,131,1,0,1,87,110,18,0,4,116, + 11,0,107,10,0,114,179,0,1,1,1,89,110,1,0,88, + 130,0,0,89,110,1,0,88,100,4,0,83,41,5,122,162, + 66,101,115,116,45,101,102,102,111,114,116,32,102,117,110,99, + 116,105,111,110,32,116,111,32,119,114,105,116,101,32,100,97, + 116,97,32,116,111,32,97,32,112,97,116,104,32,97,116,111, + 109,105,99,97,108,108,121,46,10,32,32,32,32,66,101,32, + 112,114,101,112,97,114,101,100,32,116,111,32,104,97,110,100, + 108,101,32,97,32,70,105,108,101,69,120,105,115,116,115,69, + 114,114,111,114,32,105,102,32,99,111,110,99,117,114,114,101, + 110,116,32,119,114,105,116,105,110,103,32,111,102,32,116,104, + 101,10,32,32,32,32,116,101,109,112,111,114,97,114,121,32, + 102,105,108,101,32,105,115,32,97,116,116,101,109,112,116,101, + 100,46,122,5,123,125,46,123,125,105,182,1,0,0,90,2, + 119,98,78,41,13,218,6,102,111,114,109,97,116,218,2,105, + 100,114,3,0,0,0,90,4,111,112,101,110,90,6,79,95, + 69,88,67,76,90,7,79,95,67,82,69,65,84,90,8,79, + 95,87,82,79,78,76,89,218,3,95,105,111,218,6,70,105, + 108,101,73,79,218,5,119,114,105,116,101,218,7,114,101,112, + 108,97,99,101,114,40,0,0,0,90,6,117,110,108,105,110, + 107,41,6,114,35,0,0,0,218,4,100,97,116,97,114,42, + 0,0,0,90,8,112,97,116,104,95,116,109,112,90,2,102, + 100,218,4,102,105,108,101,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,13,95,119,114,105,116,101,95,97, + 116,111,109,105,99,99,0,0,0,115,26,0,0,0,0,5, + 24,1,9,1,33,1,3,3,21,1,19,1,20,1,13,1, + 3,1,17,1,13,1,5,1,114,55,0,0,0,99,2,0, + 0,0,0,0,0,0,3,0,0,0,7,0,0,0,67,0, + 0,0,115,92,0,0,0,120,66,0,100,1,0,100,2,0, + 100,3,0,100,4,0,103,4,0,68,93,46,0,125,2,0, + 116,0,0,124,1,0,124,2,0,131,2,0,114,19,0,116, + 1,0,124,0,0,124,2,0,116,2,0,124,1,0,124,2, + 0,131,2,0,131,3,0,1,113,19,0,87,124,0,0,106, + 3,0,106,4,0,124,1,0,106,3,0,131,1,0,1,100, + 5,0,83,41,6,122,47,83,105,109,112,108,101,32,115,117, + 98,115,116,105,116,117,116,101,32,102,111,114,32,102,117,110, + 99,116,111,111,108,115,46,117,112,100,97,116,101,95,119,114, + 97,112,112,101,114,46,218,10,95,95,109,111,100,117,108,101, + 95,95,218,8,95,95,110,97,109,101,95,95,218,12,95,95, + 113,117,97,108,110,97,109,101,95,95,218,7,95,95,100,111, + 99,95,95,78,41,5,218,7,104,97,115,97,116,116,114,218, + 7,115,101,116,97,116,116,114,218,7,103,101,116,97,116,116, + 114,218,8,95,95,100,105,99,116,95,95,218,6,117,112,100, + 97,116,101,41,3,90,3,110,101,119,90,3,111,108,100,114, + 52,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,5,95,119,114,97,112,121,0,0,0,115,8, + 0,0,0,0,2,25,1,15,1,29,1,114,65,0,0,0, + 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, + 0,67,0,0,0,115,16,0,0,0,116,0,0,116,1,0, + 131,1,0,124,0,0,131,1,0,83,41,1,78,41,2,218, + 4,116,121,112,101,114,7,0,0,0,41,1,218,4,110,97, + 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,11,95,110,101,119,95,109,111,100,117,108,101,129,0, + 0,0,115,2,0,0,0,0,1,114,68,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, + 0,0,0,115,58,0,0,0,101,0,0,90,1,0,100,0, + 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, + 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, + 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, + 0,83,41,9,218,13,95,77,97,110,97,103,101,82,101,108, + 111,97,100,122,63,77,97,110,97,103,101,115,32,116,104,101, + 32,112,111,115,115,105,98,108,101,32,99,108,101,97,110,45, + 117,112,32,111,102,32,115,121,115,46,109,111,100,117,108,101, + 115,32,102,111,114,32,108,111,97,100,95,109,111,100,117,108, + 101,40,41,46,99,2,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,13,0,0,0,124,1, + 0,124,0,0,95,0,0,100,0,0,83,41,1,78,41,1, + 218,5,95,110,97,109,101,41,2,218,4,115,101,108,102,114, 67,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,72,0,0,0,172,0,0,0,115,12,0,0, - 0,0,1,15,1,15,1,9,1,9,1,9,1,122,20,95, - 77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105, - 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, - 2,0,0,0,67,0,0,0,115,88,0,0,0,116,0,0, - 106,1,0,131,0,0,125,1,0,124,0,0,106,2,0,125, - 2,0,120,60,0,116,3,0,106,4,0,124,2,0,131,1, - 0,125,3,0,124,3,0,100,0,0,107,8,0,114,55,0, - 100,1,0,83,124,3,0,106,2,0,125,2,0,124,2,0, - 124,1,0,107,2,0,114,24,0,100,2,0,83,113,24,0, - 87,100,0,0,83,41,3,78,70,84,41,5,114,85,0,0, - 0,218,9,103,101,116,95,105,100,101,110,116,114,88,0,0, - 0,218,12,95,98,108,111,99,107,105,110,103,95,111,110,218, - 3,103,101,116,41,4,114,71,0,0,0,218,2,109,101,218, - 3,116,105,100,114,86,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,12,104,97,115,95,100,101, - 97,100,108,111,99,107,180,0,0,0,115,18,0,0,0,0, - 2,12,1,9,1,3,1,15,1,12,1,4,1,9,1,12, - 1,122,24,95,77,111,100,117,108,101,76,111,99,107,46,104, - 97,115,95,100,101,97,100,108,111,99,107,99,1,0,0,0, - 0,0,0,0,2,0,0,0,16,0,0,0,67,0,0,0, - 115,215,0,0,0,116,0,0,106,1,0,131,0,0,125,1, - 0,124,0,0,116,2,0,124,1,0,60,122,178,0,120,171, - 0,124,0,0,106,3,0,143,130,0,1,124,0,0,106,4, - 0,100,1,0,107,2,0,115,68,0,124,0,0,106,5,0, - 124,1,0,107,2,0,114,96,0,124,1,0,124,0,0,95, - 5,0,124,0,0,4,106,4,0,100,2,0,55,2,95,4, - 0,100,3,0,83,124,0,0,106,6,0,131,0,0,114,127, - 0,116,7,0,100,4,0,124,0,0,22,131,1,0,130,1, - 0,110,0,0,124,0,0,106,8,0,106,9,0,100,5,0, - 131,1,0,114,163,0,124,0,0,4,106,10,0,100,2,0, - 55,2,95,10,0,110,0,0,87,100,6,0,81,88,124,0, - 0,106,8,0,106,9,0,131,0,0,1,124,0,0,106,8, - 0,106,11,0,131,0,0,1,113,28,0,87,87,100,6,0, - 116,2,0,124,1,0,61,88,100,6,0,83,41,7,122,185, - 10,32,32,32,32,32,32,32,32,65,99,113,117,105,114,101, - 32,116,104,101,32,109,111,100,117,108,101,32,108,111,99,107, - 46,32,32,73,102,32,97,32,112,111,116,101,110,116,105,97, - 108,32,100,101,97,100,108,111,99,107,32,105,115,32,100,101, - 116,101,99,116,101,100,44,10,32,32,32,32,32,32,32,32, - 97,32,95,68,101,97,100,108,111,99,107,69,114,114,111,114, - 32,105,115,32,114,97,105,115,101,100,46,10,32,32,32,32, - 32,32,32,32,79,116,104,101,114,119,105,115,101,44,32,116, - 104,101,32,108,111,99,107,32,105,115,32,97,108,119,97,121, - 115,32,97,99,113,117,105,114,101,100,32,97,110,100,32,84, - 114,117,101,32,105,115,32,114,101,116,117,114,110,101,100,46, - 10,32,32,32,32,32,32,32,32,114,84,0,0,0,114,29, - 0,0,0,84,122,23,100,101,97,100,108,111,99,107,32,100, - 101,116,101,99,116,101,100,32,98,121,32,37,114,70,78,41, - 12,114,85,0,0,0,114,91,0,0,0,114,92,0,0,0, - 114,86,0,0,0,114,89,0,0,0,114,88,0,0,0,114, - 96,0,0,0,114,82,0,0,0,114,87,0,0,0,218,7, - 97,99,113,117,105,114,101,114,90,0,0,0,218,7,114,101, - 108,101,97,115,101,41,2,114,71,0,0,0,114,95,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,97,0,0,0,192,0,0,0,115,32,0,0,0,0,6, - 12,1,10,1,3,1,3,1,10,1,30,1,9,1,15,1, - 4,1,12,1,19,1,18,1,24,2,13,1,21,2,122,19, - 95,77,111,100,117,108,101,76,111,99,107,46,97,99,113,117, - 105,114,101,99,1,0,0,0,0,0,0,0,2,0,0,0, - 10,0,0,0,67,0,0,0,115,165,0,0,0,116,0,0, - 106,1,0,131,0,0,125,1,0,124,0,0,106,2,0,143, - 138,0,1,124,0,0,106,3,0,124,1,0,107,3,0,114, - 52,0,116,4,0,100,1,0,131,1,0,130,1,0,110,0, - 0,124,0,0,106,5,0,100,2,0,107,4,0,115,73,0, - 116,6,0,130,1,0,124,0,0,4,106,5,0,100,3,0, - 56,2,95,5,0,124,0,0,106,5,0,100,2,0,107,2, - 0,114,155,0,100,0,0,124,0,0,95,3,0,124,0,0, - 106,7,0,114,155,0,124,0,0,4,106,7,0,100,3,0, - 56,2,95,7,0,124,0,0,106,8,0,106,9,0,131,0, - 0,1,113,155,0,110,0,0,87,100,0,0,81,88,100,0, - 0,83,41,4,78,122,31,99,97,110,110,111,116,32,114,101, - 108,101,97,115,101,32,117,110,45,97,99,113,117,105,114,101, - 100,32,108,111,99,107,114,84,0,0,0,114,29,0,0,0, - 41,10,114,85,0,0,0,114,91,0,0,0,114,86,0,0, - 0,114,88,0,0,0,218,12,82,117,110,116,105,109,101,69, - 114,114,111,114,114,89,0,0,0,218,14,65,115,115,101,114, - 116,105,111,110,69,114,114,111,114,114,90,0,0,0,114,87, - 0,0,0,114,98,0,0,0,41,2,114,71,0,0,0,114, - 95,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,98,0,0,0,217,0,0,0,115,22,0,0, - 0,0,1,12,1,10,1,15,1,15,1,21,1,15,1,15, - 1,9,1,9,1,15,1,122,19,95,77,111,100,117,108,101, - 76,111,99,107,46,114,101,108,101,97,115,101,99,1,0,0, - 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0, - 0,115,25,0,0,0,100,1,0,106,0,0,124,0,0,106, - 1,0,116,2,0,124,0,0,131,1,0,131,2,0,83,41, - 2,78,122,23,95,77,111,100,117,108,101,76,111,99,107,40, - 123,33,114,125,41,32,97,116,32,123,125,41,3,114,47,0, - 0,0,114,67,0,0,0,114,48,0,0,0,41,1,114,71, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,8,95,95,114,101,112,114,95,95,230,0,0,0, - 115,2,0,0,0,0,1,122,20,95,77,111,100,117,108,101, - 76,111,99,107,46,95,95,114,101,112,114,95,95,78,41,9, - 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, - 59,0,0,0,114,72,0,0,0,114,96,0,0,0,114,97, - 0,0,0,114,98,0,0,0,114,101,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,83,0,0,0,166,0,0,0,115,12,0,0,0,12, - 4,6,2,12,8,12,12,12,25,12,13,114,83,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,64,0,0,0,115,70,0,0,0,101,0,0,90,1,0, - 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, - 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, - 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, - 100,8,0,100,9,0,132,0,0,90,7,0,100,10,0,83, - 41,11,218,16,95,68,117,109,109,121,77,111,100,117,108,101, - 76,111,99,107,122,86,65,32,115,105,109,112,108,101,32,95, - 77,111,100,117,108,101,76,111,99,107,32,101,113,117,105,118, - 97,108,101,110,116,32,102,111,114,32,80,121,116,104,111,110, - 32,98,117,105,108,100,115,32,119,105,116,104,111,117,116,10, - 32,32,32,32,109,117,108,116,105,45,116,104,114,101,97,100, - 105,110,103,32,115,117,112,112,111,114,116,46,99,2,0,0, - 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, - 0,115,22,0,0,0,124,1,0,124,0,0,95,0,0,100, - 1,0,124,0,0,95,1,0,100,0,0,83,41,2,78,114, - 84,0,0,0,41,2,114,67,0,0,0,114,89,0,0,0, + 0,0,0,218,8,95,95,105,110,105,116,95,95,141,0,0, + 0,115,2,0,0,0,0,1,122,22,95,77,97,110,97,103, + 101,82,101,108,111,97,100,46,95,95,105,110,105,116,95,95, + 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, + 0,67,0,0,0,115,25,0,0,0,124,0,0,106,0,0, + 116,1,0,106,2,0,107,6,0,124,0,0,95,3,0,100, + 0,0,83,41,1,78,41,4,114,70,0,0,0,114,7,0, + 0,0,218,7,109,111,100,117,108,101,115,218,10,95,105,115, + 95,114,101,108,111,97,100,41,1,114,71,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,9,95, + 95,101,110,116,101,114,95,95,144,0,0,0,115,2,0,0, + 0,0,1,122,23,95,77,97,110,97,103,101,82,101,108,111, + 97,100,46,95,95,101,110,116,101,114,95,95,99,1,0,0, + 0,0,0,0,0,2,0,0,0,11,0,0,0,71,0,0, + 0,115,77,0,0,0,116,0,0,100,1,0,100,2,0,132, + 0,0,124,1,0,68,131,1,0,131,1,0,114,73,0,124, + 0,0,106,1,0,12,114,73,0,121,17,0,116,2,0,106, + 3,0,124,0,0,106,4,0,61,87,110,18,0,4,116,5, + 0,107,10,0,114,72,0,1,1,1,89,110,1,0,88,100, + 0,0,83,41,3,78,99,1,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,115,0,0,0,115,27,0,0,0, + 124,0,0,93,17,0,125,1,0,124,1,0,100,0,0,107, + 9,0,86,1,113,3,0,100,0,0,83,41,1,78,114,4, + 0,0,0,41,2,114,22,0,0,0,218,3,97,114,103,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,250,9, + 60,103,101,110,101,120,112,114,62,148,0,0,0,115,2,0, + 0,0,6,0,122,41,95,77,97,110,97,103,101,82,101,108, + 111,97,100,46,95,95,101,120,105,116,95,95,46,60,108,111, + 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,41, + 6,218,3,97,110,121,114,74,0,0,0,114,7,0,0,0, + 114,73,0,0,0,114,70,0,0,0,218,8,75,101,121,69, + 114,114,111,114,41,2,114,71,0,0,0,218,4,97,114,103, + 115,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,8,95,95,101,120,105,116,95,95,147,0,0,0,115,10, + 0,0,0,0,1,35,1,3,1,17,1,13,1,122,22,95, + 77,97,110,97,103,101,82,101,108,111,97,100,46,95,95,101, + 120,105,116,95,95,78,41,7,114,57,0,0,0,114,56,0, + 0,0,114,58,0,0,0,114,59,0,0,0,114,72,0,0, + 0,114,75,0,0,0,114,81,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 69,0,0,0,137,0,0,0,115,8,0,0,0,12,2,6, + 2,12,3,12,3,114,69,0,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,64,0,0,0,115, + 16,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, + 100,1,0,83,41,2,218,14,95,68,101,97,100,108,111,99, + 107,69,114,114,111,114,78,41,3,114,57,0,0,0,114,56, + 0,0,0,114,58,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,82,0,0, + 0,162,0,0,0,115,2,0,0,0,12,1,114,82,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,64,0,0,0,115,82,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, + 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, + 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, + 0,100,8,0,100,9,0,132,0,0,90,7,0,100,10,0, + 100,11,0,132,0,0,90,8,0,100,12,0,83,41,13,218, + 11,95,77,111,100,117,108,101,76,111,99,107,122,169,65,32, + 114,101,99,117,114,115,105,118,101,32,108,111,99,107,32,105, + 109,112,108,101,109,101,110,116,97,116,105,111,110,32,119,104, + 105,99,104,32,105,115,32,97,98,108,101,32,116,111,32,100, + 101,116,101,99,116,32,100,101,97,100,108,111,99,107,115,10, + 32,32,32,32,40,101,46,103,46,32,116,104,114,101,97,100, + 32,49,32,116,114,121,105,110,103,32,116,111,32,116,97,107, + 101,32,108,111,99,107,115,32,65,32,116,104,101,110,32,66, + 44,32,97,110,100,32,116,104,114,101,97,100,32,50,32,116, + 114,121,105,110,103,32,116,111,10,32,32,32,32,116,97,107, + 101,32,108,111,99,107,115,32,66,32,116,104,101,110,32,65, + 41,46,10,32,32,32,32,99,2,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,70,0,0, + 0,116,0,0,106,1,0,131,0,0,124,0,0,95,2,0, + 116,0,0,106,1,0,131,0,0,124,0,0,95,3,0,124, + 1,0,124,0,0,95,4,0,100,0,0,124,0,0,95,5, + 0,100,1,0,124,0,0,95,6,0,100,1,0,124,0,0, + 95,7,0,100,0,0,83,41,2,78,233,0,0,0,0,41, + 8,218,7,95,116,104,114,101,97,100,90,13,97,108,108,111, + 99,97,116,101,95,108,111,99,107,218,4,108,111,99,107,218, + 6,119,97,107,101,117,112,114,67,0,0,0,218,5,111,119, + 110,101,114,218,5,99,111,117,110,116,218,7,119,97,105,116, + 101,114,115,41,2,114,71,0,0,0,114,67,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,72, + 0,0,0,172,0,0,0,115,12,0,0,0,0,1,15,1, + 15,1,9,1,9,1,9,1,122,20,95,77,111,100,117,108, + 101,76,111,99,107,46,95,95,105,110,105,116,95,95,99,1, + 0,0,0,0,0,0,0,4,0,0,0,2,0,0,0,67, + 0,0,0,115,88,0,0,0,116,0,0,106,1,0,131,0, + 0,125,1,0,124,0,0,106,2,0,125,2,0,120,60,0, + 116,3,0,106,4,0,124,2,0,131,1,0,125,3,0,124, + 3,0,100,0,0,107,8,0,114,55,0,100,1,0,83,124, + 3,0,106,2,0,125,2,0,124,2,0,124,1,0,107,2, + 0,114,24,0,100,2,0,83,113,24,0,87,100,0,0,83, + 41,3,78,70,84,41,5,114,85,0,0,0,218,9,103,101, + 116,95,105,100,101,110,116,114,88,0,0,0,218,12,95,98, + 108,111,99,107,105,110,103,95,111,110,218,3,103,101,116,41, + 4,114,71,0,0,0,218,2,109,101,218,3,116,105,100,114, + 86,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,12,104,97,115,95,100,101,97,100,108,111,99, + 107,180,0,0,0,115,18,0,0,0,0,2,12,1,9,1, + 3,1,15,1,12,1,4,1,9,1,12,1,122,24,95,77, + 111,100,117,108,101,76,111,99,107,46,104,97,115,95,100,101, + 97,100,108,111,99,107,99,1,0,0,0,0,0,0,0,2, + 0,0,0,16,0,0,0,67,0,0,0,115,209,0,0,0, + 116,0,0,106,1,0,131,0,0,125,1,0,124,0,0,116, + 2,0,124,1,0,60,122,172,0,120,165,0,124,0,0,106, + 3,0,143,124,0,1,124,0,0,106,4,0,100,1,0,107, + 2,0,115,68,0,124,0,0,106,5,0,124,1,0,107,2, + 0,114,96,0,124,1,0,124,0,0,95,5,0,124,0,0, + 4,106,4,0,100,2,0,55,2,95,4,0,100,3,0,83, + 124,0,0,106,6,0,131,0,0,114,124,0,116,7,0,100, + 4,0,124,0,0,22,131,1,0,130,1,0,124,0,0,106, + 8,0,106,9,0,100,5,0,131,1,0,114,157,0,124,0, + 0,4,106,10,0,100,2,0,55,2,95,10,0,87,100,6, + 0,81,88,124,0,0,106,8,0,106,9,0,131,0,0,1, + 124,0,0,106,8,0,106,11,0,131,0,0,1,113,28,0, + 87,87,100,6,0,116,2,0,124,1,0,61,88,100,6,0, + 83,41,7,122,185,10,32,32,32,32,32,32,32,32,65,99, + 113,117,105,114,101,32,116,104,101,32,109,111,100,117,108,101, + 32,108,111,99,107,46,32,32,73,102,32,97,32,112,111,116, + 101,110,116,105,97,108,32,100,101,97,100,108,111,99,107,32, + 105,115,32,100,101,116,101,99,116,101,100,44,10,32,32,32, + 32,32,32,32,32,97,32,95,68,101,97,100,108,111,99,107, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, + 10,32,32,32,32,32,32,32,32,79,116,104,101,114,119,105, + 115,101,44,32,116,104,101,32,108,111,99,107,32,105,115,32, + 97,108,119,97,121,115,32,97,99,113,117,105,114,101,100,32, + 97,110,100,32,84,114,117,101,32,105,115,32,114,101,116,117, + 114,110,101,100,46,10,32,32,32,32,32,32,32,32,114,84, + 0,0,0,114,29,0,0,0,84,122,23,100,101,97,100,108, + 111,99,107,32,100,101,116,101,99,116,101,100,32,98,121,32, + 37,114,70,78,41,12,114,85,0,0,0,114,91,0,0,0, + 114,92,0,0,0,114,86,0,0,0,114,89,0,0,0,114, + 88,0,0,0,114,96,0,0,0,114,82,0,0,0,114,87, + 0,0,0,218,7,97,99,113,117,105,114,101,114,90,0,0, + 0,218,7,114,101,108,101,97,115,101,41,2,114,71,0,0, + 0,114,95,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,97,0,0,0,192,0,0,0,115,32, + 0,0,0,0,6,12,1,10,1,3,1,3,1,10,1,30, + 1,9,1,15,1,4,1,12,1,16,1,18,1,21,2,13, + 1,21,2,122,19,95,77,111,100,117,108,101,76,111,99,107, + 46,97,99,113,117,105,114,101,99,1,0,0,0,0,0,0, + 0,2,0,0,0,10,0,0,0,67,0,0,0,115,156,0, + 0,0,116,0,0,106,1,0,131,0,0,125,1,0,124,0, + 0,106,2,0,143,129,0,1,124,0,0,106,3,0,124,1, + 0,107,3,0,114,49,0,116,4,0,100,1,0,131,1,0, + 130,1,0,124,0,0,106,5,0,100,2,0,107,4,0,115, + 70,0,116,6,0,130,1,0,124,0,0,4,106,5,0,100, + 3,0,56,2,95,5,0,124,0,0,106,5,0,100,2,0, + 107,2,0,114,146,0,100,0,0,124,0,0,95,3,0,124, + 0,0,106,7,0,114,146,0,124,0,0,4,106,7,0,100, + 3,0,56,2,95,7,0,124,0,0,106,8,0,106,9,0, + 131,0,0,1,87,100,0,0,81,88,100,0,0,83,41,4, + 78,122,31,99,97,110,110,111,116,32,114,101,108,101,97,115, + 101,32,117,110,45,97,99,113,117,105,114,101,100,32,108,111, + 99,107,114,84,0,0,0,114,29,0,0,0,41,10,114,85, + 0,0,0,114,91,0,0,0,114,86,0,0,0,114,88,0, + 0,0,218,12,82,117,110,116,105,109,101,69,114,114,111,114, + 114,89,0,0,0,218,14,65,115,115,101,114,116,105,111,110, + 69,114,114,111,114,114,90,0,0,0,114,87,0,0,0,114, + 98,0,0,0,41,2,114,71,0,0,0,114,95,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 98,0,0,0,217,0,0,0,115,22,0,0,0,0,1,12, + 1,10,1,15,1,12,1,21,1,15,1,15,1,9,1,9, + 1,15,1,122,19,95,77,111,100,117,108,101,76,111,99,107, + 46,114,101,108,101,97,115,101,99,1,0,0,0,0,0,0, + 0,1,0,0,0,4,0,0,0,67,0,0,0,115,25,0, + 0,0,100,1,0,106,0,0,124,0,0,106,1,0,116,2, + 0,124,0,0,131,1,0,131,2,0,83,41,2,78,122,23, + 95,77,111,100,117,108,101,76,111,99,107,40,123,33,114,125, + 41,32,97,116,32,123,125,41,3,114,47,0,0,0,114,67, + 0,0,0,114,48,0,0,0,41,1,114,71,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8, + 95,95,114,101,112,114,95,95,230,0,0,0,115,2,0,0, + 0,0,1,122,20,95,77,111,100,117,108,101,76,111,99,107, + 46,95,95,114,101,112,114,95,95,78,41,9,114,57,0,0, + 0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,0, + 114,72,0,0,0,114,96,0,0,0,114,97,0,0,0,114, + 98,0,0,0,114,101,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,83,0, + 0,0,166,0,0,0,115,12,0,0,0,12,4,6,2,12, + 8,12,12,12,25,12,13,114,83,0,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, + 0,115,70,0,0,0,101,0,0,90,1,0,100,0,0,90, + 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, + 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, + 100,6,0,100,7,0,132,0,0,90,6,0,100,8,0,100, + 9,0,132,0,0,90,7,0,100,10,0,83,41,11,218,16, + 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, + 122,86,65,32,115,105,109,112,108,101,32,95,77,111,100,117, + 108,101,76,111,99,107,32,101,113,117,105,118,97,108,101,110, + 116,32,102,111,114,32,80,121,116,104,111,110,32,98,117,105, + 108,100,115,32,119,105,116,104,111,117,116,10,32,32,32,32, + 109,117,108,116,105,45,116,104,114,101,97,100,105,110,103,32, + 115,117,112,112,111,114,116,46,99,2,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,115,22,0, + 0,0,124,1,0,124,0,0,95,0,0,100,1,0,124,0, + 0,95,1,0,100,0,0,83,41,2,78,114,84,0,0,0, + 41,2,114,67,0,0,0,114,89,0,0,0,41,2,114,71, + 0,0,0,114,67,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,72,0,0,0,238,0,0,0, + 115,4,0,0,0,0,1,9,1,122,25,95,68,117,109,109, + 121,77,111,100,117,108,101,76,111,99,107,46,95,95,105,110, + 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,67,0,0,0,115,19,0,0,0,124,0, + 0,4,106,0,0,100,1,0,55,2,95,0,0,100,2,0, + 83,41,3,78,114,29,0,0,0,84,41,1,114,89,0,0, + 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,97,0,0,0,242,0,0,0, + 115,4,0,0,0,0,1,15,1,122,24,95,68,117,109,109, + 121,77,111,100,117,108,101,76,111,99,107,46,97,99,113,117, + 105,114,101,99,1,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,46,0,0,0,124,0,0, + 106,0,0,100,1,0,107,2,0,114,27,0,116,1,0,100, + 2,0,131,1,0,130,1,0,124,0,0,4,106,0,0,100, + 3,0,56,2,95,0,0,100,0,0,83,41,4,78,114,84, + 0,0,0,122,31,99,97,110,110,111,116,32,114,101,108,101, + 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32, + 108,111,99,107,114,29,0,0,0,41,2,114,89,0,0,0, + 114,99,0,0,0,41,1,114,71,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,98,0,0,0, + 246,0,0,0,115,6,0,0,0,0,1,15,1,12,1,122, + 24,95,68,117,109,109,121,77,111,100,117,108,101,76,111,99, + 107,46,114,101,108,101,97,115,101,99,1,0,0,0,0,0, + 0,0,1,0,0,0,4,0,0,0,67,0,0,0,115,25, + 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,116, + 2,0,124,0,0,131,1,0,131,2,0,83,41,2,78,122, + 28,95,68,117,109,109,121,77,111,100,117,108,101,76,111,99, + 107,40,123,33,114,125,41,32,97,116,32,123,125,41,3,114, + 47,0,0,0,114,67,0,0,0,114,48,0,0,0,41,1, + 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,101,0,0,0,251,0,0,0,115,2,0, + 0,0,0,1,122,25,95,68,117,109,109,121,77,111,100,117, + 108,101,76,111,99,107,46,95,95,114,101,112,114,95,95,78, + 41,8,114,57,0,0,0,114,56,0,0,0,114,58,0,0, + 0,114,59,0,0,0,114,72,0,0,0,114,97,0,0,0, + 114,98,0,0,0,114,101,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,102, + 0,0,0,234,0,0,0,115,10,0,0,0,12,2,6,2, + 12,4,12,4,12,5,114,102,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, + 115,52,0,0,0,101,0,0,90,1,0,100,0,0,90,2, + 0,100,1,0,100,2,0,132,0,0,90,3,0,100,3,0, + 100,4,0,132,0,0,90,4,0,100,5,0,100,6,0,132, + 0,0,90,5,0,100,7,0,83,41,8,218,18,95,77,111, + 100,117,108,101,76,111,99,107,77,97,110,97,103,101,114,99, + 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, + 67,0,0,0,115,22,0,0,0,124,1,0,124,0,0,95, + 0,0,100,0,0,124,0,0,95,1,0,100,0,0,83,41, + 1,78,41,2,114,70,0,0,0,218,5,95,108,111,99,107, 41,2,114,71,0,0,0,114,67,0,0,0,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,114,72,0,0,0, - 238,0,0,0,115,4,0,0,0,0,1,9,1,122,25,95, - 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,46, - 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, - 0,1,0,0,0,3,0,0,0,67,0,0,0,115,19,0, - 0,0,124,0,0,4,106,0,0,100,1,0,55,2,95,0, - 0,100,2,0,83,41,3,78,114,29,0,0,0,84,41,1, - 114,89,0,0,0,41,1,114,71,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,97,0,0,0, - 242,0,0,0,115,4,0,0,0,0,1,15,1,122,24,95, - 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,46, - 97,99,113,117,105,114,101,99,1,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,115,49,0,0, - 0,124,0,0,106,0,0,100,1,0,107,2,0,114,30,0, - 116,1,0,100,2,0,131,1,0,130,1,0,110,0,0,124, - 0,0,4,106,0,0,100,3,0,56,2,95,0,0,100,0, - 0,83,41,4,78,114,84,0,0,0,122,31,99,97,110,110, - 111,116,32,114,101,108,101,97,115,101,32,117,110,45,97,99, - 113,117,105,114,101,100,32,108,111,99,107,114,29,0,0,0, - 41,2,114,89,0,0,0,114,99,0,0,0,41,1,114,71, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,98,0,0,0,246,0,0,0,115,6,0,0,0, - 0,1,15,1,15,1,122,24,95,68,117,109,109,121,77,111, - 100,117,108,101,76,111,99,107,46,114,101,108,101,97,115,101, - 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,67,0,0,0,115,25,0,0,0,100,1,0,106,0,0, - 124,0,0,106,1,0,116,2,0,124,0,0,131,1,0,131, - 2,0,83,41,2,78,122,28,95,68,117,109,109,121,77,111, - 100,117,108,101,76,111,99,107,40,123,33,114,125,41,32,97, - 116,32,123,125,41,3,114,47,0,0,0,114,67,0,0,0, - 114,48,0,0,0,41,1,114,71,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,101,0,0,0, - 251,0,0,0,115,2,0,0,0,0,1,122,25,95,68,117, - 109,109,121,77,111,100,117,108,101,76,111,99,107,46,95,95, - 114,101,112,114,95,95,78,41,8,114,57,0,0,0,114,56, - 0,0,0,114,58,0,0,0,114,59,0,0,0,114,72,0, - 0,0,114,97,0,0,0,114,98,0,0,0,114,101,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,102,0,0,0,234,0,0,0,115,10, - 0,0,0,12,2,6,2,12,4,12,4,12,5,114,102,0, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,64,0,0,0,115,52,0,0,0,101,0,0,90, - 1,0,100,0,0,90,2,0,100,1,0,100,2,0,132,0, - 0,90,3,0,100,3,0,100,4,0,132,0,0,90,4,0, - 100,5,0,100,6,0,132,0,0,90,5,0,100,7,0,83, - 41,8,218,18,95,77,111,100,117,108,101,76,111,99,107,77, - 97,110,97,103,101,114,99,2,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,22,0,0,0, - 124,1,0,124,0,0,95,0,0,100,0,0,124,0,0,95, - 1,0,100,0,0,83,41,1,78,41,2,114,70,0,0,0, - 218,5,95,108,111,99,107,41,2,114,71,0,0,0,114,67, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,72,0,0,0,1,1,0,0,115,4,0,0,0, - 0,1,9,1,122,27,95,77,111,100,117,108,101,76,111,99, - 107,77,97,110,97,103,101,114,46,95,95,105,110,105,116,95, - 95,99,1,0,0,0,0,0,0,0,1,0,0,0,10,0, - 0,0,67,0,0,0,115,53,0,0,0,122,22,0,116,0, - 0,124,0,0,106,1,0,131,1,0,124,0,0,95,2,0, - 87,100,0,0,116,3,0,106,4,0,131,0,0,1,88,124, - 0,0,106,2,0,106,5,0,131,0,0,1,100,0,0,83, - 41,1,78,41,6,218,16,95,103,101,116,95,109,111,100,117, - 108,101,95,108,111,99,107,114,70,0,0,0,114,104,0,0, - 0,218,4,95,105,109,112,218,12,114,101,108,101,97,115,101, - 95,108,111,99,107,114,97,0,0,0,41,1,114,71,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,75,0,0,0,5,1,0,0,115,8,0,0,0,0,1, - 3,1,22,2,11,1,122,28,95,77,111,100,117,108,101,76, - 111,99,107,77,97,110,97,103,101,114,46,95,95,101,110,116, - 101,114,95,95,99,1,0,0,0,0,0,0,0,3,0,0, - 0,1,0,0,0,79,0,0,0,115,17,0,0,0,124,0, - 0,106,0,0,106,1,0,131,0,0,1,100,0,0,83,41, - 1,78,41,2,114,104,0,0,0,114,98,0,0,0,41,3, - 114,71,0,0,0,114,80,0,0,0,218,6,107,119,97,114, - 103,115,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,81,0,0,0,12,1,0,0,115,2,0,0,0,0, - 1,122,27,95,77,111,100,117,108,101,76,111,99,107,77,97, - 110,97,103,101,114,46,95,95,101,120,105,116,95,95,78,41, - 6,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, - 114,72,0,0,0,114,75,0,0,0,114,81,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,103,0,0,0,255,0,0,0,115,6,0,0, - 0,12,2,12,4,12,7,114,103,0,0,0,99,1,0,0, - 0,0,0,0,0,3,0,0,0,11,0,0,0,3,0,0, - 0,115,142,0,0,0,100,1,0,125,1,0,121,17,0,116, - 0,0,136,0,0,25,131,0,0,125,1,0,87,110,18,0, - 4,116,1,0,107,10,0,114,43,0,1,1,1,89,110,1, - 0,88,124,1,0,100,1,0,107,8,0,114,138,0,116,2, - 0,100,1,0,107,8,0,114,83,0,116,3,0,136,0,0, - 131,1,0,125,1,0,110,12,0,116,4,0,136,0,0,131, - 1,0,125,1,0,135,0,0,102,1,0,100,2,0,100,3, - 0,134,0,0,125,2,0,116,5,0,106,6,0,124,1,0, - 124,2,0,131,2,0,116,0,0,136,0,0,60,110,0,0, - 124,1,0,83,41,4,122,109,71,101,116,32,111,114,32,99, - 114,101,97,116,101,32,116,104,101,32,109,111,100,117,108,101, - 32,108,111,99,107,32,102,111,114,32,97,32,103,105,118,101, - 110,32,109,111,100,117,108,101,32,110,97,109,101,46,10,10, - 32,32,32,32,83,104,111,117,108,100,32,111,110,108,121,32, - 98,101,32,99,97,108,108,101,100,32,119,105,116,104,32,116, - 104,101,32,105,109,112,111,114,116,32,108,111,99,107,32,116, - 97,107,101,110,46,78,99,1,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,19,0,0,0,115,11,0,0,0, - 116,0,0,136,0,0,61,100,0,0,83,41,1,78,41,1, - 218,13,95,109,111,100,117,108,101,95,108,111,99,107,115,41, - 1,114,36,0,0,0,41,1,114,67,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,2,99,98,32,1,0,0,115, - 2,0,0,0,0,1,122,28,95,103,101,116,95,109,111,100, - 117,108,101,95,108,111,99,107,46,60,108,111,99,97,108,115, - 62,46,99,98,41,7,114,109,0,0,0,114,79,0,0,0, - 114,85,0,0,0,114,102,0,0,0,114,83,0,0,0,218, - 8,95,119,101,97,107,114,101,102,90,3,114,101,102,41,3, - 114,67,0,0,0,114,86,0,0,0,114,110,0,0,0,114, - 4,0,0,0,41,1,114,67,0,0,0,114,5,0,0,0, - 114,105,0,0,0,18,1,0,0,115,24,0,0,0,0,4, - 6,1,3,1,17,1,13,1,5,1,12,1,12,1,15,2, - 12,1,18,2,25,1,114,105,0,0,0,99,1,0,0,0, - 0,0,0,0,2,0,0,0,11,0,0,0,67,0,0,0, - 115,71,0,0,0,116,0,0,124,0,0,131,1,0,125,1, - 0,116,1,0,106,2,0,131,0,0,1,121,14,0,124,1, - 0,106,3,0,131,0,0,1,87,110,18,0,4,116,4,0, - 107,10,0,114,56,0,1,1,1,89,110,11,0,88,124,1, - 0,106,5,0,131,0,0,1,100,1,0,83,41,2,97,21, - 1,0,0,82,101,108,101,97,115,101,32,116,104,101,32,103, - 108,111,98,97,108,32,105,109,112,111,114,116,32,108,111,99, - 107,44,32,97,110,100,32,97,99,113,117,105,114,101,115,32, - 116,104,101,110,32,114,101,108,101,97,115,101,32,116,104,101, - 10,32,32,32,32,109,111,100,117,108,101,32,108,111,99,107, - 32,102,111,114,32,97,32,103,105,118,101,110,32,109,111,100, - 117,108,101,32,110,97,109,101,46,10,32,32,32,32,84,104, - 105,115,32,105,115,32,117,115,101,100,32,116,111,32,101,110, - 115,117,114,101,32,97,32,109,111,100,117,108,101,32,105,115, - 32,99,111,109,112,108,101,116,101,108,121,32,105,110,105,116, - 105,97,108,105,122,101,100,44,32,105,110,32,116,104,101,10, - 32,32,32,32,101,118,101,110,116,32,105,116,32,105,115,32, - 98,101,105,110,103,32,105,109,112,111,114,116,101,100,32,98, - 121,32,97,110,111,116,104,101,114,32,116,104,114,101,97,100, - 46,10,10,32,32,32,32,83,104,111,117,108,100,32,111,110, - 108,121,32,98,101,32,99,97,108,108,101,100,32,119,105,116, - 104,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, - 107,32,116,97,107,101,110,46,78,41,6,114,105,0,0,0, - 114,106,0,0,0,114,107,0,0,0,114,97,0,0,0,114, - 82,0,0,0,114,98,0,0,0,41,2,114,67,0,0,0, - 114,86,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,19,95,108,111,99,107,95,117,110,108,111, - 99,107,95,109,111,100,117,108,101,37,1,0,0,115,14,0, - 0,0,0,7,12,1,10,1,3,1,14,1,13,3,5,2, - 114,112,0,0,0,99,1,0,0,0,0,0,0,0,3,0, - 0,0,3,0,0,0,79,0,0,0,115,13,0,0,0,124, - 0,0,124,1,0,124,2,0,142,0,0,83,41,1,97,46, - 1,0,0,114,101,109,111,118,101,95,105,109,112,111,114,116, - 108,105,98,95,102,114,97,109,101,115,32,105,110,32,105,109, - 112,111,114,116,46,99,32,119,105,108,108,32,97,108,119,97, - 121,115,32,114,101,109,111,118,101,32,115,101,113,117,101,110, - 99,101,115,10,32,32,32,32,111,102,32,105,109,112,111,114, - 116,108,105,98,32,102,114,97,109,101,115,32,116,104,97,116, - 32,101,110,100,32,119,105,116,104,32,97,32,99,97,108,108, - 32,116,111,32,116,104,105,115,32,102,117,110,99,116,105,111, - 110,10,10,32,32,32,32,85,115,101,32,105,116,32,105,110, - 115,116,101,97,100,32,111,102,32,97,32,110,111,114,109,97, - 108,32,99,97,108,108,32,105,110,32,112,108,97,99,101,115, - 32,119,104,101,114,101,32,105,110,99,108,117,100,105,110,103, - 32,116,104,101,32,105,109,112,111,114,116,108,105,98,10,32, - 32,32,32,102,114,97,109,101,115,32,105,110,116,114,111,100, - 117,99,101,115,32,117,110,119,97,110,116,101,100,32,110,111, - 105,115,101,32,105,110,116,111,32,116,104,101,32,116,114,97, - 99,101,98,97,99,107,32,40,101,46,103,46,32,119,104,101, - 110,32,101,120,101,99,117,116,105,110,103,10,32,32,32,32, - 109,111,100,117,108,101,32,99,111,100,101,41,10,32,32,32, - 32,114,4,0,0,0,41,3,218,1,102,114,80,0,0,0, - 90,4,107,119,100,115,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,25,95,99,97,108,108,95,119,105,116, - 104,95,102,114,97,109,101,115,95,114,101,109,111,118,101,100, - 57,1,0,0,115,2,0,0,0,0,8,114,114,0,0,0, - 105,238,12,0,0,233,2,0,0,0,114,13,0,0,0,115, - 2,0,0,0,13,10,90,11,95,95,112,121,99,97,99,104, - 101,95,95,122,3,46,112,121,122,4,46,112,121,99,122,4, - 46,112,121,111,78,99,2,0,0,0,0,0,0,0,11,0, - 0,0,6,0,0,0,67,0,0,0,115,192,0,0,0,124, - 1,0,100,1,0,107,8,0,114,25,0,116,0,0,106,1, - 0,106,2,0,12,110,3,0,124,1,0,125,2,0,124,2, - 0,114,46,0,116,3,0,125,3,0,110,6,0,116,4,0, - 125,3,0,116,5,0,124,0,0,131,1,0,92,2,0,125, - 4,0,125,5,0,124,5,0,106,6,0,100,2,0,131,1, - 0,92,3,0,125,6,0,125,7,0,125,8,0,116,0,0, - 106,7,0,106,8,0,125,9,0,124,9,0,100,1,0,107, - 8,0,114,133,0,116,9,0,100,3,0,131,1,0,130,1, - 0,110,0,0,100,4,0,106,10,0,124,6,0,114,151,0, - 124,6,0,110,3,0,124,8,0,124,7,0,124,9,0,124, - 3,0,100,5,0,25,103,4,0,131,1,0,125,10,0,116, - 11,0,124,4,0,116,12,0,124,10,0,131,3,0,83,41, - 6,97,244,1,0,0,71,105,118,101,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,97,32,46,112,121,32,102,105, - 108,101,44,32,114,101,116,117,114,110,32,116,104,101,32,112, - 97,116,104,32,116,111,32,105,116,115,32,46,112,121,99,47, - 46,112,121,111,32,102,105,108,101,46,10,10,32,32,32,32, - 84,104,101,32,46,112,121,32,102,105,108,101,32,100,111,101, - 115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120, - 105,115,116,59,32,116,104,105,115,32,115,105,109,112,108,121, - 32,114,101,116,117,114,110,115,32,116,104,101,32,112,97,116, - 104,32,116,111,32,116,104,101,10,32,32,32,32,46,112,121, - 99,47,46,112,121,111,32,102,105,108,101,32,99,97,108,99, - 117,108,97,116,101,100,32,97,115,32,105,102,32,116,104,101, - 32,46,112,121,32,102,105,108,101,32,119,101,114,101,32,105, - 109,112,111,114,116,101,100,46,32,32,84,104,101,32,101,120, - 116,101,110,115,105,111,110,10,32,32,32,32,119,105,108,108, - 32,98,101,32,46,112,121,99,32,117,110,108,101,115,115,32, - 115,121,115,46,102,108,97,103,115,46,111,112,116,105,109,105, - 122,101,32,105,115,32,110,111,110,45,122,101,114,111,44,32, - 116,104,101,110,32,105,116,32,119,105,108,108,32,98,101,32, - 46,112,121,111,46,10,10,32,32,32,32,73,102,32,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,105,115,32, - 110,111,116,32,78,111,110,101,44,32,116,104,101,110,32,105, - 116,32,109,117,115,116,32,98,101,32,97,32,98,111,111,108, - 101,97,110,32,97,110,100,32,105,115,32,117,115,101,100,32, - 105,110,10,32,32,32,32,112,108,97,99,101,32,111,102,32, - 115,121,115,46,102,108,97,103,115,46,111,112,116,105,109,105, - 122,101,46,10,10,32,32,32,32,73,102,32,115,121,115,46, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,46,99, - 97,99,104,101,95,116,97,103,32,105,115,32,78,111,110,101, - 32,116,104,101,110,32,78,111,116,73,109,112,108,101,109,101, - 110,116,101,100,69,114,114,111,114,32,105,115,32,114,97,105, - 115,101,100,46,10,10,32,32,32,32,78,218,1,46,122,36, - 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, - 78,111,110,101,114,30,0,0,0,114,84,0,0,0,41,13, - 114,7,0,0,0,218,5,102,108,97,103,115,218,8,111,112, - 116,105,109,105,122,101,218,23,68,69,66,85,71,95,66,89, - 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,218, - 27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67, - 79,68,69,95,83,85,70,70,73,88,69,83,114,38,0,0, - 0,114,32,0,0,0,218,14,105,109,112,108,101,109,101,110, - 116,97,116,105,111,110,218,9,99,97,99,104,101,95,116,97, - 103,218,19,78,111,116,73,109,112,108,101,109,101,110,116,101, - 100,69,114,114,111,114,114,26,0,0,0,114,28,0,0,0, - 218,8,95,80,89,67,65,67,72,69,41,11,114,35,0,0, - 0,90,14,100,101,98,117,103,95,111,118,101,114,114,105,100, - 101,218,5,100,101,98,117,103,218,8,115,117,102,102,105,120, - 101,115,218,4,104,101,97,100,114,37,0,0,0,218,4,98, - 97,115,101,218,3,115,101,112,218,4,114,101,115,116,90,3, - 116,97,103,218,8,102,105,108,101,110,97,109,101,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,17,99,97, - 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,181, - 1,0,0,115,22,0,0,0,0,13,31,1,6,1,9,2, - 6,1,18,1,24,1,12,1,12,1,15,1,43,1,114,132, - 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, - 5,0,0,0,67,0,0,0,115,193,0,0,0,116,0,0, - 106,1,0,106,2,0,100,1,0,107,8,0,114,33,0,116, - 3,0,100,2,0,131,1,0,130,1,0,110,0,0,116,4, - 0,124,0,0,131,1,0,92,2,0,125,1,0,125,2,0, - 116,4,0,124,1,0,131,1,0,92,2,0,125,1,0,125, - 3,0,124,3,0,116,5,0,107,3,0,114,108,0,116,6, - 0,100,3,0,106,7,0,116,5,0,124,0,0,131,2,0, - 131,1,0,130,1,0,110,0,0,124,2,0,106,8,0,100, - 4,0,131,1,0,100,5,0,107,3,0,114,153,0,116,6, - 0,100,6,0,106,7,0,124,2,0,131,1,0,131,1,0, - 130,1,0,110,0,0,124,2,0,106,9,0,100,4,0,131, - 1,0,100,7,0,25,125,4,0,116,10,0,124,1,0,124, - 4,0,116,11,0,100,7,0,25,23,131,2,0,83,41,8, - 97,121,1,0,0,71,105,118,101,110,32,116,104,101,32,112, - 97,116,104,32,116,111,32,97,32,46,112,121,99,46,47,46, - 112,121,111,32,102,105,108,101,44,32,114,101,116,117,114,110, - 32,116,104,101,32,112,97,116,104,32,116,111,32,105,116,115, - 32,46,112,121,32,102,105,108,101,46,10,10,32,32,32,32, - 84,104,101,32,46,112,121,99,47,46,112,121,111,32,102,105, + 1,1,0,0,115,4,0,0,0,0,1,9,1,122,27,95, + 77,111,100,117,108,101,76,111,99,107,77,97,110,97,103,101, + 114,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, + 0,0,0,1,0,0,0,10,0,0,0,67,0,0,0,115, + 53,0,0,0,122,22,0,116,0,0,124,0,0,106,1,0, + 131,1,0,124,0,0,95,2,0,87,100,0,0,116,3,0, + 106,4,0,131,0,0,1,88,124,0,0,106,2,0,106,5, + 0,131,0,0,1,100,0,0,83,41,1,78,41,6,218,16, + 95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,107, + 114,70,0,0,0,114,104,0,0,0,218,4,95,105,109,112, + 218,12,114,101,108,101,97,115,101,95,108,111,99,107,114,97, + 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,75,0,0,0,5,1, + 0,0,115,8,0,0,0,0,1,3,1,22,2,11,1,122, + 28,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97, + 103,101,114,46,95,95,101,110,116,101,114,95,95,99,1,0, + 0,0,0,0,0,0,3,0,0,0,1,0,0,0,79,0, + 0,0,115,17,0,0,0,124,0,0,106,0,0,106,1,0, + 131,0,0,1,100,0,0,83,41,1,78,41,2,114,104,0, + 0,0,114,98,0,0,0,41,3,114,71,0,0,0,114,80, + 0,0,0,218,6,107,119,97,114,103,115,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,81,0,0,0,12, + 1,0,0,115,2,0,0,0,0,1,122,27,95,77,111,100, + 117,108,101,76,111,99,107,77,97,110,97,103,101,114,46,95, + 95,101,120,105,116,95,95,78,41,6,114,57,0,0,0,114, + 56,0,0,0,114,58,0,0,0,114,72,0,0,0,114,75, + 0,0,0,114,81,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,103,0,0, + 0,255,0,0,0,115,6,0,0,0,12,2,12,4,12,7, + 114,103,0,0,0,99,1,0,0,0,0,0,0,0,3,0, + 0,0,11,0,0,0,3,0,0,0,115,139,0,0,0,100, + 1,0,125,1,0,121,17,0,116,0,0,136,0,0,25,131, + 0,0,125,1,0,87,110,18,0,4,116,1,0,107,10,0, + 114,43,0,1,1,1,89,110,1,0,88,124,1,0,100,1, + 0,107,8,0,114,135,0,116,2,0,100,1,0,107,8,0, + 114,83,0,116,3,0,136,0,0,131,1,0,125,1,0,110, + 12,0,116,4,0,136,0,0,131,1,0,125,1,0,135,0, + 0,102,1,0,100,2,0,100,3,0,134,0,0,125,2,0, + 116,5,0,106,6,0,124,1,0,124,2,0,131,2,0,116, + 0,0,136,0,0,60,124,1,0,83,41,4,122,109,71,101, + 116,32,111,114,32,99,114,101,97,116,101,32,116,104,101,32, + 109,111,100,117,108,101,32,108,111,99,107,32,102,111,114,32, + 97,32,103,105,118,101,110,32,109,111,100,117,108,101,32,110, + 97,109,101,46,10,10,32,32,32,32,83,104,111,117,108,100, + 32,111,110,108,121,32,98,101,32,99,97,108,108,101,100,32, + 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,32, + 108,111,99,107,32,116,97,107,101,110,46,78,99,1,0,0, + 0,0,0,0,0,1,0,0,0,2,0,0,0,19,0,0, + 0,115,11,0,0,0,116,0,0,136,0,0,61,100,0,0, + 83,41,1,78,41,1,218,13,95,109,111,100,117,108,101,95, + 108,111,99,107,115,41,1,114,36,0,0,0,41,1,114,67, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,2,99, + 98,32,1,0,0,115,2,0,0,0,0,1,122,28,95,103, + 101,116,95,109,111,100,117,108,101,95,108,111,99,107,46,60, + 108,111,99,97,108,115,62,46,99,98,41,7,114,109,0,0, + 0,114,79,0,0,0,114,85,0,0,0,114,102,0,0,0, + 114,83,0,0,0,218,8,95,119,101,97,107,114,101,102,90, + 3,114,101,102,41,3,114,67,0,0,0,114,86,0,0,0, + 114,110,0,0,0,114,4,0,0,0,41,1,114,67,0,0, + 0,114,5,0,0,0,114,105,0,0,0,18,1,0,0,115, + 24,0,0,0,0,4,6,1,3,1,17,1,13,1,5,1, + 12,1,12,1,15,2,12,1,18,2,22,1,114,105,0,0, + 0,99,1,0,0,0,0,0,0,0,2,0,0,0,11,0, + 0,0,67,0,0,0,115,71,0,0,0,116,0,0,124,0, + 0,131,1,0,125,1,0,116,1,0,106,2,0,131,0,0, + 1,121,14,0,124,1,0,106,3,0,131,0,0,1,87,110, + 18,0,4,116,4,0,107,10,0,114,56,0,1,1,1,89, + 110,11,0,88,124,1,0,106,5,0,131,0,0,1,100,1, + 0,83,41,2,97,21,1,0,0,82,101,108,101,97,115,101, + 32,116,104,101,32,103,108,111,98,97,108,32,105,109,112,111, + 114,116,32,108,111,99,107,44,32,97,110,100,32,97,99,113, + 117,105,114,101,115,32,116,104,101,110,32,114,101,108,101,97, + 115,101,32,116,104,101,10,32,32,32,32,109,111,100,117,108, + 101,32,108,111,99,107,32,102,111,114,32,97,32,103,105,118, + 101,110,32,109,111,100,117,108,101,32,110,97,109,101,46,10, + 32,32,32,32,84,104,105,115,32,105,115,32,117,115,101,100, + 32,116,111,32,101,110,115,117,114,101,32,97,32,109,111,100, + 117,108,101,32,105,115,32,99,111,109,112,108,101,116,101,108, + 121,32,105,110,105,116,105,97,108,105,122,101,100,44,32,105, + 110,32,116,104,101,10,32,32,32,32,101,118,101,110,116,32, + 105,116,32,105,115,32,98,101,105,110,103,32,105,109,112,111, + 114,116,101,100,32,98,121,32,97,110,111,116,104,101,114,32, + 116,104,114,101,97,100,46,10,10,32,32,32,32,83,104,111, + 117,108,100,32,111,110,108,121,32,98,101,32,99,97,108,108, + 101,100,32,119,105,116,104,32,116,104,101,32,105,109,112,111, + 114,116,32,108,111,99,107,32,116,97,107,101,110,46,78,41, + 6,114,105,0,0,0,114,106,0,0,0,114,107,0,0,0, + 114,97,0,0,0,114,82,0,0,0,114,98,0,0,0,41, + 2,114,67,0,0,0,114,86,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,19,95,108,111,99, + 107,95,117,110,108,111,99,107,95,109,111,100,117,108,101,37, + 1,0,0,115,14,0,0,0,0,7,12,1,10,1,3,1, + 14,1,13,3,5,2,114,112,0,0,0,99,1,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,79,0,0,0, + 115,13,0,0,0,124,0,0,124,1,0,124,2,0,142,0, + 0,83,41,1,97,46,1,0,0,114,101,109,111,118,101,95, + 105,109,112,111,114,116,108,105,98,95,102,114,97,109,101,115, + 32,105,110,32,105,109,112,111,114,116,46,99,32,119,105,108, + 108,32,97,108,119,97,121,115,32,114,101,109,111,118,101,32, + 115,101,113,117,101,110,99,101,115,10,32,32,32,32,111,102, + 32,105,109,112,111,114,116,108,105,98,32,102,114,97,109,101, + 115,32,116,104,97,116,32,101,110,100,32,119,105,116,104,32, + 97,32,99,97,108,108,32,116,111,32,116,104,105,115,32,102, + 117,110,99,116,105,111,110,10,10,32,32,32,32,85,115,101, + 32,105,116,32,105,110,115,116,101,97,100,32,111,102,32,97, + 32,110,111,114,109,97,108,32,99,97,108,108,32,105,110,32, + 112,108,97,99,101,115,32,119,104,101,114,101,32,105,110,99, + 108,117,100,105,110,103,32,116,104,101,32,105,109,112,111,114, + 116,108,105,98,10,32,32,32,32,102,114,97,109,101,115,32, + 105,110,116,114,111,100,117,99,101,115,32,117,110,119,97,110, + 116,101,100,32,110,111,105,115,101,32,105,110,116,111,32,116, + 104,101,32,116,114,97,99,101,98,97,99,107,32,40,101,46, + 103,46,32,119,104,101,110,32,101,120,101,99,117,116,105,110, + 103,10,32,32,32,32,109,111,100,117,108,101,32,99,111,100, + 101,41,10,32,32,32,32,114,4,0,0,0,41,3,218,1, + 102,114,80,0,0,0,90,4,107,119,100,115,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,25,95,99,97, + 108,108,95,119,105,116,104,95,102,114,97,109,101,115,95,114, + 101,109,111,118,101,100,57,1,0,0,115,2,0,0,0,0, + 8,114,114,0,0,0,105,248,12,0,0,233,2,0,0,0, + 114,13,0,0,0,115,2,0,0,0,13,10,90,11,95,95, + 112,121,99,97,99,104,101,95,95,122,4,111,112,116,45,122, + 3,46,112,121,122,4,46,112,121,99,78,218,12,111,112,116, + 105,109,105,122,97,116,105,111,110,99,2,0,0,0,1,0, + 0,0,11,0,0,0,6,0,0,0,67,0,0,0,115,87, + 1,0,0,124,1,0,100,1,0,107,9,0,114,76,0,116, + 0,0,106,1,0,100,2,0,116,2,0,131,2,0,1,124, + 2,0,100,1,0,107,9,0,114,58,0,100,3,0,125,3, + 0,116,3,0,124,3,0,131,1,0,130,1,0,124,1,0, + 114,70,0,100,4,0,110,3,0,100,5,0,125,2,0,116, + 4,0,124,0,0,131,1,0,92,2,0,125,4,0,125,5, + 0,124,5,0,106,5,0,100,6,0,131,1,0,92,3,0, + 125,6,0,125,7,0,125,8,0,116,6,0,106,7,0,106, + 8,0,125,9,0,124,9,0,100,1,0,107,8,0,114,154, + 0,116,9,0,100,7,0,131,1,0,130,1,0,100,4,0, + 106,10,0,124,6,0,114,172,0,124,6,0,110,3,0,124, + 8,0,124,7,0,124,9,0,103,3,0,131,1,0,125,10, + 0,124,2,0,100,1,0,107,8,0,114,241,0,116,6,0, + 106,11,0,106,12,0,100,8,0,107,2,0,114,229,0,100, + 4,0,125,2,0,110,12,0,116,6,0,106,11,0,106,12, + 0,125,2,0,116,13,0,124,2,0,131,1,0,125,2,0, + 124,2,0,100,4,0,107,3,0,114,63,1,124,2,0,106, + 14,0,131,0,0,115,42,1,116,15,0,100,9,0,106,16, + 0,124,2,0,131,1,0,131,1,0,130,1,0,100,10,0, + 106,16,0,124,10,0,116,17,0,124,2,0,131,3,0,125, + 10,0,116,18,0,124,4,0,116,19,0,124,10,0,116,20, + 0,100,8,0,25,23,131,3,0,83,41,11,97,254,2,0, + 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, + 116,111,32,97,32,46,112,121,32,102,105,108,101,44,32,114, + 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, + 111,32,105,116,115,32,46,112,121,99,32,102,105,108,101,46, + 10,10,32,32,32,32,84,104,101,32,46,112,121,32,102,105, 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100, 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32, 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116, - 104,101,32,112,97,116,104,32,116,111,10,32,32,32,32,116, - 104,101,32,46,112,121,32,102,105,108,101,32,99,97,108,99, - 117,108,97,116,101,100,32,116,111,32,99,111,114,114,101,115, - 112,111,110,100,32,116,111,32,116,104,101,32,46,112,121,99, - 47,46,112,121,111,32,102,105,108,101,46,32,32,73,102,32, - 112,97,116,104,32,100,111,101,115,10,32,32,32,32,110,111, - 116,32,99,111,110,102,111,114,109,32,116,111,32,80,69,80, - 32,51,49,52,55,32,102,111,114,109,97,116,44,32,86,97, - 108,117,101,69,114,114,111,114,32,119,105,108,108,32,98,101, - 32,114,97,105,115,101,100,46,32,73,102,10,32,32,32,32, - 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, - 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, - 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,122, - 36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, + 104,101,32,112,97,116,104,32,116,111,32,116,104,101,10,32, + 32,32,32,46,112,121,99,32,102,105,108,101,32,99,97,108, + 99,117,108,97,116,101,100,32,97,115,32,105,102,32,116,104, + 101,32,46,112,121,32,102,105,108,101,32,119,101,114,101,32, + 105,109,112,111,114,116,101,100,46,10,10,32,32,32,32,84, + 104,101,32,39,111,112,116,105,109,105,122,97,116,105,111,110, + 39,32,112,97,114,97,109,101,116,101,114,32,99,111,110,116, + 114,111,108,115,32,116,104,101,32,112,114,101,115,117,109,101, + 100,32,111,112,116,105,109,105,122,97,116,105,111,110,32,108, + 101,118,101,108,32,111,102,10,32,32,32,32,116,104,101,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,46,32,73, + 102,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,105,115,32,110,111,116,32,78,111,110,101,44,32,116,104, + 101,32,115,116,114,105,110,103,32,114,101,112,114,101,115,101, + 110,116,97,116,105,111,110,10,32,32,32,32,111,102,32,116, + 104,101,32,97,114,103,117,109,101,110,116,32,105,115,32,116, + 97,107,101,110,32,97,110,100,32,118,101,114,105,102,105,101, + 100,32,116,111,32,98,101,32,97,108,112,104,97,110,117,109, + 101,114,105,99,32,40,101,108,115,101,32,86,97,108,117,101, + 69,114,114,111,114,10,32,32,32,32,105,115,32,114,97,105, + 115,101,100,41,46,10,10,32,32,32,32,84,104,101,32,100, + 101,98,117,103,95,111,118,101,114,114,105,100,101,32,112,97, + 114,97,109,101,116,101,114,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,73,102,32,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,32,105,115,32,110,111,116,32, + 78,111,110,101,44,10,32,32,32,32,97,32,84,114,117,101, + 32,118,97,108,117,101,32,105,115,32,116,104,101,32,115,97, + 109,101,32,97,115,32,115,101,116,116,105,110,103,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,116,111,32, + 116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103, + 10,32,32,32,32,119,104,105,108,101,32,97,32,70,97,108, + 115,101,32,118,97,108,117,101,32,105,115,32,101,113,117,105, + 118,97,108,101,110,116,32,116,111,32,115,101,116,116,105,110, + 103,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,116,111,32,39,49,39,46,10,10,32,32,32,32,73,102, + 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, - 32,78,111,110,101,122,37,123,125,32,110,111,116,32,98,111, - 116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,99, - 116,111,114,121,32,105,110,32,123,33,114,125,114,116,0,0, - 0,114,115,0,0,0,122,28,101,120,112,101,99,116,101,100, - 32,111,110,108,121,32,50,32,100,111,116,115,32,105,110,32, - 123,33,114,125,114,84,0,0,0,41,12,114,7,0,0,0, - 114,121,0,0,0,114,122,0,0,0,114,123,0,0,0,114, - 38,0,0,0,114,124,0,0,0,218,10,86,97,108,117,101, - 69,114,114,111,114,114,47,0,0,0,114,89,0,0,0,218, - 9,112,97,114,116,105,116,105,111,110,114,28,0,0,0,218, - 15,83,79,85,82,67,69,95,83,85,70,70,73,88,69,83, - 41,5,114,35,0,0,0,114,127,0,0,0,90,16,112,121, - 99,97,99,104,101,95,102,105,108,101,110,97,109,101,90,7, - 112,121,99,97,99,104,101,90,13,98,97,115,101,95,102,105, - 108,101,110,97,109,101,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,17,115,111,117,114,99,101,95,102,114, - 111,109,95,99,97,99,104,101,208,1,0,0,115,24,0,0, - 0,0,9,18,1,15,1,18,1,18,1,12,1,9,1,18, - 1,21,1,9,1,15,1,19,1,114,136,0,0,0,99,1, - 0,0,0,0,0,0,0,5,0,0,0,12,0,0,0,67, - 0,0,0,115,164,0,0,0,116,0,0,124,0,0,131,1, - 0,100,1,0,107,2,0,114,22,0,100,2,0,83,124,0, - 0,106,1,0,100,3,0,131,1,0,92,3,0,125,1,0, - 125,2,0,125,3,0,124,1,0,12,115,81,0,124,3,0, - 106,2,0,131,0,0,100,7,0,100,8,0,133,2,0,25, - 100,6,0,107,3,0,114,85,0,124,0,0,83,121,16,0, - 116,3,0,124,0,0,131,1,0,125,4,0,87,110,40,0, - 4,116,4,0,116,5,0,102,2,0,107,10,0,114,143,0, - 1,1,1,124,0,0,100,2,0,100,9,0,133,2,0,25, - 125,4,0,89,110,1,0,88,116,6,0,124,4,0,131,1, - 0,114,160,0,124,4,0,83,124,0,0,83,41,10,122,188, - 67,111,110,118,101,114,116,32,97,32,98,121,116,101,99,111, - 100,101,32,102,105,108,101,32,112,97,116,104,32,116,111,32, - 97,32,115,111,117,114,99,101,32,112,97,116,104,32,40,105, - 102,32,112,111,115,115,105,98,108,101,41,46,10,10,32,32, - 32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32, - 101,120,105,115,116,115,32,112,117,114,101,108,121,32,102,111, - 114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,112, - 97,116,105,98,105,108,105,116,121,32,102,111,114,10,32,32, - 32,32,80,121,73,109,112,111,114,116,95,69,120,101,99,67, - 111,100,101,77,111,100,117,108,101,87,105,116,104,70,105,108, - 101,110,97,109,101,115,40,41,32,105,110,32,116,104,101,32, - 67,32,65,80,73,46,10,10,32,32,32,32,114,84,0,0, - 0,78,114,116,0,0,0,233,3,0,0,0,114,29,0,0, - 0,90,2,112,121,233,253,255,255,255,233,255,255,255,255,114, - 139,0,0,0,41,7,114,31,0,0,0,114,32,0,0,0, - 218,5,108,111,119,101,114,114,136,0,0,0,114,123,0,0, - 0,114,133,0,0,0,114,44,0,0,0,41,5,218,13,98, - 121,116,101,99,111,100,101,95,112,97,116,104,114,130,0,0, - 0,114,36,0,0,0,90,9,101,120,116,101,110,115,105,111, - 110,218,11,115,111,117,114,99,101,95,112,97,116,104,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,15,95, - 103,101,116,95,115,111,117,114,99,101,102,105,108,101,231,1, - 0,0,115,20,0,0,0,0,7,18,1,4,1,24,1,35, - 1,4,1,3,1,16,1,19,1,21,1,114,143,0,0,0, - 99,1,0,0,0,0,0,0,0,2,0,0,0,11,0,0, - 0,67,0,0,0,115,60,0,0,0,121,19,0,116,0,0, - 124,0,0,131,1,0,106,1,0,125,1,0,87,110,24,0, - 4,116,2,0,107,10,0,114,45,0,1,1,1,100,1,0, - 125,1,0,89,110,1,0,88,124,1,0,100,2,0,79,125, - 1,0,124,1,0,83,41,3,122,51,67,97,108,99,117,108, - 97,116,101,32,116,104,101,32,109,111,100,101,32,112,101,114, - 109,105,115,115,105,111,110,115,32,102,111,114,32,97,32,98, - 121,116,101,99,111,100,101,32,102,105,108,101,46,105,182,1, - 0,0,233,128,0,0,0,41,3,114,39,0,0,0,114,41, - 0,0,0,114,40,0,0,0,41,2,114,35,0,0,0,114, - 42,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,250, - 1,0,0,115,12,0,0,0,0,2,3,1,19,1,13,1, - 11,3,10,1,114,145,0,0,0,218,9,118,101,114,98,111, - 115,105,116,121,114,29,0,0,0,99,1,0,0,0,1,0, - 0,0,3,0,0,0,4,0,0,0,71,0,0,0,115,81, - 0,0,0,116,0,0,106,1,0,106,2,0,124,1,0,107, - 5,0,114,77,0,124,0,0,106,3,0,100,6,0,131,1, - 0,115,46,0,100,3,0,124,0,0,23,125,0,0,110,0, - 0,116,4,0,124,0,0,106,5,0,124,2,0,140,0,0, - 100,4,0,116,0,0,106,6,0,131,1,1,1,110,0,0, - 100,5,0,83,41,7,122,61,80,114,105,110,116,32,116,104, - 101,32,109,101,115,115,97,103,101,32,116,111,32,115,116,100, - 101,114,114,32,105,102,32,45,118,47,80,89,84,72,79,78, - 86,69,82,66,79,83,69,32,105,115,32,116,117,114,110,101, - 100,32,111,110,46,250,1,35,250,7,105,109,112,111,114,116, - 32,122,2,35,32,114,54,0,0,0,78,41,2,114,147,0, - 0,0,114,148,0,0,0,41,7,114,7,0,0,0,114,117, - 0,0,0,218,7,118,101,114,98,111,115,101,114,9,0,0, - 0,218,5,112,114,105,110,116,114,47,0,0,0,218,6,115, - 116,100,101,114,114,41,3,218,7,109,101,115,115,97,103,101, - 114,146,0,0,0,114,80,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,16,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,6,2,0,0,115, - 8,0,0,0,0,2,18,1,15,1,13,1,114,153,0,0, - 0,99,1,0,0,0,0,0,0,0,2,0,0,0,4,0, - 0,0,3,0,0,0,115,38,0,0,0,100,1,0,135,0, - 0,102,1,0,100,2,0,100,3,0,134,1,0,125,1,0, - 116,0,0,124,1,0,136,0,0,131,2,0,1,124,1,0, - 83,41,4,122,252,68,101,99,111,114,97,116,111,114,32,116, - 111,32,118,101,114,105,102,121,32,116,104,97,116,32,116,104, - 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,114, - 101,113,117,101,115,116,101,100,32,109,97,116,99,104,101,115, - 32,116,104,101,32,111,110,101,32,116,104,101,10,32,32,32, - 32,108,111,97,100,101,114,32,99,97,110,32,104,97,110,100, - 108,101,46,10,10,32,32,32,32,84,104,101,32,102,105,114, - 115,116,32,97,114,103,117,109,101,110,116,32,40,115,101,108, - 102,41,32,109,117,115,116,32,100,101,102,105,110,101,32,95, - 110,97,109,101,32,119,104,105,99,104,32,116,104,101,32,115, - 101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105, - 115,10,32,32,32,32,99,111,109,112,97,114,101,100,32,97, - 103,97,105,110,115,116,46,32,73,102,32,116,104,101,32,99, - 111,109,112,97,114,105,115,111,110,32,102,97,105,108,115,32, - 116,104,101,110,32,73,109,112,111,114,116,69,114,114,111,114, - 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, - 32,78,99,2,0,0,0,0,0,0,0,4,0,0,0,5, - 0,0,0,31,0,0,0,115,83,0,0,0,124,1,0,100, - 0,0,107,8,0,114,24,0,124,0,0,106,0,0,125,1, - 0,110,40,0,124,0,0,106,0,0,124,1,0,107,3,0, - 114,64,0,116,1,0,100,1,0,124,1,0,22,100,2,0, - 124,1,0,131,1,1,130,1,0,110,0,0,136,0,0,124, - 0,0,124,1,0,124,2,0,124,3,0,142,2,0,83,41, - 3,78,122,23,108,111,97,100,101,114,32,99,97,110,110,111, - 116,32,104,97,110,100,108,101,32,37,115,114,67,0,0,0, - 41,2,114,67,0,0,0,218,11,73,109,112,111,114,116,69, - 114,114,111,114,41,4,114,71,0,0,0,114,67,0,0,0, - 114,80,0,0,0,114,108,0,0,0,41,1,218,6,109,101, - 116,104,111,100,114,4,0,0,0,114,5,0,0,0,218,19, - 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, - 112,101,114,22,2,0,0,115,10,0,0,0,0,1,12,1, - 12,1,15,1,25,1,122,40,95,99,104,101,99,107,95,110, - 97,109,101,46,60,108,111,99,97,108,115,62,46,95,99,104, - 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, - 41,1,114,65,0,0,0,41,2,114,155,0,0,0,114,156, - 0,0,0,114,4,0,0,0,41,1,114,155,0,0,0,114, - 5,0,0,0,218,11,95,99,104,101,99,107,95,110,97,109, - 101,14,2,0,0,115,6,0,0,0,0,8,21,6,13,1, - 114,157,0,0,0,99,1,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,3,0,0,0,115,35,0,0,0,135, - 0,0,102,1,0,100,1,0,100,2,0,134,0,0,125,1, - 0,116,0,0,124,1,0,136,0,0,131,2,0,1,124,1, - 0,83,41,3,122,49,68,101,99,111,114,97,116,111,114,32, - 116,111,32,118,101,114,105,102,121,32,116,104,101,32,110,97, - 109,101,100,32,109,111,100,117,108,101,32,105,115,32,98,117, - 105,108,116,45,105,110,46,99,2,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,19,0,0,0,115,58,0,0, - 0,124,1,0,116,0,0,106,1,0,107,7,0,114,45,0, - 116,2,0,100,1,0,106,3,0,124,1,0,131,1,0,100, - 2,0,124,1,0,131,1,1,130,1,0,110,0,0,136,0, - 0,124,0,0,124,1,0,131,2,0,83,41,3,78,122,29, - 123,33,114,125,32,105,115,32,110,111,116,32,97,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,114,67,0, - 0,0,41,4,114,7,0,0,0,218,20,98,117,105,108,116, - 105,110,95,109,111,100,117,108,101,95,110,97,109,101,115,114, - 154,0,0,0,114,47,0,0,0,41,2,114,71,0,0,0, - 218,8,102,117,108,108,110,97,109,101,41,1,218,3,102,120, - 110,114,4,0,0,0,114,5,0,0,0,218,25,95,114,101, + 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, + 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, + 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, + 122,70,116,104,101,32,100,101,98,117,103,95,111,118,101,114, + 114,105,100,101,32,112,97,114,97,109,101,116,101,114,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,59,32,117,115, + 101,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,105,110,115,116,101,97,100,122,50,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,32,111,114,32,111,112,116,105, + 109,105,122,97,116,105,111,110,32,109,117,115,116,32,98,101, + 32,115,101,116,32,116,111,32,78,111,110,101,114,30,0,0, + 0,114,29,0,0,0,218,1,46,122,36,115,121,115,46,105, + 109,112,108,101,109,101,110,116,97,116,105,111,110,46,99,97, + 99,104,101,95,116,97,103,32,105,115,32,78,111,110,101,114, + 84,0,0,0,122,24,123,33,114,125,32,105,115,32,110,111, + 116,32,97,108,112,104,97,110,117,109,101,114,105,99,122,7, + 123,125,46,123,125,123,125,41,21,218,9,95,119,97,114,110, + 105,110,103,115,218,4,119,97,114,110,218,18,68,101,112,114, + 101,99,97,116,105,111,110,87,97,114,110,105,110,103,218,9, + 84,121,112,101,69,114,114,111,114,114,38,0,0,0,114,32, + 0,0,0,114,7,0,0,0,218,14,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,218,9,99,97,99,104,101,95, + 116,97,103,218,19,78,111,116,73,109,112,108,101,109,101,110, + 116,101,100,69,114,114,111,114,114,26,0,0,0,218,5,102, + 108,97,103,115,218,8,111,112,116,105,109,105,122,101,218,3, + 115,116,114,218,7,105,115,97,108,110,117,109,218,10,86,97, + 108,117,101,69,114,114,111,114,114,47,0,0,0,218,4,95, + 79,80,84,114,28,0,0,0,218,8,95,80,89,67,65,67, + 72,69,218,17,66,89,84,69,67,79,68,69,95,83,85,70, + 70,73,88,69,83,41,11,114,35,0,0,0,90,14,100,101, + 98,117,103,95,111,118,101,114,114,105,100,101,114,116,0,0, + 0,218,7,109,101,115,115,97,103,101,218,4,104,101,97,100, + 114,37,0,0,0,218,4,98,97,115,101,218,3,115,101,112, + 218,4,114,101,115,116,90,3,116,97,103,90,15,97,108,109, + 111,115,116,95,102,105,108,101,110,97,109,101,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,17,99,97,99, + 104,101,95,102,114,111,109,95,115,111,117,114,99,101,184,1, + 0,0,115,46,0,0,0,0,18,12,1,9,1,7,1,12, + 1,6,1,12,1,18,1,18,1,24,1,12,1,12,1,12, + 1,36,1,12,1,18,1,9,2,12,1,12,1,12,1,12, + 1,21,1,21,1,114,138,0,0,0,99,1,0,0,0,0, + 0,0,0,8,0,0,0,5,0,0,0,67,0,0,0,115, + 62,1,0,0,116,0,0,106,1,0,106,2,0,100,1,0, + 107,8,0,114,30,0,116,3,0,100,2,0,131,1,0,130, + 1,0,116,4,0,124,0,0,131,1,0,92,2,0,125,1, + 0,125,2,0,116,4,0,124,1,0,131,1,0,92,2,0, + 125,1,0,125,3,0,124,3,0,116,5,0,107,3,0,114, + 102,0,116,6,0,100,3,0,106,7,0,116,5,0,124,0, + 0,131,2,0,131,1,0,130,1,0,124,2,0,106,8,0, + 100,4,0,131,1,0,125,4,0,124,4,0,100,11,0,107, + 7,0,114,153,0,116,6,0,100,7,0,106,7,0,124,2, + 0,131,1,0,131,1,0,130,1,0,110,125,0,124,4,0, + 100,6,0,107,2,0,114,22,1,124,2,0,106,9,0,100, + 4,0,100,5,0,131,2,0,100,12,0,25,125,5,0,124, + 5,0,106,10,0,116,11,0,131,1,0,115,223,0,116,6, + 0,100,8,0,106,7,0,116,11,0,131,1,0,131,1,0, + 130,1,0,124,5,0,116,12,0,116,11,0,131,1,0,100, + 1,0,133,2,0,25,125,6,0,124,6,0,106,13,0,131, + 0,0,115,22,1,116,6,0,100,9,0,106,7,0,124,5, + 0,131,1,0,131,1,0,130,1,0,124,2,0,106,14,0, + 100,4,0,131,1,0,100,10,0,25,125,7,0,116,15,0, + 124,1,0,124,7,0,116,16,0,100,10,0,25,23,131,2, + 0,83,41,13,97,110,1,0,0,71,105,118,101,110,32,116, + 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, + 99,46,32,102,105,108,101,44,32,114,101,116,117,114,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,105,116,115,32, + 46,112,121,32,102,105,108,101,46,10,10,32,32,32,32,84, + 104,101,32,46,112,121,99,32,102,105,108,101,32,100,111,101, + 115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120, + 105,115,116,59,32,116,104,105,115,32,115,105,109,112,108,121, + 32,114,101,116,117,114,110,115,32,116,104,101,32,112,97,116, + 104,32,116,111,10,32,32,32,32,116,104,101,32,46,112,121, + 32,102,105,108,101,32,99,97,108,99,117,108,97,116,101,100, + 32,116,111,32,99,111,114,114,101,115,112,111,110,100,32,116, + 111,32,116,104,101,32,46,112,121,99,32,102,105,108,101,46, + 32,32,73,102,32,112,97,116,104,32,100,111,101,115,10,32, + 32,32,32,110,111,116,32,99,111,110,102,111,114,109,32,116, + 111,32,80,69,80,32,51,49,52,55,47,52,56,56,32,102, + 111,114,109,97,116,44,32,86,97,108,117,101,69,114,114,111, + 114,32,119,105,108,108,32,98,101,32,114,97,105,115,101,100, + 46,32,73,102,10,32,32,32,32,115,121,115,46,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, + 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, + 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, + 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 46,10,10,32,32,32,32,78,122,36,115,121,115,46,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, + 104,101,95,116,97,103,32,105,115,32,78,111,110,101,122,37, + 123,125,32,110,111,116,32,98,111,116,116,111,109,45,108,101, + 118,101,108,32,100,105,114,101,99,116,111,114,121,32,105,110, + 32,123,33,114,125,114,117,0,0,0,114,115,0,0,0,233, + 3,0,0,0,122,33,101,120,112,101,99,116,101,100,32,111, + 110,108,121,32,50,32,111,114,32,51,32,100,111,116,115,32, + 105,110,32,123,33,114,125,122,57,111,112,116,105,109,105,122, + 97,116,105,111,110,32,112,111,114,116,105,111,110,32,111,102, + 32,102,105,108,101,110,97,109,101,32,100,111,101,115,32,110, + 111,116,32,115,116,97,114,116,32,119,105,116,104,32,123,33, + 114,125,122,52,111,112,116,105,109,105,122,97,116,105,111,110, + 32,108,101,118,101,108,32,123,33,114,125,32,105,115,32,110, + 111,116,32,97,110,32,97,108,112,104,97,110,117,109,101,114, + 105,99,32,118,97,108,117,101,114,84,0,0,0,62,2,0, + 0,0,114,115,0,0,0,114,139,0,0,0,233,254,255,255, + 255,41,17,114,7,0,0,0,114,122,0,0,0,114,123,0, + 0,0,114,124,0,0,0,114,38,0,0,0,114,131,0,0, + 0,114,129,0,0,0,114,47,0,0,0,114,89,0,0,0, + 114,34,0,0,0,114,9,0,0,0,114,130,0,0,0,114, + 31,0,0,0,114,128,0,0,0,218,9,112,97,114,116,105, + 116,105,111,110,114,28,0,0,0,218,15,83,79,85,82,67, + 69,95,83,85,70,70,73,88,69,83,41,8,114,35,0,0, + 0,114,134,0,0,0,90,16,112,121,99,97,99,104,101,95, + 102,105,108,101,110,97,109,101,90,7,112,121,99,97,99,104, + 101,90,9,100,111,116,95,99,111,117,110,116,114,116,0,0, + 0,90,9,111,112,116,95,108,101,118,101,108,90,13,98,97, + 115,101,95,102,105,108,101,110,97,109,101,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,17,115,111,117,114, + 99,101,95,102,114,111,109,95,99,97,99,104,101,228,1,0, + 0,115,44,0,0,0,0,9,18,1,12,1,18,1,18,1, + 12,1,9,1,15,1,15,1,12,1,9,1,15,1,12,1, + 22,1,15,1,9,1,12,1,22,1,12,1,9,1,12,1, + 19,1,114,143,0,0,0,99,1,0,0,0,0,0,0,0, + 5,0,0,0,12,0,0,0,67,0,0,0,115,164,0,0, + 0,116,0,0,124,0,0,131,1,0,100,1,0,107,2,0, + 114,22,0,100,2,0,83,124,0,0,106,1,0,100,3,0, + 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, + 1,0,12,115,81,0,124,3,0,106,2,0,131,0,0,100, + 7,0,100,8,0,133,2,0,25,100,6,0,107,3,0,114, + 85,0,124,0,0,83,121,16,0,116,3,0,124,0,0,131, + 1,0,125,4,0,87,110,40,0,4,116,4,0,116,5,0, + 102,2,0,107,10,0,114,143,0,1,1,1,124,0,0,100, + 2,0,100,9,0,133,2,0,25,125,4,0,89,110,1,0, + 88,116,6,0,124,4,0,131,1,0,114,160,0,124,4,0, + 83,124,0,0,83,41,10,122,188,67,111,110,118,101,114,116, + 32,97,32,98,121,116,101,99,111,100,101,32,102,105,108,101, + 32,112,97,116,104,32,116,111,32,97,32,115,111,117,114,99, + 101,32,112,97,116,104,32,40,105,102,32,112,111,115,115,105, + 98,108,101,41,46,10,10,32,32,32,32,84,104,105,115,32, + 102,117,110,99,116,105,111,110,32,101,120,105,115,116,115,32, + 112,117,114,101,108,121,32,102,111,114,32,98,97,99,107,119, + 97,114,100,115,45,99,111,109,112,97,116,105,98,105,108,105, + 116,121,32,102,111,114,10,32,32,32,32,80,121,73,109,112, + 111,114,116,95,69,120,101,99,67,111,100,101,77,111,100,117, + 108,101,87,105,116,104,70,105,108,101,110,97,109,101,115,40, + 41,32,105,110,32,116,104,101,32,67,32,65,80,73,46,10, + 10,32,32,32,32,114,84,0,0,0,78,114,117,0,0,0, + 114,139,0,0,0,114,29,0,0,0,90,2,112,121,233,253, + 255,255,255,233,255,255,255,255,114,145,0,0,0,41,7,114, + 31,0,0,0,114,32,0,0,0,218,5,108,111,119,101,114, + 114,143,0,0,0,114,124,0,0,0,114,129,0,0,0,114, + 44,0,0,0,41,5,218,13,98,121,116,101,99,111,100,101, + 95,112,97,116,104,114,137,0,0,0,114,36,0,0,0,90, + 9,101,120,116,101,110,115,105,111,110,218,11,115,111,117,114, + 99,101,95,112,97,116,104,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,15,95,103,101,116,95,115,111,117, + 114,99,101,102,105,108,101,5,2,0,0,115,20,0,0,0, + 0,7,18,1,4,1,24,1,35,1,4,1,3,1,16,1, + 19,1,21,1,114,149,0,0,0,99,1,0,0,0,0,0, + 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,60, + 0,0,0,121,19,0,116,0,0,124,0,0,131,1,0,106, + 1,0,125,1,0,87,110,24,0,4,116,2,0,107,10,0, + 114,45,0,1,1,1,100,1,0,125,1,0,89,110,1,0, + 88,124,1,0,100,2,0,79,125,1,0,124,1,0,83,41, + 3,122,51,67,97,108,99,117,108,97,116,101,32,116,104,101, + 32,109,111,100,101,32,112,101,114,109,105,115,115,105,111,110, + 115,32,102,111,114,32,97,32,98,121,116,101,99,111,100,101, + 32,102,105,108,101,46,105,182,1,0,0,233,128,0,0,0, + 41,3,114,39,0,0,0,114,41,0,0,0,114,40,0,0, + 0,41,2,114,35,0,0,0,114,42,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,99, + 97,108,99,95,109,111,100,101,24,2,0,0,115,12,0,0, + 0,0,2,3,1,19,1,13,1,11,3,10,1,114,151,0, + 0,0,218,9,118,101,114,98,111,115,105,116,121,114,29,0, + 0,0,99,1,0,0,0,1,0,0,0,3,0,0,0,4, + 0,0,0,71,0,0,0,115,75,0,0,0,116,0,0,106, + 1,0,106,2,0,124,1,0,107,5,0,114,71,0,124,0, + 0,106,3,0,100,6,0,131,1,0,115,43,0,100,3,0, + 124,0,0,23,125,0,0,116,4,0,124,0,0,106,5,0, + 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, + 1,1,1,100,5,0,83,41,7,122,61,80,114,105,110,116, + 32,116,104,101,32,109,101,115,115,97,103,101,32,116,111,32, + 115,116,100,101,114,114,32,105,102,32,45,118,47,80,89,84, + 72,79,78,86,69,82,66,79,83,69,32,105,115,32,116,117, + 114,110,101,100,32,111,110,46,250,1,35,250,7,105,109,112, + 111,114,116,32,122,2,35,32,114,54,0,0,0,78,41,2, + 114,153,0,0,0,114,154,0,0,0,41,7,114,7,0,0, + 0,114,125,0,0,0,218,7,118,101,114,98,111,115,101,114, + 9,0,0,0,218,5,112,114,105,110,116,114,47,0,0,0, + 218,6,115,116,100,101,114,114,41,3,114,133,0,0,0,114, + 152,0,0,0,114,80,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,16,95,118,101,114,98,111, + 115,101,95,109,101,115,115,97,103,101,36,2,0,0,115,8, + 0,0,0,0,2,18,1,15,1,10,1,114,158,0,0,0, + 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,3,0,0,0,115,38,0,0,0,100,1,0,135,0,0, + 102,1,0,100,2,0,100,3,0,134,1,0,125,1,0,116, + 0,0,124,1,0,136,0,0,131,2,0,1,124,1,0,83, + 41,4,122,252,68,101,99,111,114,97,116,111,114,32,116,111, + 32,118,101,114,105,102,121,32,116,104,97,116,32,116,104,101, + 32,109,111,100,117,108,101,32,98,101,105,110,103,32,114,101, + 113,117,101,115,116,101,100,32,109,97,116,99,104,101,115,32, + 116,104,101,32,111,110,101,32,116,104,101,10,32,32,32,32, + 108,111,97,100,101,114,32,99,97,110,32,104,97,110,100,108, + 101,46,10,10,32,32,32,32,84,104,101,32,102,105,114,115, + 116,32,97,114,103,117,109,101,110,116,32,40,115,101,108,102, + 41,32,109,117,115,116,32,100,101,102,105,110,101,32,95,110, + 97,109,101,32,119,104,105,99,104,32,116,104,101,32,115,101, + 99,111,110,100,32,97,114,103,117,109,101,110,116,32,105,115, + 10,32,32,32,32,99,111,109,112,97,114,101,100,32,97,103, + 97,105,110,115,116,46,32,73,102,32,116,104,101,32,99,111, + 109,112,97,114,105,115,111,110,32,102,97,105,108,115,32,116, + 104,101,110,32,73,109,112,111,114,116,69,114,114,111,114,32, + 105,115,32,114,97,105,115,101,100,46,10,10,32,32,32,32, + 78,99,2,0,0,0,0,0,0,0,4,0,0,0,5,0, + 0,0,31,0,0,0,115,80,0,0,0,124,1,0,100,0, + 0,107,8,0,114,24,0,124,0,0,106,0,0,125,1,0, + 110,37,0,124,0,0,106,0,0,124,1,0,107,3,0,114, + 61,0,116,1,0,100,1,0,124,1,0,22,100,2,0,124, + 1,0,131,1,1,130,1,0,136,0,0,124,0,0,124,1, + 0,124,2,0,124,3,0,142,2,0,83,41,3,78,122,23, + 108,111,97,100,101,114,32,99,97,110,110,111,116,32,104,97, + 110,100,108,101,32,37,115,114,67,0,0,0,41,2,114,67, + 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, + 41,4,114,71,0,0,0,114,67,0,0,0,114,80,0,0, + 0,114,108,0,0,0,41,1,218,6,109,101,116,104,111,100, + 114,4,0,0,0,114,5,0,0,0,218,19,95,99,104,101, + 99,107,95,110,97,109,101,95,119,114,97,112,112,101,114,52, + 2,0,0,115,10,0,0,0,0,1,12,1,12,1,15,1, + 22,1,122,40,95,99,104,101,99,107,95,110,97,109,101,46, + 60,108,111,99,97,108,115,62,46,95,99,104,101,99,107,95, + 110,97,109,101,95,119,114,97,112,112,101,114,41,1,114,65, + 0,0,0,41,2,114,160,0,0,0,114,161,0,0,0,114, + 4,0,0,0,41,1,114,160,0,0,0,114,5,0,0,0, + 218,11,95,99,104,101,99,107,95,110,97,109,101,44,2,0, + 0,115,6,0,0,0,0,8,21,6,13,1,114,162,0,0, + 0,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,3,0,0,0,115,35,0,0,0,135,0,0,102,1, + 0,100,1,0,100,2,0,134,0,0,125,1,0,116,0,0, + 124,1,0,136,0,0,131,2,0,1,124,1,0,83,41,3, + 122,49,68,101,99,111,114,97,116,111,114,32,116,111,32,118, + 101,114,105,102,121,32,116,104,101,32,110,97,109,101,100,32, + 109,111,100,117,108,101,32,105,115,32,98,117,105,108,116,45, + 105,110,46,99,2,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,19,0,0,0,115,55,0,0,0,124,1,0, + 116,0,0,106,1,0,107,7,0,114,42,0,116,2,0,100, + 1,0,106,3,0,124,1,0,131,1,0,100,2,0,124,1, + 0,131,1,1,130,1,0,136,0,0,124,0,0,124,1,0, + 131,2,0,83,41,3,78,122,29,123,33,114,125,32,105,115, + 32,110,111,116,32,97,32,98,117,105,108,116,45,105,110,32, + 109,111,100,117,108,101,114,67,0,0,0,41,4,114,7,0, + 0,0,218,20,98,117,105,108,116,105,110,95,109,111,100,117, + 108,101,95,110,97,109,101,115,114,159,0,0,0,114,47,0, + 0,0,41,2,114,71,0,0,0,218,8,102,117,108,108,110, + 97,109,101,41,1,218,3,102,120,110,114,4,0,0,0,114, + 5,0,0,0,218,25,95,114,101,113,117,105,114,101,115,95, + 98,117,105,108,116,105,110,95,119,114,97,112,112,101,114,64, + 2,0,0,115,8,0,0,0,0,1,15,1,18,1,9,1, + 122,52,95,114,101,113,117,105,114,101,115,95,98,117,105,108, + 116,105,110,46,60,108,111,99,97,108,115,62,46,95,114,101, 113,117,105,114,101,115,95,98,117,105,108,116,105,110,95,119, - 114,97,112,112,101,114,34,2,0,0,115,8,0,0,0,0, - 1,15,1,18,1,12,1,122,52,95,114,101,113,117,105,114, - 101,115,95,98,117,105,108,116,105,110,46,60,108,111,99,97, - 108,115,62,46,95,114,101,113,117,105,114,101,115,95,98,117, - 105,108,116,105,110,95,119,114,97,112,112,101,114,41,1,114, - 65,0,0,0,41,2,114,160,0,0,0,114,161,0,0,0, - 114,4,0,0,0,41,1,114,160,0,0,0,114,5,0,0, - 0,218,17,95,114,101,113,117,105,114,101,115,95,98,117,105, - 108,116,105,110,32,2,0,0,115,6,0,0,0,0,2,18, - 5,13,1,114,162,0,0,0,99,1,0,0,0,0,0,0, - 0,2,0,0,0,3,0,0,0,3,0,0,0,115,35,0, - 0,0,135,0,0,102,1,0,100,1,0,100,2,0,134,0, - 0,125,1,0,116,0,0,124,1,0,136,0,0,131,2,0, - 1,124,1,0,83,41,3,122,47,68,101,99,111,114,97,116, - 111,114,32,116,111,32,118,101,114,105,102,121,32,116,104,101, - 32,110,97,109,101,100,32,109,111,100,117,108,101,32,105,115, - 32,102,114,111,122,101,110,46,99,2,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,19,0,0,0,115,58,0, - 0,0,116,0,0,106,1,0,124,1,0,131,1,0,115,45, - 0,116,2,0,100,1,0,106,3,0,124,1,0,131,1,0, - 100,2,0,124,1,0,131,1,1,130,1,0,110,0,0,136, - 0,0,124,0,0,124,1,0,131,2,0,83,41,3,78,122, - 27,123,33,114,125,32,105,115,32,110,111,116,32,97,32,102, - 114,111,122,101,110,32,109,111,100,117,108,101,114,67,0,0, - 0,41,4,114,106,0,0,0,218,9,105,115,95,102,114,111, - 122,101,110,114,154,0,0,0,114,47,0,0,0,41,2,114, - 71,0,0,0,114,159,0,0,0,41,1,114,160,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,24,95,114,101,113, - 117,105,114,101,115,95,102,114,111,122,101,110,95,119,114,97, - 112,112,101,114,45,2,0,0,115,8,0,0,0,0,1,15, - 1,18,1,12,1,122,50,95,114,101,113,117,105,114,101,115, - 95,102,114,111,122,101,110,46,60,108,111,99,97,108,115,62, - 46,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101, - 110,95,119,114,97,112,112,101,114,41,1,114,65,0,0,0, - 41,2,114,160,0,0,0,114,164,0,0,0,114,4,0,0, - 0,41,1,114,160,0,0,0,114,5,0,0,0,218,16,95, - 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,43, - 2,0,0,115,6,0,0,0,0,2,18,5,13,1,114,165, - 0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0, - 4,0,0,0,67,0,0,0,115,87,0,0,0,124,0,0, - 106,0,0,124,1,0,131,1,0,92,2,0,125,2,0,125, - 3,0,124,2,0,100,1,0,107,8,0,114,83,0,116,1, - 0,124,3,0,131,1,0,114,83,0,100,2,0,125,4,0, - 116,2,0,106,3,0,124,4,0,106,4,0,124,3,0,100, - 3,0,25,131,1,0,116,5,0,131,2,0,1,110,0,0, - 124,2,0,83,41,4,122,155,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, - 111,100,117,108,101,32,98,121,32,100,101,108,101,103,97,116, - 105,110,103,32,116,111,10,32,32,32,32,115,101,108,102,46, - 102,105,110,100,95,108,111,97,100,101,114,40,41,46,10,10, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,32,105,110, - 32,102,97,118,111,114,32,111,102,32,102,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,40,41,46,10,10,32, - 32,32,32,78,122,44,78,111,116,32,105,109,112,111,114,116, - 105,110,103,32,100,105,114,101,99,116,111,114,121,32,123,125, - 58,32,109,105,115,115,105,110,103,32,95,95,105,110,105,116, - 95,95,114,84,0,0,0,41,6,218,11,102,105,110,100,95, - 108,111,97,100,101,114,114,31,0,0,0,218,9,95,119,97, - 114,110,105,110,103,115,218,4,119,97,114,110,114,47,0,0, - 0,218,13,73,109,112,111,114,116,87,97,114,110,105,110,103, - 41,5,114,71,0,0,0,114,159,0,0,0,218,6,108,111, - 97,100,101,114,218,8,112,111,114,116,105,111,110,115,218,3, - 109,115,103,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,17,95,102,105,110,100,95,109,111,100,117,108,101, - 95,115,104,105,109,54,2,0,0,115,10,0,0,0,0,10, - 21,1,24,1,6,1,32,1,114,173,0,0,0,99,2,0, - 0,0,0,0,0,0,5,0,0,0,3,0,0,0,67,0, - 0,0,115,93,0,0,0,116,0,0,124,1,0,124,0,0, - 131,2,0,125,2,0,116,1,0,124,2,0,131,1,0,125, - 3,0,124,1,0,116,2,0,106,3,0,107,6,0,114,79, - 0,116,2,0,106,3,0,124,1,0,25,125,4,0,124,3, - 0,106,4,0,124,4,0,131,1,0,1,116,2,0,106,3, - 0,124,1,0,25,83,124,3,0,106,5,0,131,0,0,83, + 114,97,112,112,101,114,41,1,114,65,0,0,0,41,2,114, + 165,0,0,0,114,166,0,0,0,114,4,0,0,0,41,1, + 114,165,0,0,0,114,5,0,0,0,218,17,95,114,101,113, + 117,105,114,101,115,95,98,117,105,108,116,105,110,62,2,0, + 0,115,6,0,0,0,0,2,18,5,13,1,114,167,0,0, + 0,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,3,0,0,0,115,35,0,0,0,135,0,0,102,1, + 0,100,1,0,100,2,0,134,0,0,125,1,0,116,0,0, + 124,1,0,136,0,0,131,2,0,1,124,1,0,83,41,3, + 122,47,68,101,99,111,114,97,116,111,114,32,116,111,32,118, + 101,114,105,102,121,32,116,104,101,32,110,97,109,101,100,32, + 109,111,100,117,108,101,32,105,115,32,102,114,111,122,101,110, + 46,99,2,0,0,0,0,0,0,0,2,0,0,0,4,0, + 0,0,19,0,0,0,115,55,0,0,0,116,0,0,106,1, + 0,124,1,0,131,1,0,115,42,0,116,2,0,100,1,0, + 106,3,0,124,1,0,131,1,0,100,2,0,124,1,0,131, + 1,1,130,1,0,136,0,0,124,0,0,124,1,0,131,2, + 0,83,41,3,78,122,27,123,33,114,125,32,105,115,32,110, + 111,116,32,97,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,114,67,0,0,0,41,4,114,106,0,0,0,218,9, + 105,115,95,102,114,111,122,101,110,114,159,0,0,0,114,47, + 0,0,0,41,2,114,71,0,0,0,114,164,0,0,0,41, + 1,114,165,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,24,95,114,101,113,117,105,114,101,115,95,102,114,111,122, + 101,110,95,119,114,97,112,112,101,114,75,2,0,0,115,8, + 0,0,0,0,1,15,1,18,1,9,1,122,50,95,114,101, + 113,117,105,114,101,115,95,102,114,111,122,101,110,46,60,108, + 111,99,97,108,115,62,46,95,114,101,113,117,105,114,101,115, + 95,102,114,111,122,101,110,95,119,114,97,112,112,101,114,41, + 1,114,65,0,0,0,41,2,114,165,0,0,0,114,169,0, + 0,0,114,4,0,0,0,41,1,114,165,0,0,0,114,5, + 0,0,0,218,16,95,114,101,113,117,105,114,101,115,95,102, + 114,111,122,101,110,73,2,0,0,115,6,0,0,0,0,2, + 18,5,13,1,114,170,0,0,0,99,2,0,0,0,0,0, + 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,84, + 0,0,0,124,0,0,106,0,0,124,1,0,131,1,0,92, + 2,0,125,2,0,125,3,0,124,2,0,100,1,0,107,8, + 0,114,80,0,116,1,0,124,3,0,131,1,0,114,80,0, + 100,2,0,125,4,0,116,2,0,106,3,0,124,4,0,106, + 4,0,124,3,0,100,3,0,25,131,1,0,116,5,0,131, + 2,0,1,124,2,0,83,41,4,122,155,84,114,121,32,116, + 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,32,98,121,32,100,101,108,101, + 103,97,116,105,110,103,32,116,111,10,32,32,32,32,115,101, + 108,102,46,102,105,110,100,95,108,111,97,100,101,114,40,41, + 46,10,10,32,32,32,32,84,104,105,115,32,109,101,116,104, + 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 32,105,110,32,102,97,118,111,114,32,111,102,32,102,105,110, + 100,101,114,46,102,105,110,100,95,115,112,101,99,40,41,46, + 10,10,32,32,32,32,78,122,44,78,111,116,32,105,109,112, + 111,114,116,105,110,103,32,100,105,114,101,99,116,111,114,121, + 32,123,125,58,32,109,105,115,115,105,110,103,32,95,95,105, + 110,105,116,95,95,114,84,0,0,0,41,6,218,11,102,105, + 110,100,95,108,111,97,100,101,114,114,31,0,0,0,114,118, + 0,0,0,114,119,0,0,0,114,47,0,0,0,218,13,73, + 109,112,111,114,116,87,97,114,110,105,110,103,41,5,114,71, + 0,0,0,114,164,0,0,0,218,6,108,111,97,100,101,114, + 218,8,112,111,114,116,105,111,110,115,218,3,109,115,103,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, + 95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105, + 109,84,2,0,0,115,10,0,0,0,0,10,21,1,24,1, + 6,1,29,1,114,176,0,0,0,99,2,0,0,0,0,0, + 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,81, + 0,0,0,116,0,0,124,1,0,124,0,0,131,2,0,125, + 2,0,124,1,0,116,1,0,106,2,0,107,6,0,114,67, + 0,116,1,0,106,2,0,124,1,0,25,125,3,0,116,3, + 0,124,2,0,124,3,0,131,2,0,1,116,1,0,106,2, + 0,124,1,0,25,83,116,4,0,124,2,0,131,1,0,83, 100,1,0,83,41,2,122,128,76,111,97,100,32,116,104,101, 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, 101,32,105,110,116,111,32,115,121,115,46,109,111,100,117,108, @@ -1051,414 +1114,412 @@ const unsigned char _Py_M__importlib[] = { 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, 46,32,32,85,115,101,32,108,111,97,100,101,114,46,101,120, 101,99,95,109,111,100,117,108,101,32,105,110,115,116,101,97, - 100,46,10,10,32,32,32,32,78,41,6,218,16,115,112,101, - 99,95,102,114,111,109,95,108,111,97,100,101,114,218,12,95, - 83,112,101,99,77,101,116,104,111,100,115,114,7,0,0,0, - 114,73,0,0,0,218,4,101,120,101,99,218,4,108,111,97, - 100,41,5,114,71,0,0,0,114,159,0,0,0,218,4,115, - 112,101,99,218,7,109,101,116,104,111,100,115,218,6,109,111, - 100,117,108,101,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, - 101,95,115,104,105,109,71,2,0,0,115,14,0,0,0,0, - 6,15,1,12,1,15,1,13,1,13,1,11,2,114,181,0, - 0,0,99,4,0,0,0,0,0,0,0,11,0,0,0,19, - 0,0,0,67,0,0,0,115,243,1,0,0,105,0,0,125, - 4,0,124,2,0,100,1,0,107,9,0,114,31,0,124,2, - 0,124,4,0,100,2,0,60,110,6,0,100,3,0,125,2, - 0,124,3,0,100,1,0,107,9,0,114,62,0,124,3,0, - 124,4,0,100,4,0,60,110,0,0,124,0,0,100,1,0, - 100,5,0,133,2,0,25,125,5,0,124,0,0,100,5,0, - 100,6,0,133,2,0,25,125,6,0,124,0,0,100,6,0, - 100,7,0,133,2,0,25,125,7,0,124,5,0,116,0,0, - 107,3,0,114,168,0,100,8,0,106,1,0,124,2,0,124, - 5,0,131,2,0,125,8,0,116,2,0,124,8,0,131,1, - 0,1,116,3,0,124,8,0,124,4,0,141,1,0,130,1, - 0,110,116,0,116,4,0,124,6,0,131,1,0,100,5,0, - 107,3,0,114,226,0,100,9,0,106,1,0,124,2,0,131, - 1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,116, - 5,0,124,8,0,131,1,0,130,1,0,110,58,0,116,4, - 0,124,7,0,131,1,0,100,5,0,107,3,0,114,28,1, - 100,10,0,106,1,0,124,2,0,131,1,0,125,8,0,116, - 2,0,124,8,0,131,1,0,1,116,5,0,124,8,0,131, - 1,0,130,1,0,110,0,0,124,1,0,100,1,0,107,9, - 0,114,229,1,121,20,0,116,6,0,124,1,0,100,11,0, - 25,131,1,0,125,9,0,87,110,18,0,4,116,7,0,107, - 10,0,114,80,1,1,1,1,89,110,62,0,88,116,8,0, - 124,6,0,131,1,0,124,9,0,107,3,0,114,142,1,100, - 12,0,106,1,0,124,2,0,131,1,0,125,8,0,116,2, + 100,46,10,10,32,32,32,32,78,41,5,218,16,115,112,101, + 99,95,102,114,111,109,95,108,111,97,100,101,114,114,7,0, + 0,0,114,73,0,0,0,218,5,95,101,120,101,99,218,5, + 95,108,111,97,100,41,4,114,71,0,0,0,114,164,0,0, + 0,218,4,115,112,101,99,218,6,109,111,100,117,108,101,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, + 95,108,111,97,100,95,109,111,100,117,108,101,95,115,104,105, + 109,102,2,0,0,115,12,0,0,0,0,6,15,1,15,1, + 13,1,13,1,11,2,114,182,0,0,0,99,4,0,0,0, + 0,0,0,0,11,0,0,0,19,0,0,0,67,0,0,0, + 115,228,1,0,0,105,0,0,125,4,0,124,2,0,100,1, + 0,107,9,0,114,31,0,124,2,0,124,4,0,100,2,0, + 60,110,6,0,100,3,0,125,2,0,124,3,0,100,1,0, + 107,9,0,114,59,0,124,3,0,124,4,0,100,4,0,60, + 124,0,0,100,1,0,100,5,0,133,2,0,25,125,5,0, + 124,0,0,100,5,0,100,6,0,133,2,0,25,125,6,0, + 124,0,0,100,6,0,100,7,0,133,2,0,25,125,7,0, + 124,5,0,116,0,0,107,3,0,114,165,0,100,8,0,106, + 1,0,124,2,0,124,5,0,131,2,0,125,8,0,116,2, 0,124,8,0,131,1,0,1,116,3,0,124,8,0,124,4, - 0,141,1,0,130,1,0,110,0,0,121,18,0,124,1,0, + 0,141,1,0,130,1,0,110,113,0,116,4,0,124,6,0, + 131,1,0,100,5,0,107,3,0,114,223,0,100,9,0,106, + 1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,8, + 0,131,1,0,1,116,5,0,124,8,0,131,1,0,130,1, + 0,110,55,0,116,4,0,124,7,0,131,1,0,100,5,0, + 107,3,0,114,22,1,100,10,0,106,1,0,124,2,0,131, + 1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,116, + 5,0,124,8,0,131,1,0,130,1,0,124,1,0,100,1, + 0,107,9,0,114,214,1,121,20,0,116,6,0,124,1,0, + 100,11,0,25,131,1,0,125,9,0,87,110,18,0,4,116, + 7,0,107,10,0,114,74,1,1,1,1,89,110,59,0,88, + 116,8,0,124,6,0,131,1,0,124,9,0,107,3,0,114, + 133,1,100,12,0,106,1,0,124,2,0,131,1,0,125,8, + 0,116,2,0,124,8,0,131,1,0,1,116,3,0,124,8, + 0,124,4,0,141,1,0,130,1,0,121,18,0,124,1,0, 100,13,0,25,100,14,0,64,125,10,0,87,110,18,0,4, - 116,7,0,107,10,0,114,180,1,1,1,1,89,113,229,1, + 116,7,0,107,10,0,114,171,1,1,1,1,89,110,43,0, 88,116,8,0,124,7,0,131,1,0,124,10,0,107,3,0, - 114,229,1,116,3,0,100,12,0,106,1,0,124,2,0,131, - 1,0,124,4,0,141,1,0,130,1,0,113,229,1,110,0, - 0,124,0,0,100,7,0,100,1,0,133,2,0,25,83,41, - 15,97,122,1,0,0,86,97,108,105,100,97,116,101,32,116, - 104,101,32,104,101,97,100,101,114,32,111,102,32,116,104,101, - 32,112,97,115,115,101,100,45,105,110,32,98,121,116,101,99, - 111,100,101,32,97,103,97,105,110,115,116,32,115,111,117,114, - 99,101,95,115,116,97,116,115,32,40,105,102,10,32,32,32, - 32,103,105,118,101,110,41,32,97,110,100,32,114,101,116,117, - 114,110,105,110,103,32,116,104,101,32,98,121,116,101,99,111, - 100,101,32,116,104,97,116,32,99,97,110,32,98,101,32,99, - 111,109,112,105,108,101,100,32,98,121,32,99,111,109,112,105, - 108,101,40,41,46,10,10,32,32,32,32,65,108,108,32,111, - 116,104,101,114,32,97,114,103,117,109,101,110,116,115,32,97, - 114,101,32,117,115,101,100,32,116,111,32,101,110,104,97,110, - 99,101,32,101,114,114,111,114,32,114,101,112,111,114,116,105, - 110,103,46,10,10,32,32,32,32,73,109,112,111,114,116,69, - 114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,119, - 104,101,110,32,116,104,101,32,109,97,103,105,99,32,110,117, - 109,98,101,114,32,105,115,32,105,110,99,111,114,114,101,99, - 116,32,111,114,32,116,104,101,32,98,121,116,101,99,111,100, - 101,32,105,115,10,32,32,32,32,102,111,117,110,100,32,116, - 111,32,98,101,32,115,116,97,108,101,46,32,69,79,70,69, - 114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,119, - 104,101,110,32,116,104,101,32,100,97,116,97,32,105,115,32, - 102,111,117,110,100,32,116,111,32,98,101,10,32,32,32,32, - 116,114,117,110,99,97,116,101,100,46,10,10,32,32,32,32, - 78,114,67,0,0,0,122,10,60,98,121,116,101,99,111,100, - 101,62,114,35,0,0,0,114,12,0,0,0,233,8,0,0, - 0,233,12,0,0,0,122,30,98,97,100,32,109,97,103,105, - 99,32,110,117,109,98,101,114,32,105,110,32,123,33,114,125, - 58,32,123,33,114,125,122,43,114,101,97,99,104,101,100,32, - 69,79,70,32,119,104,105,108,101,32,114,101,97,100,105,110, - 103,32,116,105,109,101,115,116,97,109,112,32,105,110,32,123, - 33,114,125,122,48,114,101,97,99,104,101,100,32,69,79,70, - 32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,115, - 105,122,101,32,111,102,32,115,111,117,114,99,101,32,105,110, - 32,123,33,114,125,218,5,109,116,105,109,101,122,26,98,121, - 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32, - 102,111,114,32,123,33,114,125,218,4,115,105,122,101,108,3, - 0,0,0,255,127,255,127,3,0,41,9,218,12,77,65,71, - 73,67,95,78,85,77,66,69,82,114,47,0,0,0,114,153, - 0,0,0,114,154,0,0,0,114,31,0,0,0,218,8,69, - 79,70,69,114,114,111,114,114,14,0,0,0,114,79,0,0, - 0,114,19,0,0,0,41,11,114,53,0,0,0,218,12,115, - 111,117,114,99,101,95,115,116,97,116,115,114,67,0,0,0, - 114,35,0,0,0,90,11,101,120,99,95,100,101,116,97,105, - 108,115,90,5,109,97,103,105,99,90,13,114,97,119,95,116, - 105,109,101,115,116,97,109,112,90,8,114,97,119,95,115,105, - 122,101,114,152,0,0,0,218,12,115,111,117,114,99,101,95, - 109,116,105,109,101,218,11,115,111,117,114,99,101,95,115,105, - 122,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,25,95,118,97,108,105,100,97,116,101,95,98,121,116, - 101,99,111,100,101,95,104,101,97,100,101,114,87,2,0,0, - 115,76,0,0,0,0,11,6,1,12,1,13,3,6,1,12, - 1,13,1,16,1,16,1,16,1,12,1,18,1,10,1,18, - 1,18,1,15,1,10,1,15,1,18,1,15,1,10,1,15, - 1,12,1,3,1,20,1,13,1,5,2,18,1,15,1,10, - 1,18,1,3,1,18,1,13,1,5,2,18,1,15,1,15, - 1,114,191,0,0,0,99,4,0,0,0,0,0,0,0,5, - 0,0,0,6,0,0,0,67,0,0,0,115,115,0,0,0, - 116,0,0,106,1,0,124,0,0,131,1,0,125,4,0,116, - 2,0,124,4,0,116,3,0,131,2,0,114,78,0,116,4, - 0,100,1,0,124,2,0,131,2,0,1,124,3,0,100,2, - 0,107,9,0,114,74,0,116,5,0,106,6,0,124,4,0, - 124,3,0,131,2,0,1,110,0,0,124,4,0,83,116,7, - 0,100,3,0,106,8,0,124,2,0,131,1,0,100,4,0, - 124,1,0,100,5,0,124,2,0,131,1,2,130,1,0,100, - 2,0,83,41,6,122,60,67,111,109,112,105,108,101,32,98, - 121,116,101,99,111,100,101,32,97,115,32,114,101,116,117,114, - 110,101,100,32,98,121,32,95,118,97,108,105,100,97,116,101, - 95,98,121,116,101,99,111,100,101,95,104,101,97,100,101,114, - 40,41,46,122,21,99,111,100,101,32,111,98,106,101,99,116, - 32,102,114,111,109,32,123,33,114,125,78,122,23,78,111,110, - 45,99,111,100,101,32,111,98,106,101,99,116,32,105,110,32, - 123,33,114,125,114,67,0,0,0,114,35,0,0,0,41,9, - 218,7,109,97,114,115,104,97,108,90,5,108,111,97,100,115, - 218,10,105,115,105,110,115,116,97,110,99,101,218,10,95,99, - 111,100,101,95,116,121,112,101,114,153,0,0,0,114,106,0, - 0,0,90,16,95,102,105,120,95,99,111,95,102,105,108,101, - 110,97,109,101,114,154,0,0,0,114,47,0,0,0,41,5, - 114,53,0,0,0,114,67,0,0,0,114,141,0,0,0,114, - 142,0,0,0,218,4,99,111,100,101,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,17,95,99,111,109,112, - 105,108,101,95,98,121,116,101,99,111,100,101,142,2,0,0, - 115,16,0,0,0,0,2,15,1,15,1,13,1,12,1,19, - 1,4,2,18,1,114,196,0,0,0,114,84,0,0,0,99, - 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, - 67,0,0,0,115,76,0,0,0,116,0,0,116,1,0,131, - 1,0,125,3,0,124,3,0,106,2,0,116,3,0,124,1, - 0,131,1,0,131,1,0,1,124,3,0,106,2,0,116,3, - 0,124,2,0,131,1,0,131,1,0,1,124,3,0,106,2, - 0,116,4,0,106,5,0,124,0,0,131,1,0,131,1,0, - 1,124,3,0,83,41,1,122,80,67,111,109,112,105,108,101, - 32,97,32,99,111,100,101,32,111,98,106,101,99,116,32,105, - 110,116,111,32,98,121,116,101,99,111,100,101,32,102,111,114, - 32,119,114,105,116,105,110,103,32,111,117,116,32,116,111,32, - 97,32,98,121,116,101,45,99,111,109,112,105,108,101,100,10, - 32,32,32,32,102,105,108,101,46,41,6,218,9,98,121,116, - 101,97,114,114,97,121,114,186,0,0,0,218,6,101,120,116, - 101,110,100,114,17,0,0,0,114,192,0,0,0,90,5,100, - 117,109,112,115,41,4,114,195,0,0,0,114,184,0,0,0, - 114,190,0,0,0,114,53,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,17,95,99,111,100,101, - 95,116,111,95,98,121,116,101,99,111,100,101,154,2,0,0, - 115,10,0,0,0,0,3,12,1,19,1,19,1,22,1,114, - 199,0,0,0,99,1,0,0,0,0,0,0,0,5,0,0, - 0,4,0,0,0,67,0,0,0,115,89,0,0,0,100,1, - 0,100,2,0,108,0,0,125,1,0,116,1,0,106,2,0, - 124,0,0,131,1,0,106,3,0,125,2,0,124,1,0,106, - 4,0,124,2,0,131,1,0,125,3,0,116,1,0,106,5, - 0,100,2,0,100,3,0,131,2,0,125,4,0,124,4,0, - 106,6,0,124,0,0,106,6,0,124,3,0,100,1,0,25, - 131,1,0,131,1,0,83,41,4,122,121,68,101,99,111,100, - 101,32,98,121,116,101,115,32,114,101,112,114,101,115,101,110, - 116,105,110,103,32,115,111,117,114,99,101,32,99,111,100,101, - 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, - 115,116,114,105,110,103,46,10,10,32,32,32,32,85,110,105, - 118,101,114,115,97,108,32,110,101,119,108,105,110,101,32,115, - 117,112,112,111,114,116,32,105,115,32,117,115,101,100,32,105, - 110,32,116,104,101,32,100,101,99,111,100,105,110,103,46,10, - 32,32,32,32,114,84,0,0,0,78,84,41,7,218,8,116, - 111,107,101,110,105,122,101,114,49,0,0,0,90,7,66,121, - 116,101,115,73,79,90,8,114,101,97,100,108,105,110,101,90, - 15,100,101,116,101,99,116,95,101,110,99,111,100,105,110,103, - 90,25,73,110,99,114,101,109,101,110,116,97,108,78,101,119, - 108,105,110,101,68,101,99,111,100,101,114,218,6,100,101,99, - 111,100,101,41,5,218,12,115,111,117,114,99,101,95,98,121, - 116,101,115,114,200,0,0,0,90,21,115,111,117,114,99,101, - 95,98,121,116,101,115,95,114,101,97,100,108,105,110,101,218, - 8,101,110,99,111,100,105,110,103,90,15,110,101,119,108,105, - 110,101,95,100,101,99,111,100,101,114,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,13,100,101,99,111,100, - 101,95,115,111,117,114,99,101,164,2,0,0,115,10,0,0, - 0,0,5,12,1,18,1,15,1,18,1,114,204,0,0,0, - 99,1,0,0,0,0,0,0,0,5,0,0,0,35,0,0, - 0,67,0,0,0,115,15,1,0,0,116,0,0,124,0,0, - 100,1,0,100,0,0,131,3,0,125,1,0,116,1,0,124, - 1,0,100,2,0,131,2,0,114,74,0,121,17,0,124,1, - 0,106,2,0,124,0,0,131,1,0,83,87,113,74,0,4, - 116,3,0,107,10,0,114,70,0,1,1,1,89,113,74,0, - 88,110,0,0,121,13,0,124,0,0,106,4,0,125,2,0, - 87,110,18,0,4,116,5,0,107,10,0,114,107,0,1,1, - 1,89,110,29,0,88,124,2,0,100,0,0,107,9,0,114, - 136,0,116,6,0,124,2,0,131,1,0,106,2,0,131,0, - 0,83,121,13,0,124,0,0,106,7,0,125,3,0,87,110, - 24,0,4,116,5,0,107,10,0,114,175,0,1,1,1,100, - 3,0,125,3,0,89,110,1,0,88,121,13,0,124,0,0, - 106,8,0,125,4,0,87,110,59,0,4,116,5,0,107,10, - 0,114,250,0,1,1,1,124,1,0,100,0,0,107,8,0, - 114,230,0,100,4,0,106,9,0,124,3,0,131,1,0,83, - 100,5,0,106,9,0,124,3,0,124,1,0,131,2,0,83, - 89,110,17,0,88,100,6,0,106,9,0,124,3,0,124,4, - 0,131,2,0,83,100,0,0,83,41,7,78,218,10,95,95, - 108,111,97,100,101,114,95,95,218,11,109,111,100,117,108,101, - 95,114,101,112,114,250,1,63,122,13,60,109,111,100,117,108, - 101,32,123,33,114,125,62,122,20,60,109,111,100,117,108,101, - 32,123,33,114,125,32,40,123,33,114,125,41,62,122,23,60, - 109,111,100,117,108,101,32,123,33,114,125,32,102,114,111,109, - 32,123,33,114,125,62,41,10,114,62,0,0,0,114,60,0, - 0,0,114,206,0,0,0,218,9,69,120,99,101,112,116,105, - 111,110,218,8,95,95,115,112,101,99,95,95,218,14,65,116, - 116,114,105,98,117,116,101,69,114,114,111,114,114,175,0,0, - 0,114,57,0,0,0,218,8,95,95,102,105,108,101,95,95, - 114,47,0,0,0,41,5,114,180,0,0,0,114,170,0,0, - 0,114,178,0,0,0,114,67,0,0,0,114,131,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 12,95,109,111,100,117,108,101,95,114,101,112,114,178,2,0, - 0,115,46,0,0,0,0,2,18,1,15,4,3,1,17,1, - 13,1,8,1,3,1,13,1,13,1,5,2,12,1,16,4, - 3,1,13,1,13,1,11,1,3,1,13,1,13,1,12,1, - 13,2,21,2,114,212,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,52, - 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, - 1,0,100,2,0,132,0,0,90,3,0,100,3,0,100,4, - 0,132,0,0,90,4,0,100,5,0,100,6,0,132,0,0, - 90,5,0,100,7,0,83,41,8,218,17,95,105,110,115,116, - 97,108,108,101,100,95,115,97,102,101,108,121,99,2,0,0, - 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, - 0,115,25,0,0,0,124,1,0,124,0,0,95,0,0,124, - 1,0,106,1,0,124,0,0,95,2,0,100,0,0,83,41, - 1,78,41,3,218,7,95,109,111,100,117,108,101,114,209,0, - 0,0,218,5,95,115,112,101,99,41,2,114,71,0,0,0, - 114,180,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,72,0,0,0,216,2,0,0,115,4,0, - 0,0,0,1,9,1,122,26,95,105,110,115,116,97,108,108, - 101,100,95,115,97,102,101,108,121,46,95,95,105,110,105,116, - 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,115,38,0,0,0,100,1,0,124, - 0,0,106,0,0,95,1,0,124,0,0,106,2,0,116,3, - 0,106,4,0,124,0,0,106,0,0,106,5,0,60,100,0, - 0,83,41,2,78,84,41,6,114,215,0,0,0,218,13,95, - 105,110,105,116,105,97,108,105,122,105,110,103,114,214,0,0, - 0,114,7,0,0,0,114,73,0,0,0,114,67,0,0,0, - 41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,75,0,0,0,220,2,0,0,115, - 4,0,0,0,0,4,12,1,122,27,95,105,110,115,116,97, - 108,108,101,100,95,115,97,102,101,108,121,46,95,95,101,110, - 116,101,114,95,95,99,1,0,0,0,0,0,0,0,3,0, - 0,0,17,0,0,0,71,0,0,0,115,121,0,0,0,122, - 101,0,124,0,0,106,0,0,125,2,0,116,1,0,100,1, - 0,100,2,0,132,0,0,124,1,0,68,131,1,0,131,1, - 0,114,78,0,121,17,0,116,2,0,106,3,0,124,2,0, - 106,4,0,61,87,113,100,0,4,116,5,0,107,10,0,114, - 74,0,1,1,1,89,113,100,0,88,110,22,0,116,6,0, - 100,3,0,124,2,0,106,4,0,124,2,0,106,7,0,131, - 3,0,1,87,100,0,0,100,4,0,124,0,0,106,0,0, - 95,8,0,88,100,0,0,83,41,5,78,99,1,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,115,0,0,0, - 115,27,0,0,0,124,0,0,93,17,0,125,1,0,124,1, - 0,100,0,0,107,9,0,86,1,113,3,0,100,0,0,83, - 41,1,78,114,4,0,0,0,41,2,114,22,0,0,0,114, - 76,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,77,0,0,0,230,2,0,0,115,2,0,0, - 0,6,0,122,45,95,105,110,115,116,97,108,108,101,100,95, - 115,97,102,101,108,121,46,95,95,101,120,105,116,95,95,46, - 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, - 114,62,122,18,105,109,112,111,114,116,32,123,33,114,125,32, - 35,32,123,33,114,125,70,41,9,114,215,0,0,0,114,78, - 0,0,0,114,7,0,0,0,114,73,0,0,0,114,67,0, - 0,0,114,79,0,0,0,114,153,0,0,0,114,170,0,0, - 0,114,216,0,0,0,41,3,114,71,0,0,0,114,80,0, - 0,0,114,178,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,81,0,0,0,227,2,0,0,115, - 18,0,0,0,0,1,3,1,9,1,25,1,3,1,17,1, - 13,1,8,2,26,2,122,26,95,105,110,115,116,97,108,108, - 101,100,95,115,97,102,101,108,121,46,95,95,101,120,105,116, - 95,95,78,41,6,114,57,0,0,0,114,56,0,0,0,114, - 58,0,0,0,114,72,0,0,0,114,75,0,0,0,114,81, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,213,0,0,0,214,2,0,0, - 115,6,0,0,0,12,2,12,4,12,7,114,213,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0, - 0,64,0,0,0,115,172,0,0,0,101,0,0,90,1,0, - 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, - 3,0,100,4,0,100,3,0,100,5,0,100,3,0,100,6, - 0,100,7,0,132,0,3,90,4,0,100,8,0,100,9,0, - 132,0,0,90,5,0,100,10,0,100,11,0,132,0,0,90, - 6,0,101,7,0,100,12,0,100,13,0,132,0,0,131,1, - 0,90,8,0,101,8,0,106,9,0,100,14,0,100,13,0, - 132,0,0,131,1,0,90,8,0,101,7,0,100,15,0,100, - 16,0,132,0,0,131,1,0,90,10,0,101,7,0,100,17, - 0,100,18,0,132,0,0,131,1,0,90,11,0,101,11,0, - 106,9,0,100,19,0,100,18,0,132,0,0,131,1,0,90, - 11,0,100,3,0,83,41,20,218,10,77,111,100,117,108,101, - 83,112,101,99,97,208,5,0,0,84,104,101,32,115,112,101, - 99,105,102,105,99,97,116,105,111,110,32,102,111,114,32,97, - 32,109,111,100,117,108,101,44,32,117,115,101,100,32,102,111, - 114,32,108,111,97,100,105,110,103,46,10,10,32,32,32,32, - 65,32,109,111,100,117,108,101,39,115,32,115,112,101,99,32, - 105,115,32,116,104,101,32,115,111,117,114,99,101,32,102,111, - 114,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98, - 111,117,116,32,116,104,101,32,109,111,100,117,108,101,46,32, - 32,70,111,114,10,32,32,32,32,100,97,116,97,32,97,115, - 115,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104, - 101,32,109,111,100,117,108,101,44,32,105,110,99,108,117,100, - 105,110,103,32,115,111,117,114,99,101,44,32,117,115,101,32, - 116,104,101,32,115,112,101,99,39,115,10,32,32,32,32,108, - 111,97,100,101,114,46,10,10,32,32,32,32,96,110,97,109, - 101,96,32,105,115,32,116,104,101,32,97,98,115,111,108,117, - 116,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, - 111,100,117,108,101,46,32,32,96,108,111,97,100,101,114,96, - 32,105,115,32,116,104,101,32,108,111,97,100,101,114,10,32, - 32,32,32,116,111,32,117,115,101,32,119,104,101,110,32,108, - 111,97,100,105,110,103,32,116,104,101,32,109,111,100,117,108, - 101,46,32,32,96,112,97,114,101,110,116,96,32,105,115,32, - 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,10, - 32,32,32,32,112,97,99,107,97,103,101,32,116,104,101,32, - 109,111,100,117,108,101,32,105,115,32,105,110,46,32,32,84, - 104,101,32,112,97,114,101,110,116,32,105,115,32,100,101,114, - 105,118,101,100,32,102,114,111,109,32,116,104,101,32,110,97, - 109,101,46,10,10,32,32,32,32,96,105,115,95,112,97,99, - 107,97,103,101,96,32,100,101,116,101,114,109,105,110,101,115, - 32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,105, - 115,32,99,111,110,115,105,100,101,114,101,100,32,97,32,112, - 97,99,107,97,103,101,32,111,114,10,32,32,32,32,110,111, - 116,46,32,32,79,110,32,109,111,100,117,108,101,115,32,116, - 104,105,115,32,105,115,32,114,101,102,108,101,99,116,101,100, - 32,98,121,32,116,104,101,32,96,95,95,112,97,116,104,95, - 95,96,32,97,116,116,114,105,98,117,116,101,46,10,10,32, - 32,32,32,96,111,114,105,103,105,110,96,32,105,115,32,116, - 104,101,32,115,112,101,99,105,102,105,99,32,108,111,99,97, - 116,105,111,110,32,117,115,101,100,32,98,121,32,116,104,101, - 32,108,111,97,100,101,114,32,102,114,111,109,32,119,104,105, - 99,104,32,116,111,10,32,32,32,32,108,111,97,100,32,116, - 104,101,32,109,111,100,117,108,101,44,32,105,102,32,116,104, - 97,116,32,105,110,102,111,114,109,97,116,105,111,110,32,105, - 115,32,97,118,97,105,108,97,98,108,101,46,32,32,87,104, - 101,110,32,102,105,108,101,110,97,109,101,32,105,115,10,32, - 32,32,32,115,101,116,44,32,111,114,105,103,105,110,32,119, - 105,108,108,32,109,97,116,99,104,46,10,10,32,32,32,32, - 96,104,97,115,95,108,111,99,97,116,105,111,110,96,32,105, - 110,100,105,99,97,116,101,115,32,116,104,97,116,32,97,32, - 115,112,101,99,39,115,32,34,111,114,105,103,105,110,34,32, - 114,101,102,108,101,99,116,115,32,97,32,108,111,99,97,116, - 105,111,110,46,10,32,32,32,32,87,104,101,110,32,116,104, - 105,115,32,105,115,32,84,114,117,101,44,32,96,95,95,102, - 105,108,101,95,95,96,32,97,116,116,114,105,98,117,116,101, - 32,111,102,32,116,104,101,32,109,111,100,117,108,101,32,105, - 115,32,115,101,116,46,10,10,32,32,32,32,96,99,97,99, - 104,101,100,96,32,105,115,32,116,104,101,32,108,111,99,97, - 116,105,111,110,32,111,102,32,116,104,101,32,99,97,99,104, - 101,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 44,32,105,102,32,97,110,121,46,32,32,73,116,10,32,32, - 32,32,99,111,114,114,101,115,112,111,110,100,115,32,116,111, - 32,116,104,101,32,96,95,95,99,97,99,104,101,100,95,95, - 96,32,97,116,116,114,105,98,117,116,101,46,10,10,32,32, - 32,32,96,115,117,98,109,111,100,117,108,101,95,115,101,97, - 114,99,104,95,108,111,99,97,116,105,111,110,115,96,32,105, - 115,32,116,104,101,32,115,101,113,117,101,110,99,101,32,111, - 102,32,112,97,116,104,32,101,110,116,114,105,101,115,32,116, - 111,10,32,32,32,32,115,101,97,114,99,104,32,119,104,101, - 110,32,105,109,112,111,114,116,105,110,103,32,115,117,98,109, - 111,100,117,108,101,115,46,32,32,73,102,32,115,101,116,44, - 32,105,115,95,112,97,99,107,97,103,101,32,115,104,111,117, - 108,100,32,98,101,10,32,32,32,32,84,114,117,101,45,45, - 97,110,100,32,70,97,108,115,101,32,111,116,104,101,114,119, - 105,115,101,46,10,10,32,32,32,32,80,97,99,107,97,103, - 101,115,32,97,114,101,32,115,105,109,112,108,121,32,109,111, - 100,117,108,101,115,32,116,104,97,116,32,40,109,97,121,41, - 32,104,97,118,101,32,115,117,98,109,111,100,117,108,101,115, - 46,32,32,73,102,32,97,32,115,112,101,99,10,32,32,32, - 32,104,97,115,32,97,32,110,111,110,45,78,111,110,101,32, - 118,97,108,117,101,32,105,110,32,96,115,117,98,109,111,100, - 117,108,101,95,115,101,97,114,99,104,95,108,111,99,97,116, - 105,111,110,115,96,44,32,116,104,101,32,105,109,112,111,114, - 116,10,32,32,32,32,115,121,115,116,101,109,32,119,105,108, - 108,32,99,111,110,115,105,100,101,114,32,109,111,100,117,108, - 101,115,32,108,111,97,100,101,100,32,102,114,111,109,32,116, - 104,101,32,115,112,101,99,32,97,115,32,112,97,99,107,97, - 103,101,115,46,10,10,32,32,32,32,79,110,108,121,32,102, - 105,110,100,101,114,115,32,40,115,101,101,32,105,109,112,111, - 114,116,108,105,98,46,97,98,99,46,77,101,116,97,80,97, - 116,104,70,105,110,100,101,114,32,97,110,100,10,32,32,32, - 32,105,109,112,111,114,116,108,105,98,46,97,98,99,46,80, - 97,116,104,69,110,116,114,121,70,105,110,100,101,114,41,32, - 115,104,111,117,108,100,32,109,111,100,105,102,121,32,77,111, - 100,117,108,101,83,112,101,99,32,105,110,115,116,97,110,99, - 101,115,46,10,10,32,32,32,32,218,6,111,114,105,103,105, - 110,78,218,12,108,111,97,100,101,114,95,115,116,97,116,101, - 218,10,105,115,95,112,97,99,107,97,103,101,99,3,0,0, - 0,3,0,0,0,6,0,0,0,2,0,0,0,67,0,0, - 0,115,79,0,0,0,124,1,0,124,0,0,95,0,0,124, - 2,0,124,0,0,95,1,0,124,3,0,124,0,0,95,2, - 0,124,4,0,124,0,0,95,3,0,124,5,0,114,48,0, - 103,0,0,110,3,0,100,0,0,124,0,0,95,4,0,100, - 1,0,124,0,0,95,5,0,100,0,0,124,0,0,95,6, - 0,100,0,0,83,41,2,78,70,41,7,114,67,0,0,0, - 114,170,0,0,0,114,218,0,0,0,114,219,0,0,0,218, - 26,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, - 104,95,108,111,99,97,116,105,111,110,115,218,13,95,115,101, - 116,95,102,105,108,101,97,116,116,114,218,7,95,99,97,99, - 104,101,100,41,6,114,71,0,0,0,114,67,0,0,0,114, - 170,0,0,0,114,218,0,0,0,114,219,0,0,0,114,220, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,72,0,0,0,22,3,0,0,115,14,0,0,0, - 0,2,9,1,9,1,9,1,9,1,21,3,9,1,122,19, - 77,111,100,117,108,101,83,112,101,99,46,95,95,105,110,105, - 116,95,95,99,1,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,67,0,0,0,115,153,0,0,0,100,1,0, - 106,0,0,124,0,0,106,1,0,131,1,0,100,2,0,106, - 0,0,124,0,0,106,2,0,131,1,0,103,2,0,125,1, - 0,124,0,0,106,3,0,100,0,0,107,9,0,114,79,0, - 124,1,0,106,4,0,100,3,0,106,0,0,124,0,0,106, - 3,0,131,1,0,131,1,0,1,110,0,0,124,0,0,106, - 5,0,100,0,0,107,9,0,114,122,0,124,1,0,106,4, - 0,100,4,0,106,0,0,124,0,0,106,5,0,131,1,0, - 131,1,0,1,110,0,0,100,5,0,106,0,0,124,0,0, + 114,214,1,116,3,0,100,12,0,106,1,0,124,2,0,131, + 1,0,124,4,0,141,1,0,130,1,0,124,0,0,100,7, + 0,100,1,0,133,2,0,25,83,41,15,97,122,1,0,0, + 86,97,108,105,100,97,116,101,32,116,104,101,32,104,101,97, + 100,101,114,32,111,102,32,116,104,101,32,112,97,115,115,101, + 100,45,105,110,32,98,121,116,101,99,111,100,101,32,97,103, + 97,105,110,115,116,32,115,111,117,114,99,101,95,115,116,97, + 116,115,32,40,105,102,10,32,32,32,32,103,105,118,101,110, + 41,32,97,110,100,32,114,101,116,117,114,110,105,110,103,32, + 116,104,101,32,98,121,116,101,99,111,100,101,32,116,104,97, + 116,32,99,97,110,32,98,101,32,99,111,109,112,105,108,101, + 100,32,98,121,32,99,111,109,112,105,108,101,40,41,46,10, + 10,32,32,32,32,65,108,108,32,111,116,104,101,114,32,97, + 114,103,117,109,101,110,116,115,32,97,114,101,32,117,115,101, + 100,32,116,111,32,101,110,104,97,110,99,101,32,101,114,114, + 111,114,32,114,101,112,111,114,116,105,110,103,46,10,10,32, + 32,32,32,73,109,112,111,114,116,69,114,114,111,114,32,105, + 115,32,114,97,105,115,101,100,32,119,104,101,110,32,116,104, + 101,32,109,97,103,105,99,32,110,117,109,98,101,114,32,105, + 115,32,105,110,99,111,114,114,101,99,116,32,111,114,32,116, + 104,101,32,98,121,116,101,99,111,100,101,32,105,115,10,32, + 32,32,32,102,111,117,110,100,32,116,111,32,98,101,32,115, + 116,97,108,101,46,32,69,79,70,69,114,114,111,114,32,105, + 115,32,114,97,105,115,101,100,32,119,104,101,110,32,116,104, + 101,32,100,97,116,97,32,105,115,32,102,111,117,110,100,32, + 116,111,32,98,101,10,32,32,32,32,116,114,117,110,99,97, + 116,101,100,46,10,10,32,32,32,32,78,114,67,0,0,0, + 122,10,60,98,121,116,101,99,111,100,101,62,114,35,0,0, + 0,114,12,0,0,0,233,8,0,0,0,233,12,0,0,0, + 122,30,98,97,100,32,109,97,103,105,99,32,110,117,109,98, + 101,114,32,105,110,32,123,33,114,125,58,32,123,33,114,125, + 122,43,114,101,97,99,104,101,100,32,69,79,70,32,119,104, + 105,108,101,32,114,101,97,100,105,110,103,32,116,105,109,101, + 115,116,97,109,112,32,105,110,32,123,33,114,125,122,48,114, + 101,97,99,104,101,100,32,69,79,70,32,119,104,105,108,101, + 32,114,101,97,100,105,110,103,32,115,105,122,101,32,111,102, + 32,115,111,117,114,99,101,32,105,110,32,123,33,114,125,218, + 5,109,116,105,109,101,122,26,98,121,116,101,99,111,100,101, + 32,105,115,32,115,116,97,108,101,32,102,111,114,32,123,33, + 114,125,218,4,115,105,122,101,108,3,0,0,0,255,127,255, + 127,3,0,41,9,218,12,77,65,71,73,67,95,78,85,77, + 66,69,82,114,47,0,0,0,114,158,0,0,0,114,159,0, + 0,0,114,31,0,0,0,218,8,69,79,70,69,114,114,111, + 114,114,14,0,0,0,114,79,0,0,0,114,19,0,0,0, + 41,11,114,53,0,0,0,218,12,115,111,117,114,99,101,95, + 115,116,97,116,115,114,67,0,0,0,114,35,0,0,0,90, + 11,101,120,99,95,100,101,116,97,105,108,115,90,5,109,97, + 103,105,99,90,13,114,97,119,95,116,105,109,101,115,116,97, + 109,112,90,8,114,97,119,95,115,105,122,101,114,133,0,0, + 0,218,12,115,111,117,114,99,101,95,109,116,105,109,101,218, + 11,115,111,117,114,99,101,95,115,105,122,101,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,25,95,118,97, + 108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,95, + 104,101,97,100,101,114,117,2,0,0,115,76,0,0,0,0, + 11,6,1,12,1,13,3,6,1,12,1,10,1,16,1,16, + 1,16,1,12,1,18,1,10,1,18,1,18,1,15,1,10, + 1,15,1,18,1,15,1,10,1,12,1,12,1,3,1,20, + 1,13,1,5,2,18,1,15,1,10,1,15,1,3,1,18, + 1,13,1,5,2,18,1,15,1,9,1,114,192,0,0,0, + 99,4,0,0,0,0,0,0,0,5,0,0,0,6,0,0, + 0,67,0,0,0,115,112,0,0,0,116,0,0,106,1,0, + 124,0,0,131,1,0,125,4,0,116,2,0,124,4,0,116, + 3,0,131,2,0,114,75,0,116,4,0,100,1,0,124,2, + 0,131,2,0,1,124,3,0,100,2,0,107,9,0,114,71, + 0,116,5,0,106,6,0,124,4,0,124,3,0,131,2,0, + 1,124,4,0,83,116,7,0,100,3,0,106,8,0,124,2, + 0,131,1,0,100,4,0,124,1,0,100,5,0,124,2,0, + 131,1,2,130,1,0,100,2,0,83,41,6,122,60,67,111, + 109,112,105,108,101,32,98,121,116,101,99,111,100,101,32,97, + 115,32,114,101,116,117,114,110,101,100,32,98,121,32,95,118, + 97,108,105,100,97,116,101,95,98,121,116,101,99,111,100,101, + 95,104,101,97,100,101,114,40,41,46,122,21,99,111,100,101, + 32,111,98,106,101,99,116,32,102,114,111,109,32,123,33,114, + 125,78,122,23,78,111,110,45,99,111,100,101,32,111,98,106, + 101,99,116,32,105,110,32,123,33,114,125,114,67,0,0,0, + 114,35,0,0,0,41,9,218,7,109,97,114,115,104,97,108, + 90,5,108,111,97,100,115,218,10,105,115,105,110,115,116,97, + 110,99,101,218,10,95,99,111,100,101,95,116,121,112,101,114, + 158,0,0,0,114,106,0,0,0,90,16,95,102,105,120,95, + 99,111,95,102,105,108,101,110,97,109,101,114,159,0,0,0, + 114,47,0,0,0,41,5,114,53,0,0,0,114,67,0,0, + 0,114,147,0,0,0,114,148,0,0,0,218,4,99,111,100, + 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,17,95,99,111,109,112,105,108,101,95,98,121,116,101,99, + 111,100,101,172,2,0,0,115,16,0,0,0,0,2,15,1, + 15,1,13,1,12,1,16,1,4,2,18,1,114,197,0,0, + 0,114,84,0,0,0,99,3,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,67,0,0,0,115,76,0,0,0, + 116,0,0,116,1,0,131,1,0,125,3,0,124,3,0,106, + 2,0,116,3,0,124,1,0,131,1,0,131,1,0,1,124, + 3,0,106,2,0,116,3,0,124,2,0,131,1,0,131,1, + 0,1,124,3,0,106,2,0,116,4,0,106,5,0,124,0, + 0,131,1,0,131,1,0,1,124,3,0,83,41,1,122,80, + 67,111,109,112,105,108,101,32,97,32,99,111,100,101,32,111, + 98,106,101,99,116,32,105,110,116,111,32,98,121,116,101,99, + 111,100,101,32,102,111,114,32,119,114,105,116,105,110,103,32, + 111,117,116,32,116,111,32,97,32,98,121,116,101,45,99,111, + 109,112,105,108,101,100,10,32,32,32,32,102,105,108,101,46, + 41,6,218,9,98,121,116,101,97,114,114,97,121,114,187,0, + 0,0,218,6,101,120,116,101,110,100,114,17,0,0,0,114, + 193,0,0,0,90,5,100,117,109,112,115,41,4,114,196,0, + 0,0,114,185,0,0,0,114,191,0,0,0,114,53,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,17,95,99,111,100,101,95,116,111,95,98,121,116,101,99, + 111,100,101,184,2,0,0,115,10,0,0,0,0,3,12,1, + 19,1,19,1,22,1,114,200,0,0,0,99,1,0,0,0, + 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, + 115,89,0,0,0,100,1,0,100,2,0,108,0,0,125,1, + 0,116,1,0,106,2,0,124,0,0,131,1,0,106,3,0, + 125,2,0,124,1,0,106,4,0,124,2,0,131,1,0,125, + 3,0,116,1,0,106,5,0,100,2,0,100,3,0,131,2, + 0,125,4,0,124,4,0,106,6,0,124,0,0,106,6,0, + 124,3,0,100,1,0,25,131,1,0,131,1,0,83,41,4, + 122,121,68,101,99,111,100,101,32,98,121,116,101,115,32,114, + 101,112,114,101,115,101,110,116,105,110,103,32,115,111,117,114, + 99,101,32,99,111,100,101,32,97,110,100,32,114,101,116,117, + 114,110,32,116,104,101,32,115,116,114,105,110,103,46,10,10, + 32,32,32,32,85,110,105,118,101,114,115,97,108,32,110,101, + 119,108,105,110,101,32,115,117,112,112,111,114,116,32,105,115, + 32,117,115,101,100,32,105,110,32,116,104,101,32,100,101,99, + 111,100,105,110,103,46,10,32,32,32,32,114,84,0,0,0, + 78,84,41,7,218,8,116,111,107,101,110,105,122,101,114,49, + 0,0,0,90,7,66,121,116,101,115,73,79,90,8,114,101, + 97,100,108,105,110,101,90,15,100,101,116,101,99,116,95,101, + 110,99,111,100,105,110,103,90,25,73,110,99,114,101,109,101, + 110,116,97,108,78,101,119,108,105,110,101,68,101,99,111,100, + 101,114,218,6,100,101,99,111,100,101,41,5,218,12,115,111, + 117,114,99,101,95,98,121,116,101,115,114,201,0,0,0,90, + 21,115,111,117,114,99,101,95,98,121,116,101,115,95,114,101, + 97,100,108,105,110,101,218,8,101,110,99,111,100,105,110,103, + 90,15,110,101,119,108,105,110,101,95,100,101,99,111,100,101, + 114,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,13,100,101,99,111,100,101,95,115,111,117,114,99,101,194, + 2,0,0,115,10,0,0,0,0,5,12,1,18,1,15,1, + 18,1,114,205,0,0,0,99,1,0,0,0,0,0,0,0, + 5,0,0,0,35,0,0,0,67,0,0,0,115,6,1,0, + 0,116,0,0,124,0,0,100,1,0,100,0,0,131,3,0, + 125,1,0,116,1,0,124,1,0,100,2,0,131,2,0,114, + 71,0,121,17,0,124,1,0,106,2,0,124,0,0,131,1, + 0,83,87,110,18,0,4,116,3,0,107,10,0,114,70,0, + 1,1,1,89,110,1,0,88,121,13,0,124,0,0,106,4, + 0,125,2,0,87,110,18,0,4,116,5,0,107,10,0,114, + 104,0,1,1,1,89,110,23,0,88,124,2,0,100,0,0, + 107,9,0,114,127,0,116,6,0,124,2,0,131,1,0,83, + 121,13,0,124,0,0,106,7,0,125,3,0,87,110,24,0, + 4,116,5,0,107,10,0,114,166,0,1,1,1,100,3,0, + 125,3,0,89,110,1,0,88,121,13,0,124,0,0,106,8, + 0,125,4,0,87,110,59,0,4,116,5,0,107,10,0,114, + 241,0,1,1,1,124,1,0,100,0,0,107,8,0,114,221, + 0,100,4,0,106,9,0,124,3,0,131,1,0,83,100,5, + 0,106,9,0,124,3,0,124,1,0,131,2,0,83,89,110, + 17,0,88,100,6,0,106,9,0,124,3,0,124,4,0,131, + 2,0,83,100,0,0,83,41,7,78,218,10,95,95,108,111, + 97,100,101,114,95,95,218,11,109,111,100,117,108,101,95,114, + 101,112,114,250,1,63,122,13,60,109,111,100,117,108,101,32, + 123,33,114,125,62,122,20,60,109,111,100,117,108,101,32,123, + 33,114,125,32,40,123,33,114,125,41,62,122,23,60,109,111, + 100,117,108,101,32,123,33,114,125,32,102,114,111,109,32,123, + 33,114,125,62,41,10,114,62,0,0,0,114,60,0,0,0, + 114,207,0,0,0,218,9,69,120,99,101,112,116,105,111,110, + 218,8,95,95,115,112,101,99,95,95,218,14,65,116,116,114, + 105,98,117,116,101,69,114,114,111,114,218,22,95,109,111,100, + 117,108,101,95,114,101,112,114,95,102,114,111,109,95,115,112, + 101,99,114,57,0,0,0,218,8,95,95,102,105,108,101,95, + 95,114,47,0,0,0,41,5,114,181,0,0,0,114,173,0, + 0,0,114,180,0,0,0,114,67,0,0,0,218,8,102,105, + 108,101,110,97,109,101,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,12,95,109,111,100,117,108,101,95,114, + 101,112,114,208,2,0,0,115,46,0,0,0,0,2,18,1, + 15,4,3,1,17,1,13,1,5,1,3,1,13,1,13,1, + 5,2,12,1,10,4,3,1,13,1,13,1,11,1,3,1, + 13,1,13,1,12,1,13,2,21,2,114,215,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3, + 0,100,3,0,100,4,0,132,0,0,90,4,0,100,5,0, + 100,6,0,132,0,0,90,5,0,100,7,0,83,41,8,218, + 17,95,105,110,115,116,97,108,108,101,100,95,115,97,102,101, + 108,121,99,2,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,115,25,0,0,0,124,1,0,124, + 0,0,95,0,0,124,1,0,106,1,0,124,0,0,95,2, + 0,100,0,0,83,41,1,78,41,3,218,7,95,109,111,100, + 117,108,101,114,210,0,0,0,218,5,95,115,112,101,99,41, + 2,114,71,0,0,0,114,181,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,72,0,0,0,246, + 2,0,0,115,4,0,0,0,0,1,9,1,122,26,95,105, + 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, + 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, + 0,1,0,0,0,3,0,0,0,67,0,0,0,115,38,0, + 0,0,100,1,0,124,0,0,106,0,0,95,1,0,124,0, + 0,106,2,0,116,3,0,106,4,0,124,0,0,106,0,0, + 106,5,0,60,100,0,0,83,41,2,78,84,41,6,114,218, + 0,0,0,218,13,95,105,110,105,116,105,97,108,105,122,105, + 110,103,114,217,0,0,0,114,7,0,0,0,114,73,0,0, + 0,114,67,0,0,0,41,1,114,71,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,75,0,0, + 0,250,2,0,0,115,4,0,0,0,0,4,12,1,122,27, + 95,105,110,115,116,97,108,108,101,100,95,115,97,102,101,108, + 121,46,95,95,101,110,116,101,114,95,95,99,1,0,0,0, + 0,0,0,0,3,0,0,0,17,0,0,0,71,0,0,0, + 115,121,0,0,0,122,101,0,124,0,0,106,0,0,125,2, + 0,116,1,0,100,1,0,100,2,0,132,0,0,124,1,0, + 68,131,1,0,131,1,0,114,78,0,121,17,0,116,2,0, + 106,3,0,124,2,0,106,4,0,61,87,113,100,0,4,116, + 5,0,107,10,0,114,74,0,1,1,1,89,113,100,0,88, + 110,22,0,116,6,0,100,3,0,124,2,0,106,4,0,124, + 2,0,106,7,0,131,3,0,1,87,100,0,0,100,4,0, + 124,0,0,106,0,0,95,8,0,88,100,0,0,83,41,5, + 78,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,115,0,0,0,115,27,0,0,0,124,0,0,93,17, + 0,125,1,0,124,1,0,100,0,0,107,9,0,86,1,113, + 3,0,100,0,0,83,41,1,78,114,4,0,0,0,41,2, + 114,22,0,0,0,114,76,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,77,0,0,0,4,3, + 0,0,115,2,0,0,0,6,0,122,45,95,105,110,115,116, + 97,108,108,101,100,95,115,97,102,101,108,121,46,95,95,101, + 120,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, + 103,101,110,101,120,112,114,62,122,18,105,109,112,111,114,116, + 32,123,33,114,125,32,35,32,123,33,114,125,70,41,9,114, + 218,0,0,0,114,78,0,0,0,114,7,0,0,0,114,73, + 0,0,0,114,67,0,0,0,114,79,0,0,0,114,158,0, + 0,0,114,173,0,0,0,114,219,0,0,0,41,3,114,71, + 0,0,0,114,80,0,0,0,114,180,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,81,0,0, + 0,1,3,0,0,115,18,0,0,0,0,1,3,1,9,1, + 25,1,3,1,17,1,13,1,8,2,26,2,122,26,95,105, + 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, + 95,95,101,120,105,116,95,95,78,41,6,114,57,0,0,0, + 114,56,0,0,0,114,58,0,0,0,114,72,0,0,0,114, + 75,0,0,0,114,81,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,216,0, + 0,0,244,2,0,0,115,6,0,0,0,12,2,12,4,12, + 7,114,216,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,8,0,0,0,64,0,0,0,115,172,0,0,0, + 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, + 3,0,100,2,0,100,3,0,100,4,0,100,3,0,100,5, + 0,100,3,0,100,6,0,100,7,0,132,0,3,90,4,0, + 100,8,0,100,9,0,132,0,0,90,5,0,100,10,0,100, + 11,0,132,0,0,90,6,0,101,7,0,100,12,0,100,13, + 0,132,0,0,131,1,0,90,8,0,101,8,0,106,9,0, + 100,14,0,100,13,0,132,0,0,131,1,0,90,8,0,101, + 7,0,100,15,0,100,16,0,132,0,0,131,1,0,90,10, + 0,101,7,0,100,17,0,100,18,0,132,0,0,131,1,0, + 90,11,0,101,11,0,106,9,0,100,19,0,100,18,0,132, + 0,0,131,1,0,90,11,0,100,3,0,83,41,20,218,10, + 77,111,100,117,108,101,83,112,101,99,97,208,5,0,0,84, + 104,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110, + 32,102,111,114,32,97,32,109,111,100,117,108,101,44,32,117, + 115,101,100,32,102,111,114,32,108,111,97,100,105,110,103,46, + 10,10,32,32,32,32,65,32,109,111,100,117,108,101,39,115, + 32,115,112,101,99,32,105,115,32,116,104,101,32,115,111,117, + 114,99,101,32,102,111,114,32,105,110,102,111,114,109,97,116, + 105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,111, + 100,117,108,101,46,32,32,70,111,114,10,32,32,32,32,100, + 97,116,97,32,97,115,115,111,99,105,97,116,101,100,32,119, + 105,116,104,32,116,104,101,32,109,111,100,117,108,101,44,32, + 105,110,99,108,117,100,105,110,103,32,115,111,117,114,99,101, + 44,32,117,115,101,32,116,104,101,32,115,112,101,99,39,115, + 10,32,32,32,32,108,111,97,100,101,114,46,10,10,32,32, + 32,32,96,110,97,109,101,96,32,105,115,32,116,104,101,32, + 97,98,115,111,108,117,116,101,32,110,97,109,101,32,111,102, + 32,116,104,101,32,109,111,100,117,108,101,46,32,32,96,108, + 111,97,100,101,114,96,32,105,115,32,116,104,101,32,108,111, + 97,100,101,114,10,32,32,32,32,116,111,32,117,115,101,32, + 119,104,101,110,32,108,111,97,100,105,110,103,32,116,104,101, + 32,109,111,100,117,108,101,46,32,32,96,112,97,114,101,110, + 116,96,32,105,115,32,116,104,101,32,110,97,109,101,32,111, + 102,32,116,104,101,10,32,32,32,32,112,97,99,107,97,103, + 101,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32, + 105,110,46,32,32,84,104,101,32,112,97,114,101,110,116,32, + 105,115,32,100,101,114,105,118,101,100,32,102,114,111,109,32, + 116,104,101,32,110,97,109,101,46,10,10,32,32,32,32,96, + 105,115,95,112,97,99,107,97,103,101,96,32,100,101,116,101, + 114,109,105,110,101,115,32,105,102,32,116,104,101,32,109,111, + 100,117,108,101,32,105,115,32,99,111,110,115,105,100,101,114, + 101,100,32,97,32,112,97,99,107,97,103,101,32,111,114,10, + 32,32,32,32,110,111,116,46,32,32,79,110,32,109,111,100, + 117,108,101,115,32,116,104,105,115,32,105,115,32,114,101,102, + 108,101,99,116,101,100,32,98,121,32,116,104,101,32,96,95, + 95,112,97,116,104,95,95,96,32,97,116,116,114,105,98,117, + 116,101,46,10,10,32,32,32,32,96,111,114,105,103,105,110, + 96,32,105,115,32,116,104,101,32,115,112,101,99,105,102,105, + 99,32,108,111,99,97,116,105,111,110,32,117,115,101,100,32, + 98,121,32,116,104,101,32,108,111,97,100,101,114,32,102,114, + 111,109,32,119,104,105,99,104,32,116,111,10,32,32,32,32, + 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,44, + 32,105,102,32,116,104,97,116,32,105,110,102,111,114,109,97, + 116,105,111,110,32,105,115,32,97,118,97,105,108,97,98,108, + 101,46,32,32,87,104,101,110,32,102,105,108,101,110,97,109, + 101,32,105,115,10,32,32,32,32,115,101,116,44,32,111,114, + 105,103,105,110,32,119,105,108,108,32,109,97,116,99,104,46, + 10,10,32,32,32,32,96,104,97,115,95,108,111,99,97,116, + 105,111,110,96,32,105,110,100,105,99,97,116,101,115,32,116, + 104,97,116,32,97,32,115,112,101,99,39,115,32,34,111,114, + 105,103,105,110,34,32,114,101,102,108,101,99,116,115,32,97, + 32,108,111,99,97,116,105,111,110,46,10,32,32,32,32,87, + 104,101,110,32,116,104,105,115,32,105,115,32,84,114,117,101, + 44,32,96,95,95,102,105,108,101,95,95,96,32,97,116,116, + 114,105,98,117,116,101,32,111,102,32,116,104,101,32,109,111, + 100,117,108,101,32,105,115,32,115,101,116,46,10,10,32,32, + 32,32,96,99,97,99,104,101,100,96,32,105,115,32,116,104, + 101,32,108,111,99,97,116,105,111,110,32,111,102,32,116,104, + 101,32,99,97,99,104,101,100,32,98,121,116,101,99,111,100, + 101,32,102,105,108,101,44,32,105,102,32,97,110,121,46,32, + 32,73,116,10,32,32,32,32,99,111,114,114,101,115,112,111, + 110,100,115,32,116,111,32,116,104,101,32,96,95,95,99,97, + 99,104,101,100,95,95,96,32,97,116,116,114,105,98,117,116, + 101,46,10,10,32,32,32,32,96,115,117,98,109,111,100,117, + 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, + 111,110,115,96,32,105,115,32,116,104,101,32,115,101,113,117, + 101,110,99,101,32,111,102,32,112,97,116,104,32,101,110,116, + 114,105,101,115,32,116,111,10,32,32,32,32,115,101,97,114, + 99,104,32,119,104,101,110,32,105,109,112,111,114,116,105,110, + 103,32,115,117,98,109,111,100,117,108,101,115,46,32,32,73, + 102,32,115,101,116,44,32,105,115,95,112,97,99,107,97,103, + 101,32,115,104,111,117,108,100,32,98,101,10,32,32,32,32, + 84,114,117,101,45,45,97,110,100,32,70,97,108,115,101,32, + 111,116,104,101,114,119,105,115,101,46,10,10,32,32,32,32, + 80,97,99,107,97,103,101,115,32,97,114,101,32,115,105,109, + 112,108,121,32,109,111,100,117,108,101,115,32,116,104,97,116, + 32,40,109,97,121,41,32,104,97,118,101,32,115,117,98,109, + 111,100,117,108,101,115,46,32,32,73,102,32,97,32,115,112, + 101,99,10,32,32,32,32,104,97,115,32,97,32,110,111,110, + 45,78,111,110,101,32,118,97,108,117,101,32,105,110,32,96, + 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, + 95,108,111,99,97,116,105,111,110,115,96,44,32,116,104,101, + 32,105,109,112,111,114,116,10,32,32,32,32,115,121,115,116, + 101,109,32,119,105,108,108,32,99,111,110,115,105,100,101,114, + 32,109,111,100,117,108,101,115,32,108,111,97,100,101,100,32, + 102,114,111,109,32,116,104,101,32,115,112,101,99,32,97,115, + 32,112,97,99,107,97,103,101,115,46,10,10,32,32,32,32, + 79,110,108,121,32,102,105,110,100,101,114,115,32,40,115,101, + 101,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, + 77,101,116,97,80,97,116,104,70,105,110,100,101,114,32,97, + 110,100,10,32,32,32,32,105,109,112,111,114,116,108,105,98, + 46,97,98,99,46,80,97,116,104,69,110,116,114,121,70,105, + 110,100,101,114,41,32,115,104,111,117,108,100,32,109,111,100, + 105,102,121,32,77,111,100,117,108,101,83,112,101,99,32,105, + 110,115,116,97,110,99,101,115,46,10,10,32,32,32,32,218, + 6,111,114,105,103,105,110,78,218,12,108,111,97,100,101,114, + 95,115,116,97,116,101,218,10,105,115,95,112,97,99,107,97, + 103,101,99,3,0,0,0,3,0,0,0,6,0,0,0,2, + 0,0,0,67,0,0,0,115,79,0,0,0,124,1,0,124, + 0,0,95,0,0,124,2,0,124,0,0,95,1,0,124,3, + 0,124,0,0,95,2,0,124,4,0,124,0,0,95,3,0, + 124,5,0,114,48,0,103,0,0,110,3,0,100,0,0,124, + 0,0,95,4,0,100,1,0,124,0,0,95,5,0,100,0, + 0,124,0,0,95,6,0,100,0,0,83,41,2,78,70,41, + 7,114,67,0,0,0,114,173,0,0,0,114,221,0,0,0, + 114,222,0,0,0,218,26,115,117,98,109,111,100,117,108,101, + 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, + 115,218,13,95,115,101,116,95,102,105,108,101,97,116,116,114, + 218,7,95,99,97,99,104,101,100,41,6,114,71,0,0,0, + 114,67,0,0,0,114,173,0,0,0,114,221,0,0,0,114, + 222,0,0,0,114,223,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,72,0,0,0,52,3,0, + 0,115,14,0,0,0,0,2,9,1,9,1,9,1,9,1, + 21,3,9,1,122,19,77,111,100,117,108,101,83,112,101,99, + 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,147, + 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, + 1,0,100,2,0,106,0,0,124,0,0,106,2,0,131,1, + 0,103,2,0,125,1,0,124,0,0,106,3,0,100,0,0, + 107,9,0,114,76,0,124,1,0,106,4,0,100,3,0,106, + 0,0,124,0,0,106,3,0,131,1,0,131,1,0,1,124, + 0,0,106,5,0,100,0,0,107,9,0,114,116,0,124,1, + 0,106,4,0,100,4,0,106,0,0,124,0,0,106,5,0, + 131,1,0,131,1,0,1,100,5,0,106,0,0,124,0,0, 106,6,0,106,7,0,100,6,0,106,8,0,124,1,0,131, 1,0,131,2,0,83,41,7,78,122,9,110,97,109,101,61, 123,33,114,125,122,11,108,111,97,100,101,114,61,123,33,114, @@ -1466,13 +1527,13 @@ const unsigned char _Py_M__importlib[] = { 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, 95,108,111,99,97,116,105,111,110,115,61,123,125,122,6,123, 125,40,123,125,41,122,2,44,32,41,9,114,47,0,0,0, - 114,67,0,0,0,114,170,0,0,0,114,218,0,0,0,218, - 6,97,112,112,101,110,100,114,221,0,0,0,218,9,95,95, + 114,67,0,0,0,114,173,0,0,0,114,221,0,0,0,218, + 6,97,112,112,101,110,100,114,224,0,0,0,218,9,95,95, 99,108,97,115,115,95,95,114,57,0,0,0,114,26,0,0, 0,41,2,114,71,0,0,0,114,80,0,0,0,114,4,0, 0,0,114,4,0,0,0,114,5,0,0,0,114,101,0,0, - 0,34,3,0,0,115,16,0,0,0,0,1,15,1,21,1, - 15,1,28,1,15,1,12,1,16,1,122,19,77,111,100,117, + 0,64,3,0,0,115,16,0,0,0,0,1,15,1,21,1, + 15,1,25,1,15,1,12,1,13,1,122,19,77,111,100,117, 108,101,83,112,101,99,46,95,95,114,101,112,114,95,95,99, 2,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0, 67,0,0,0,115,145,0,0,0,124,0,0,106,0,0,125, @@ -1485,1010 +1546,923 @@ const unsigned char _Py_M__importlib[] = { 5,0,124,1,0,106,5,0,107,2,0,83,87,110,22,0, 4,116,6,0,107,10,0,114,140,0,1,1,1,100,1,0, 83,89,110,1,0,88,100,0,0,83,41,2,78,70,41,7, - 114,221,0,0,0,114,67,0,0,0,114,170,0,0,0,114, - 218,0,0,0,218,6,99,97,99,104,101,100,218,12,104,97, - 115,95,108,111,99,97,116,105,111,110,114,210,0,0,0,41, + 114,224,0,0,0,114,67,0,0,0,114,173,0,0,0,114, + 221,0,0,0,218,6,99,97,99,104,101,100,218,12,104,97, + 115,95,108,111,99,97,116,105,111,110,114,211,0,0,0,41, 3,114,71,0,0,0,218,5,111,116,104,101,114,218,4,115, 109,115,108,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,6,95,95,101,113,95,95,44,3,0,0,115,20, + 0,0,218,6,95,95,101,113,95,95,74,3,0,0,115,20, 0,0,0,0,1,9,1,3,1,18,1,18,1,18,1,15, 1,18,1,20,1,13,1,122,17,77,111,100,117,108,101,83, 112,101,99,46,95,95,101,113,95,95,99,1,0,0,0,0, 0,0,0,2,0,0,0,11,0,0,0,67,0,0,0,115, - 158,0,0,0,124,0,0,106,0,0,100,0,0,107,8,0, - 114,151,0,124,0,0,106,1,0,100,0,0,107,9,0,114, - 151,0,124,0,0,106,2,0,114,151,0,124,0,0,106,1, + 149,0,0,0,124,0,0,106,0,0,100,0,0,107,8,0, + 114,142,0,124,0,0,106,1,0,100,0,0,107,9,0,114, + 142,0,124,0,0,106,2,0,114,142,0,124,0,0,106,1, 0,125,1,0,124,1,0,106,3,0,116,4,0,116,5,0, 131,1,0,131,1,0,114,112,0,121,19,0,116,6,0,124, - 1,0,131,1,0,124,0,0,95,0,0,87,113,145,0,4, - 116,7,0,107,10,0,114,108,0,1,1,1,89,113,145,0, - 88,113,148,0,124,1,0,106,3,0,116,4,0,116,8,0, - 131,1,0,131,1,0,114,148,0,124,1,0,124,0,0,95, - 0,0,113,148,0,113,151,0,110,0,0,124,0,0,106,0, - 0,83,41,1,78,41,9,114,223,0,0,0,114,218,0,0, - 0,114,222,0,0,0,218,8,101,110,100,115,119,105,116,104, - 218,5,116,117,112,108,101,114,135,0,0,0,114,132,0,0, - 0,114,123,0,0,0,218,17,66,89,84,69,67,79,68,69, - 95,83,85,70,70,73,88,69,83,41,2,114,71,0,0,0, - 114,131,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,226,0,0,0,56,3,0,0,115,22,0, - 0,0,0,2,15,1,24,1,9,1,21,1,3,1,19,1, - 13,1,8,1,21,1,18,1,122,17,77,111,100,117,108,101, - 83,112,101,99,46,99,97,99,104,101,100,99,2,0,0,0, - 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, - 115,13,0,0,0,124,1,0,124,0,0,95,0,0,100,0, - 0,83,41,1,78,41,1,114,223,0,0,0,41,2,114,71, - 0,0,0,114,226,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,226,0,0,0,70,3,0,0, - 115,2,0,0,0,0,2,99,1,0,0,0,0,0,0,0, - 1,0,0,0,2,0,0,0,67,0,0,0,115,46,0,0, - 0,124,0,0,106,0,0,100,1,0,107,8,0,114,35,0, - 124,0,0,106,1,0,106,2,0,100,2,0,131,1,0,100, - 3,0,25,83,124,0,0,106,1,0,83,100,1,0,83,41, - 4,122,32,84,104,101,32,110,97,109,101,32,111,102,32,116, - 104,101,32,109,111,100,117,108,101,39,115,32,112,97,114,101, - 110,116,46,78,114,116,0,0,0,114,84,0,0,0,41,3, - 114,221,0,0,0,114,67,0,0,0,114,32,0,0,0,41, - 1,114,71,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,6,112,97,114,101,110,116,74,3,0, - 0,115,6,0,0,0,0,3,15,1,20,2,122,17,77,111, - 100,117,108,101,83,112,101,99,46,112,97,114,101,110,116,99, - 1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0, - 67,0,0,0,115,7,0,0,0,124,0,0,106,0,0,83, - 41,1,78,41,1,114,222,0,0,0,41,1,114,71,0,0, + 1,0,131,1,0,124,0,0,95,0,0,87,113,142,0,4, + 116,7,0,107,10,0,114,108,0,1,1,1,89,113,142,0, + 88,110,30,0,124,1,0,106,3,0,116,4,0,116,8,0, + 131,1,0,131,1,0,114,142,0,124,1,0,124,0,0,95, + 0,0,124,0,0,106,0,0,83,41,1,78,41,9,114,226, + 0,0,0,114,221,0,0,0,114,225,0,0,0,218,8,101, + 110,100,115,119,105,116,104,218,5,116,117,112,108,101,114,142, + 0,0,0,114,138,0,0,0,114,124,0,0,0,114,132,0, + 0,0,41,2,114,71,0,0,0,114,214,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,229,0, + 0,0,86,3,0,0,115,22,0,0,0,0,2,15,1,24, + 1,9,1,21,1,3,1,19,1,13,1,8,1,21,1,9, + 1,122,17,77,111,100,117,108,101,83,112,101,99,46,99,97, + 99,104,101,100,99,2,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,13,0,0,0,124,1, + 0,124,0,0,95,0,0,100,0,0,83,41,1,78,41,1, + 114,226,0,0,0,41,2,114,71,0,0,0,114,229,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,227,0,0,0,82,3,0,0,115,2,0,0,0,0,2, - 122,23,77,111,100,117,108,101,83,112,101,99,46,104,97,115, - 95,108,111,99,97,116,105,111,110,99,2,0,0,0,0,0, - 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,19, - 0,0,0,116,0,0,124,1,0,131,1,0,124,0,0,95, - 1,0,100,0,0,83,41,1,78,41,2,218,4,98,111,111, - 108,114,222,0,0,0,41,2,114,71,0,0,0,218,5,118, - 97,108,117,101,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,227,0,0,0,86,3,0,0,115,2,0,0, - 0,0,2,41,12,114,57,0,0,0,114,56,0,0,0,114, - 58,0,0,0,114,59,0,0,0,114,72,0,0,0,114,101, - 0,0,0,114,230,0,0,0,218,8,112,114,111,112,101,114, - 116,121,114,226,0,0,0,218,6,115,101,116,116,101,114,114, - 234,0,0,0,114,227,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,217,0, - 0,0,241,2,0,0,115,20,0,0,0,12,35,6,2,15, - 1,15,11,12,10,12,12,18,14,21,4,18,8,18,4,114, - 217,0,0,0,114,218,0,0,0,114,220,0,0,0,99,2, - 0,0,0,2,0,0,0,5,0,0,0,15,0,0,0,67, - 0,0,0,115,193,0,0,0,116,0,0,124,1,0,100,1, - 0,131,2,0,114,83,0,124,3,0,100,2,0,107,8,0, - 114,43,0,116,1,0,124,0,0,100,3,0,124,1,0,131, - 1,1,83,124,3,0,114,55,0,103,0,0,110,3,0,100, - 2,0,125,4,0,116,1,0,124,0,0,100,3,0,124,1, - 0,100,4,0,124,4,0,131,1,2,83,124,3,0,100,2, - 0,107,8,0,114,168,0,116,0,0,124,1,0,100,5,0, - 131,2,0,114,159,0,121,19,0,124,1,0,106,2,0,124, - 0,0,131,1,0,125,3,0,87,113,165,0,4,116,3,0, - 107,10,0,114,155,0,1,1,1,100,2,0,125,3,0,89, - 113,165,0,88,113,168,0,100,6,0,125,3,0,110,0,0, - 116,4,0,124,0,0,124,1,0,100,7,0,124,2,0,100, - 5,0,124,3,0,131,2,2,83,41,8,122,53,82,101,116, - 117,114,110,32,97,32,109,111,100,117,108,101,32,115,112,101, - 99,32,98,97,115,101,100,32,111,110,32,118,97,114,105,111, - 117,115,32,108,111,97,100,101,114,32,109,101,116,104,111,100, - 115,46,218,12,103,101,116,95,102,105,108,101,110,97,109,101, - 78,114,170,0,0,0,114,221,0,0,0,114,220,0,0,0, - 70,114,218,0,0,0,41,5,114,60,0,0,0,218,23,115, - 112,101,99,95,102,114,111,109,95,102,105,108,101,95,108,111, - 99,97,116,105,111,110,114,220,0,0,0,114,154,0,0,0, - 114,217,0,0,0,41,5,114,67,0,0,0,114,170,0,0, - 0,114,218,0,0,0,114,220,0,0,0,90,6,115,101,97, - 114,99,104,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,174,0,0,0,91,3,0,0,115,28,0,0,0, - 0,2,15,1,12,1,16,1,18,1,15,1,7,2,12,1, - 15,1,3,1,19,1,13,1,14,3,9,2,114,174,0,0, - 0,114,170,0,0,0,114,221,0,0,0,99,2,0,0,0, - 2,0,0,0,9,0,0,0,19,0,0,0,67,0,0,0, - 115,110,1,0,0,124,1,0,100,1,0,107,8,0,114,79, - 0,100,2,0,125,1,0,116,0,0,124,2,0,100,3,0, - 131,2,0,114,79,0,121,19,0,124,2,0,106,1,0,124, - 0,0,131,1,0,125,1,0,87,113,76,0,4,116,2,0, - 107,10,0,114,72,0,1,1,1,89,113,76,0,88,113,79, - 0,110,0,0,116,3,0,124,0,0,124,2,0,100,4,0, + 114,229,0,0,0,100,3,0,0,115,2,0,0,0,0,2, + 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, + 0,67,0,0,0,115,46,0,0,0,124,0,0,106,0,0, + 100,1,0,107,8,0,114,35,0,124,0,0,106,1,0,106, + 2,0,100,2,0,131,1,0,100,3,0,25,83,124,0,0, + 106,1,0,83,100,1,0,83,41,4,122,32,84,104,101,32, + 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, + 108,101,39,115,32,112,97,114,101,110,116,46,78,114,117,0, + 0,0,114,84,0,0,0,41,3,114,224,0,0,0,114,67, + 0,0,0,114,32,0,0,0,41,1,114,71,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,6, + 112,97,114,101,110,116,104,3,0,0,115,6,0,0,0,0, + 3,15,1,20,2,122,17,77,111,100,117,108,101,83,112,101, + 99,46,112,97,114,101,110,116,99,1,0,0,0,0,0,0, + 0,1,0,0,0,1,0,0,0,67,0,0,0,115,7,0, + 0,0,124,0,0,106,0,0,83,41,1,78,41,1,114,225, + 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,230,0,0,0,112,3, + 0,0,115,2,0,0,0,0,2,122,23,77,111,100,117,108, + 101,83,112,101,99,46,104,97,115,95,108,111,99,97,116,105, + 111,110,99,2,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,115,19,0,0,0,116,0,0,124, + 1,0,131,1,0,124,0,0,95,1,0,100,0,0,83,41, + 1,78,41,2,218,4,98,111,111,108,114,225,0,0,0,41, + 2,114,71,0,0,0,218,5,118,97,108,117,101,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,230,0,0, + 0,116,3,0,0,115,2,0,0,0,0,2,41,12,114,57, + 0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0, + 0,0,114,72,0,0,0,114,101,0,0,0,114,233,0,0, + 0,218,8,112,114,111,112,101,114,116,121,114,229,0,0,0, + 218,6,115,101,116,116,101,114,114,236,0,0,0,114,230,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,220,0,0,0,15,3,0,0,115, + 20,0,0,0,12,35,6,2,15,1,15,11,12,10,12,12, + 18,14,21,4,18,8,18,4,114,220,0,0,0,114,221,0, + 0,0,114,223,0,0,0,99,2,0,0,0,2,0,0,0, + 5,0,0,0,15,0,0,0,67,0,0,0,115,190,0,0, + 0,116,0,0,124,1,0,100,1,0,131,2,0,114,83,0, + 124,3,0,100,2,0,107,8,0,114,43,0,116,1,0,124, + 0,0,100,3,0,124,1,0,131,1,1,83,124,3,0,114, + 55,0,103,0,0,110,3,0,100,2,0,125,4,0,116,1, + 0,124,0,0,100,3,0,124,1,0,100,4,0,124,4,0, + 131,1,2,83,124,3,0,100,2,0,107,8,0,114,165,0, + 116,0,0,124,1,0,100,5,0,131,2,0,114,159,0,121, + 19,0,124,1,0,106,2,0,124,0,0,131,1,0,125,3, + 0,87,113,165,0,4,116,3,0,107,10,0,114,155,0,1, + 1,1,100,2,0,125,3,0,89,113,165,0,88,110,6,0, + 100,6,0,125,3,0,116,4,0,124,0,0,124,1,0,100, + 7,0,124,2,0,100,5,0,124,3,0,131,2,2,83,41, + 8,122,53,82,101,116,117,114,110,32,97,32,109,111,100,117, + 108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110, + 32,118,97,114,105,111,117,115,32,108,111,97,100,101,114,32, + 109,101,116,104,111,100,115,46,218,12,103,101,116,95,102,105, + 108,101,110,97,109,101,78,114,173,0,0,0,114,224,0,0, + 0,114,223,0,0,0,70,114,221,0,0,0,41,5,114,60, + 0,0,0,218,23,115,112,101,99,95,102,114,111,109,95,102, + 105,108,101,95,108,111,99,97,116,105,111,110,114,223,0,0, + 0,114,159,0,0,0,114,220,0,0,0,41,5,114,67,0, + 0,0,114,173,0,0,0,114,221,0,0,0,114,223,0,0, + 0,90,6,115,101,97,114,99,104,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,177,0,0,0,121,3,0, + 0,115,28,0,0,0,0,2,15,1,12,1,16,1,18,1, + 15,1,7,2,12,1,15,1,3,1,19,1,13,1,14,3, + 6,2,114,177,0,0,0,114,173,0,0,0,114,224,0,0, + 0,99,2,0,0,0,2,0,0,0,9,0,0,0,19,0, + 0,0,67,0,0,0,115,86,1,0,0,124,1,0,100,1, + 0,107,8,0,114,73,0,100,2,0,125,1,0,116,0,0, + 124,2,0,100,3,0,131,2,0,114,73,0,121,19,0,124, + 2,0,106,1,0,124,0,0,131,1,0,125,1,0,87,110, + 18,0,4,116,2,0,107,10,0,114,72,0,1,1,1,89, + 110,1,0,88,116,3,0,124,0,0,124,2,0,100,4,0, 124,1,0,131,2,1,125,4,0,100,5,0,124,4,0,95, - 4,0,124,2,0,100,1,0,107,8,0,114,203,0,120,79, - 0,116,5,0,131,0,0,68,93,61,0,92,2,0,125,5, + 4,0,124,2,0,100,1,0,107,8,0,114,191,0,120,73, + 0,116,5,0,131,0,0,68,93,58,0,92,2,0,125,5, 0,125,6,0,124,1,0,106,6,0,116,7,0,124,6,0, - 131,1,0,131,1,0,114,131,0,124,5,0,124,0,0,124, + 131,1,0,131,1,0,114,125,0,124,5,0,124,0,0,124, 1,0,131,2,0,125,2,0,124,2,0,124,4,0,95,8, - 0,80,113,131,0,113,131,0,87,100,1,0,83,110,0,0, - 124,3,0,116,9,0,107,8,0,114,38,1,116,0,0,124, - 2,0,100,6,0,131,2,0,114,47,1,121,19,0,124,2, - 0,106,10,0,124,0,0,131,1,0,125,7,0,87,110,18, - 0,4,116,2,0,107,10,0,114,13,1,1,1,1,89,113, - 35,1,88,124,7,0,114,35,1,103,0,0,124,4,0,95, - 11,0,113,35,1,113,47,1,110,9,0,124,3,0,124,4, - 0,95,11,0,124,4,0,106,11,0,103,0,0,107,2,0, - 114,106,1,124,1,0,114,106,1,116,12,0,124,1,0,131, - 1,0,100,7,0,25,125,8,0,124,4,0,106,11,0,106, - 13,0,124,8,0,131,1,0,1,113,106,1,110,0,0,124, - 4,0,83,41,8,97,61,1,0,0,82,101,116,117,114,110, - 32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98, - 97,115,101,100,32,111,110,32,97,32,102,105,108,101,32,108, - 111,99,97,116,105,111,110,46,10,10,32,32,32,32,84,111, - 32,105,110,100,105,99,97,116,101,32,116,104,97,116,32,116, - 104,101,32,109,111,100,117,108,101,32,105,115,32,97,32,112, - 97,99,107,97,103,101,44,32,115,101,116,10,32,32,32,32, - 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, - 95,108,111,99,97,116,105,111,110,115,32,116,111,32,97,32, - 108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114, - 121,32,112,97,116,104,115,46,32,32,65,110,10,32,32,32, - 32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,115, - 117,102,102,105,99,105,101,110,116,44,32,116,104,111,117,103, - 104,32,105,116,115,32,110,111,116,32,111,116,104,101,114,119, - 105,115,101,32,117,115,101,102,117,108,32,116,111,32,116,104, - 101,10,32,32,32,32,105,109,112,111,114,116,32,115,121,115, - 116,101,109,46,10,10,32,32,32,32,84,104,101,32,108,111, - 97,100,101,114,32,109,117,115,116,32,116,97,107,101,32,97, - 32,115,112,101,99,32,97,115,32,105,116,115,32,111,110,108, - 121,32,95,95,105,110,105,116,95,95,40,41,32,97,114,103, - 46,10,10,32,32,32,32,78,122,9,60,117,110,107,110,111, - 119,110,62,114,239,0,0,0,114,218,0,0,0,84,114,220, - 0,0,0,114,84,0,0,0,41,14,114,60,0,0,0,114, - 239,0,0,0,114,154,0,0,0,114,217,0,0,0,114,222, - 0,0,0,218,27,95,103,101,116,95,115,117,112,112,111,114, - 116,101,100,95,102,105,108,101,95,108,111,97,100,101,114,115, - 114,231,0,0,0,114,232,0,0,0,114,170,0,0,0,218, - 9,95,80,79,80,85,76,65,84,69,114,220,0,0,0,114, - 221,0,0,0,114,38,0,0,0,114,224,0,0,0,41,9, - 114,67,0,0,0,218,8,108,111,99,97,116,105,111,110,114, - 170,0,0,0,114,221,0,0,0,114,178,0,0,0,218,12, - 108,111,97,100,101,114,95,99,108,97,115,115,114,126,0,0, - 0,114,220,0,0,0,90,7,100,105,114,110,97,109,101,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,240, - 0,0,0,116,3,0,0,115,60,0,0,0,0,12,12,4, - 6,1,15,2,3,1,19,1,13,1,11,8,21,1,9,3, - 12,1,22,1,21,1,15,1,9,1,8,2,7,3,12,2, - 15,1,3,1,19,1,13,1,5,2,6,1,18,2,9,1, - 15,1,6,1,16,1,22,2,114,240,0,0,0,99,3,0, - 0,0,0,0,0,0,8,0,0,0,53,0,0,0,67,0, - 0,0,115,124,1,0,0,121,13,0,124,0,0,106,0,0, - 125,3,0,87,110,18,0,4,116,1,0,107,10,0,114,33, - 0,1,1,1,89,110,17,0,88,124,3,0,100,0,0,107, - 9,0,114,50,0,124,3,0,83,124,0,0,106,2,0,125, - 4,0,124,1,0,100,0,0,107,8,0,114,108,0,121,13, - 0,124,0,0,106,3,0,125,1,0,87,113,108,0,4,116, - 1,0,107,10,0,114,104,0,1,1,1,89,113,108,0,88, - 110,0,0,121,13,0,124,0,0,106,4,0,125,5,0,87, - 110,24,0,4,116,1,0,107,10,0,114,147,0,1,1,1, + 0,80,113,125,0,87,100,1,0,83,124,3,0,116,9,0, + 107,8,0,114,20,1,116,0,0,124,2,0,100,6,0,131, + 2,0,114,29,1,121,19,0,124,2,0,106,10,0,124,0, + 0,131,1,0,125,7,0,87,110,18,0,4,116,2,0,107, + 10,0,114,1,1,1,1,1,89,113,29,1,88,124,7,0, + 114,29,1,103,0,0,124,4,0,95,11,0,110,9,0,124, + 3,0,124,4,0,95,11,0,124,4,0,106,11,0,103,0, + 0,107,2,0,114,82,1,124,1,0,114,82,1,116,12,0, + 124,1,0,131,1,0,100,7,0,25,125,8,0,124,4,0, + 106,11,0,106,13,0,124,8,0,131,1,0,1,124,4,0, + 83,41,8,97,61,1,0,0,82,101,116,117,114,110,32,97, + 32,109,111,100,117,108,101,32,115,112,101,99,32,98,97,115, + 101,100,32,111,110,32,97,32,102,105,108,101,32,108,111,99, + 97,116,105,111,110,46,10,10,32,32,32,32,84,111,32,105, + 110,100,105,99,97,116,101,32,116,104,97,116,32,116,104,101, + 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, + 107,97,103,101,44,32,115,101,116,10,32,32,32,32,115,117, + 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, + 111,99,97,116,105,111,110,115,32,116,111,32,97,32,108,105, + 115,116,32,111,102,32,100,105,114,101,99,116,111,114,121,32, + 112,97,116,104,115,46,32,32,65,110,10,32,32,32,32,101, + 109,112,116,121,32,108,105,115,116,32,105,115,32,115,117,102, + 102,105,99,105,101,110,116,44,32,116,104,111,117,103,104,32, + 105,116,115,32,110,111,116,32,111,116,104,101,114,119,105,115, + 101,32,117,115,101,102,117,108,32,116,111,32,116,104,101,10, + 32,32,32,32,105,109,112,111,114,116,32,115,121,115,116,101, + 109,46,10,10,32,32,32,32,84,104,101,32,108,111,97,100, + 101,114,32,109,117,115,116,32,116,97,107,101,32,97,32,115, + 112,101,99,32,97,115,32,105,116,115,32,111,110,108,121,32, + 95,95,105,110,105,116,95,95,40,41,32,97,114,103,46,10, + 10,32,32,32,32,78,122,9,60,117,110,107,110,111,119,110, + 62,114,241,0,0,0,114,221,0,0,0,84,114,223,0,0, + 0,114,84,0,0,0,41,14,114,60,0,0,0,114,241,0, + 0,0,114,159,0,0,0,114,220,0,0,0,114,225,0,0, + 0,218,27,95,103,101,116,95,115,117,112,112,111,114,116,101, + 100,95,102,105,108,101,95,108,111,97,100,101,114,115,114,234, + 0,0,0,114,235,0,0,0,114,173,0,0,0,218,9,95, + 80,79,80,85,76,65,84,69,114,223,0,0,0,114,224,0, + 0,0,114,38,0,0,0,114,227,0,0,0,41,9,114,67, + 0,0,0,218,8,108,111,99,97,116,105,111,110,114,173,0, + 0,0,114,224,0,0,0,114,180,0,0,0,218,12,108,111, + 97,100,101,114,95,99,108,97,115,115,218,8,115,117,102,102, + 105,120,101,115,114,223,0,0,0,90,7,100,105,114,110,97, + 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,242,0,0,0,146,3,0,0,115,60,0,0,0,0, + 12,12,4,6,1,15,2,3,1,19,1,13,1,5,8,21, + 1,9,3,12,1,22,1,21,1,15,1,9,1,5,2,4, + 3,12,2,15,1,3,1,19,1,13,1,5,2,6,1,12, + 2,9,1,15,1,6,1,16,1,16,2,114,242,0,0,0, + 99,3,0,0,0,0,0,0,0,8,0,0,0,53,0,0, + 0,67,0,0,0,115,118,1,0,0,121,13,0,124,0,0, + 106,0,0,125,3,0,87,110,18,0,4,116,1,0,107,10, + 0,114,33,0,1,1,1,89,110,17,0,88,124,3,0,100, + 0,0,107,9,0,114,50,0,124,3,0,83,124,0,0,106, + 2,0,125,4,0,124,1,0,100,0,0,107,8,0,114,105, + 0,121,13,0,124,0,0,106,3,0,125,1,0,87,110,18, + 0,4,116,1,0,107,10,0,114,104,0,1,1,1,89,110, + 1,0,88,121,13,0,124,0,0,106,4,0,125,5,0,87, + 110,24,0,4,116,1,0,107,10,0,114,144,0,1,1,1, 100,0,0,125,5,0,89,110,1,0,88,124,2,0,100,0, - 0,107,8,0,114,224,0,124,5,0,100,0,0,107,8,0, - 114,215,0,121,13,0,124,1,0,106,5,0,125,2,0,87, - 113,221,0,4,116,1,0,107,10,0,114,211,0,1,1,1, - 100,0,0,125,2,0,89,113,221,0,88,113,224,0,124,5, - 0,125,2,0,110,0,0,121,13,0,124,0,0,106,6,0, - 125,6,0,87,110,24,0,4,116,1,0,107,10,0,114,7, - 1,1,1,1,100,0,0,125,6,0,89,110,1,0,88,121, - 19,0,116,7,0,124,0,0,106,8,0,131,1,0,125,7, - 0,87,110,24,0,4,116,1,0,107,10,0,114,53,1,1, - 1,1,100,0,0,125,7,0,89,110,1,0,88,116,9,0, - 124,4,0,124,1,0,100,1,0,124,2,0,131,2,1,125, - 3,0,124,5,0,100,0,0,107,8,0,114,93,1,100,2, - 0,110,3,0,100,3,0,124,3,0,95,10,0,124,6,0, - 124,3,0,95,11,0,124,7,0,124,3,0,95,12,0,124, - 3,0,83,41,4,78,114,218,0,0,0,70,84,41,13,114, - 209,0,0,0,114,210,0,0,0,114,57,0,0,0,114,205, - 0,0,0,114,211,0,0,0,90,7,95,79,82,73,71,73, - 78,218,10,95,95,99,97,99,104,101,100,95,95,218,4,108, - 105,115,116,218,8,95,95,112,97,116,104,95,95,114,217,0, - 0,0,114,222,0,0,0,114,226,0,0,0,114,221,0,0, - 0,41,8,114,180,0,0,0,114,170,0,0,0,114,218,0, - 0,0,114,178,0,0,0,114,67,0,0,0,114,243,0,0, - 0,114,226,0,0,0,114,221,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,17,95,115,112,101, - 99,95,102,114,111,109,95,109,111,100,117,108,101,180,3,0, - 0,115,72,0,0,0,0,2,3,1,13,1,13,1,5,2, - 12,1,4,2,9,1,12,1,3,1,13,1,13,2,8,1, - 3,1,13,1,13,1,11,1,12,1,12,1,3,1,13,1, - 13,1,14,2,9,1,3,1,13,1,13,1,11,1,3,1, - 19,1,13,1,11,2,21,1,27,1,9,1,9,1,114,248, - 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,64,0,0,0,115,142,0,0,0,101,0,0, - 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, - 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, - 0,132,0,0,90,5,0,100,6,0,100,7,0,100,8,0, - 100,9,0,100,10,0,100,11,0,132,0,2,90,6,0,100, - 12,0,100,13,0,132,0,0,90,7,0,100,14,0,100,15, - 0,132,0,0,90,8,0,100,16,0,100,17,0,132,0,0, - 90,9,0,100,18,0,100,19,0,132,0,0,90,10,0,100, - 20,0,100,21,0,132,0,0,90,11,0,100,22,0,100,23, - 0,132,0,0,90,12,0,100,24,0,83,41,25,114,175,0, - 0,0,122,77,67,111,110,118,101,110,105,101,110,99,101,32, - 119,114,97,112,112,101,114,32,97,114,111,117,110,100,32,115, - 112,101,99,32,111,98,106,101,99,116,115,32,116,111,32,112, - 114,111,118,105,100,101,32,115,112,101,99,45,115,112,101,99, - 105,102,105,99,10,32,32,32,32,109,101,116,104,111,100,115, - 46,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, - 0,0,67,0,0,0,115,13,0,0,0,124,1,0,124,0, - 0,95,0,0,100,0,0,83,41,1,78,41,1,114,178,0, - 0,0,41,2,114,71,0,0,0,114,178,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,72,0, - 0,0,232,3,0,0,115,2,0,0,0,0,1,122,21,95, - 83,112,101,99,77,101,116,104,111,100,115,46,95,95,105,110, - 105,116,95,95,99,1,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,158,0,0,0,124,0, - 0,106,0,0,125,1,0,124,1,0,106,1,0,100,1,0, - 107,8,0,114,30,0,100,2,0,110,6,0,124,1,0,106, - 1,0,125,2,0,124,1,0,106,2,0,100,1,0,107,8, - 0,114,104,0,124,1,0,106,3,0,100,1,0,107,8,0, - 114,82,0,100,3,0,106,4,0,124,2,0,131,1,0,83, - 100,4,0,106,4,0,124,2,0,124,1,0,106,3,0,131, - 2,0,83,110,50,0,124,1,0,106,5,0,114,132,0,100, - 5,0,106,4,0,124,2,0,124,1,0,106,2,0,131,2, - 0,83,100,6,0,106,4,0,124,1,0,106,1,0,124,1, - 0,106,2,0,131,2,0,83,100,1,0,83,41,7,122,38, - 82,101,116,117,114,110,32,116,104,101,32,114,101,112,114,32, - 116,111,32,117,115,101,32,102,111,114,32,116,104,101,32,109, - 111,100,117,108,101,46,78,114,207,0,0,0,122,13,60,109, - 111,100,117,108,101,32,123,33,114,125,62,122,20,60,109,111, - 100,117,108,101,32,123,33,114,125,32,40,123,33,114,125,41, - 62,122,23,60,109,111,100,117,108,101,32,123,33,114,125,32, - 102,114,111,109,32,123,33,114,125,62,122,18,60,109,111,100, - 117,108,101,32,123,33,114,125,32,40,123,125,41,62,41,6, - 114,178,0,0,0,114,67,0,0,0,114,218,0,0,0,114, - 170,0,0,0,114,47,0,0,0,114,227,0,0,0,41,3, - 114,71,0,0,0,114,178,0,0,0,114,67,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,206, - 0,0,0,235,3,0,0,115,18,0,0,0,0,3,9,1, - 30,1,15,1,15,1,13,2,22,2,9,1,19,2,122,24, - 95,83,112,101,99,77,101,116,104,111,100,115,46,109,111,100, - 117,108,101,95,114,101,112,114,218,9,95,111,118,101,114,114, - 105,100,101,70,218,11,95,102,111,114,99,101,95,110,97,109, - 101,84,99,2,0,0,0,2,0,0,0,6,0,0,0,59, - 0,0,0,67,0,0,0,115,75,2,0,0,124,0,0,106, - 0,0,125,4,0,124,2,0,115,45,0,124,3,0,115,45, - 0,116,1,0,124,1,0,100,1,0,100,2,0,131,3,0, - 100,2,0,107,8,0,114,85,0,121,16,0,124,4,0,106, - 2,0,124,1,0,95,3,0,87,113,85,0,4,116,4,0, - 107,10,0,114,81,0,1,1,1,89,113,85,0,88,110,0, - 0,124,2,0,115,115,0,116,1,0,124,1,0,100,3,0, - 100,2,0,131,3,0,100,2,0,107,8,0,114,221,0,124, - 4,0,106,5,0,125,5,0,124,5,0,100,2,0,107,8, - 0,114,184,0,124,4,0,106,6,0,100,2,0,107,9,0, - 114,184,0,116,7,0,106,8,0,116,7,0,131,1,0,125, - 5,0,124,4,0,106,6,0,124,5,0,95,9,0,113,184, - 0,110,0,0,121,13,0,124,5,0,124,1,0,95,10,0, - 87,113,221,0,4,116,4,0,107,10,0,114,217,0,1,1, - 1,89,113,221,0,88,110,0,0,124,2,0,115,251,0,116, - 1,0,124,1,0,100,4,0,100,2,0,131,3,0,100,2, - 0,107,8,0,114,35,1,121,16,0,124,4,0,106,11,0, - 124,1,0,95,12,0,87,113,35,1,4,116,4,0,107,10, - 0,114,31,1,1,1,1,89,113,35,1,88,110,0,0,121, - 13,0,124,4,0,124,1,0,95,13,0,87,110,18,0,4, - 116,4,0,107,10,0,114,68,1,1,1,1,89,110,1,0, - 88,124,2,0,115,99,1,116,1,0,124,1,0,100,5,0, - 100,2,0,131,3,0,100,2,0,107,8,0,114,157,1,124, - 4,0,106,6,0,100,2,0,107,9,0,114,157,1,121,16, - 0,124,4,0,106,6,0,124,1,0,95,14,0,87,113,154, - 1,4,116,4,0,107,10,0,114,150,1,1,1,1,89,113, - 154,1,88,113,157,1,110,0,0,124,4,0,106,15,0,114, - 71,2,124,2,0,115,196,1,116,1,0,124,1,0,100,6, - 0,100,2,0,131,3,0,100,2,0,107,8,0,114,236,1, - 121,16,0,124,4,0,106,16,0,124,1,0,95,17,0,87, - 113,236,1,4,116,4,0,107,10,0,114,232,1,1,1,1, - 89,113,236,1,88,110,0,0,124,2,0,115,10,2,116,1, - 0,124,1,0,100,7,0,100,2,0,131,3,0,100,2,0, - 107,8,0,114,71,2,124,4,0,106,18,0,100,2,0,107, - 9,0,114,68,2,121,16,0,124,4,0,106,18,0,124,1, - 0,95,19,0,87,113,65,2,4,116,4,0,107,10,0,114, - 61,2,1,1,1,89,113,65,2,88,113,68,2,113,71,2, - 110,0,0,100,2,0,83,41,8,97,29,2,0,0,83,101, - 116,32,116,104,101,32,109,111,100,117,108,101,39,115,32,97, - 116,116,114,105,98,117,116,101,115,46,10,10,32,32,32,32, - 32,32,32,32,65,108,108,32,109,105,115,115,105,110,103,32, - 105,109,112,111,114,116,45,114,101,108,97,116,101,100,32,109, - 111,100,117,108,101,32,97,116,116,114,105,98,117,116,101,115, - 32,119,105,108,108,32,98,101,32,115,101,116,46,32,32,72, - 101,114,101,10,32,32,32,32,32,32,32,32,105,115,32,104, - 111,119,32,116,104,101,32,115,112,101,99,32,97,116,116,114, - 105,98,117,116,101,115,32,109,97,112,32,111,110,116,111,32, - 116,104,101,32,109,111,100,117,108,101,58,10,10,32,32,32, - 32,32,32,32,32,115,112,101,99,46,110,97,109,101,32,45, - 62,32,109,111,100,117,108,101,46,95,95,110,97,109,101,95, - 95,10,32,32,32,32,32,32,32,32,115,112,101,99,46,108, - 111,97,100,101,114,32,45,62,32,109,111,100,117,108,101,46, - 95,95,108,111,97,100,101,114,95,95,10,32,32,32,32,32, - 32,32,32,115,112,101,99,46,112,97,114,101,110,116,32,45, - 62,32,109,111,100,117,108,101,46,95,95,112,97,99,107,97, - 103,101,95,95,10,32,32,32,32,32,32,32,32,115,112,101, - 99,32,45,62,32,109,111,100,117,108,101,46,95,95,115,112, - 101,99,95,95,10,10,32,32,32,32,32,32,32,32,79,112, - 116,105,111,110,97,108,58,10,32,32,32,32,32,32,32,32, - 115,112,101,99,46,111,114,105,103,105,110,32,45,62,32,109, - 111,100,117,108,101,46,95,95,102,105,108,101,95,95,32,40, - 105,102,32,115,112,101,99,46,115,101,116,95,102,105,108,101, - 97,116,116,114,32,105,115,32,116,114,117,101,41,10,32,32, - 32,32,32,32,32,32,115,112,101,99,46,99,97,99,104,101, - 100,32,45,62,32,109,111,100,117,108,101,46,95,95,99,97, - 99,104,101,100,95,95,32,40,105,102,32,95,95,102,105,108, - 101,95,95,32,97,108,115,111,32,115,101,116,41,10,32,32, - 32,32,32,32,32,32,115,112,101,99,46,115,117,98,109,111, - 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, - 116,105,111,110,115,32,45,62,32,109,111,100,117,108,101,46, - 95,95,112,97,116,104,95,95,32,40,105,102,32,115,101,116, - 41,10,10,32,32,32,32,32,32,32,32,114,57,0,0,0, - 78,114,205,0,0,0,218,11,95,95,112,97,99,107,97,103, - 101,95,95,114,247,0,0,0,114,211,0,0,0,114,245,0, - 0,0,41,20,114,178,0,0,0,114,62,0,0,0,114,67, - 0,0,0,114,57,0,0,0,114,210,0,0,0,114,170,0, - 0,0,114,221,0,0,0,218,16,95,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,218,7,95,95,110,101,119, - 95,95,218,5,95,112,97,116,104,114,205,0,0,0,114,234, - 0,0,0,114,251,0,0,0,114,209,0,0,0,114,247,0, - 0,0,114,227,0,0,0,114,218,0,0,0,114,211,0,0, - 0,114,226,0,0,0,114,245,0,0,0,41,6,114,71,0, - 0,0,114,180,0,0,0,114,249,0,0,0,114,250,0,0, - 0,114,178,0,0,0,114,170,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,17,105,110,105,116, - 95,109,111,100,117,108,101,95,97,116,116,114,115,251,3,0, - 0,115,88,0,0,0,0,17,9,6,12,1,24,1,3,1, - 16,1,13,1,8,3,30,1,9,1,12,2,15,1,15,1, - 18,1,3,1,13,1,13,1,8,3,30,1,3,1,16,1, - 13,1,8,3,3,1,13,1,13,1,5,3,30,1,15,1, - 3,1,16,1,13,1,11,2,9,2,30,1,3,1,16,1, - 13,1,8,3,30,1,15,1,3,1,16,1,13,1,122,30, - 95,83,112,101,99,77,101,116,104,111,100,115,46,105,110,105, - 116,95,109,111,100,117,108,101,95,97,116,116,114,115,99,1, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,101,0,0,0,124,0,0,106,0,0,125,1, - 0,116,1,0,124,1,0,106,2,0,100,1,0,131,2,0, - 114,48,0,124,1,0,106,2,0,106,3,0,124,1,0,131, - 1,0,125,2,0,110,6,0,100,2,0,125,2,0,124,2, - 0,100,2,0,107,8,0,114,84,0,116,4,0,124,1,0, - 106,5,0,131,1,0,125,2,0,110,0,0,124,0,0,106, - 6,0,124,2,0,131,1,0,1,124,2,0,83,41,3,122, - 153,82,101,116,117,114,110,32,97,32,110,101,119,32,109,111, - 100,117,108,101,32,116,111,32,98,101,32,108,111,97,100,101, - 100,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, - 105,109,112,111,114,116,45,114,101,108,97,116,101,100,32,109, - 111,100,117,108,101,32,97,116,116,114,105,98,117,116,101,115, - 32,97,114,101,32,97,108,115,111,32,115,101,116,32,119,105, - 116,104,32,116,104,101,10,32,32,32,32,32,32,32,32,97, - 112,112,114,111,112,114,105,97,116,101,32,118,97,108,117,101, - 115,32,102,114,111,109,32,116,104,101,32,115,112,101,99,46, - 10,10,32,32,32,32,32,32,32,32,218,13,99,114,101,97, - 116,101,95,109,111,100,117,108,101,78,41,7,114,178,0,0, - 0,114,60,0,0,0,114,170,0,0,0,114,0,1,0,0, - 114,68,0,0,0,114,67,0,0,0,114,255,0,0,0,41, - 3,114,71,0,0,0,114,178,0,0,0,114,180,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 6,99,114,101,97,116,101,75,4,0,0,115,16,0,0,0, - 0,7,9,2,18,3,21,2,6,1,12,4,18,1,13,1, - 122,19,95,83,112,101,99,77,101,116,104,111,100,115,46,99, - 114,101,97,116,101,99,2,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,23,0,0,0,124, - 0,0,106,0,0,106,1,0,106,2,0,124,1,0,131,1, - 0,1,100,1,0,83,41,2,122,189,68,111,32,101,118,101, - 114,121,116,104,105,110,103,32,110,101,99,101,115,115,97,114, - 121,32,116,111,32,101,120,101,99,117,116,101,32,116,104,101, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,110,97,109,101,115,112,97,99,101,32, - 111,102,32,96,109,111,100,117,108,101,96,32,105,115,32,117, - 115,101,100,32,97,115,32,116,104,101,32,116,97,114,103,101, - 116,32,111,102,32,101,120,101,99,117,116,105,111,110,46,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,117,115,101,115,32,116,104,101,32,108,111,97, - 100,101,114,39,115,32,96,101,120,101,99,95,109,111,100,117, - 108,101,40,41,96,32,109,101,116,104,111,100,46,10,10,32, - 32,32,32,32,32,32,32,78,41,3,114,178,0,0,0,114, - 170,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, - 101,41,2,114,71,0,0,0,114,180,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,5,95,101, - 120,101,99,98,4,0,0,115,2,0,0,0,0,7,122,18, - 95,83,112,101,99,77,101,116,104,111,100,115,46,95,101,120, - 101,99,99,2,0,0,0,0,0,0,0,4,0,0,0,11, - 0,0,0,67,0,0,0,115,17,1,0,0,124,0,0,106, - 0,0,106,1,0,125,2,0,116,2,0,106,3,0,131,0, - 0,1,116,4,0,124,2,0,131,1,0,143,226,0,1,116, - 5,0,106,6,0,106,7,0,124,2,0,131,1,0,124,1, - 0,107,9,0,114,95,0,100,1,0,106,8,0,124,2,0, - 131,1,0,125,3,0,116,9,0,124,3,0,100,2,0,124, - 2,0,131,1,1,130,1,0,110,0,0,124,0,0,106,0, - 0,106,10,0,100,3,0,107,8,0,114,181,0,124,0,0, - 106,0,0,106,11,0,100,3,0,107,8,0,114,158,0,116, - 9,0,100,4,0,100,2,0,124,0,0,106,0,0,106,1, - 0,131,1,1,130,1,0,110,0,0,124,0,0,106,12,0, - 124,1,0,100,5,0,100,6,0,131,1,1,1,124,1,0, - 83,124,0,0,106,12,0,124,1,0,100,5,0,100,6,0, - 131,1,1,1,116,13,0,124,0,0,106,0,0,106,10,0, - 100,7,0,131,2,0,115,243,0,124,0,0,106,0,0,106, - 10,0,106,14,0,124,2,0,131,1,0,1,110,13,0,124, - 0,0,106,15,0,124,1,0,131,1,0,1,87,100,3,0, - 81,88,116,5,0,106,6,0,124,2,0,25,83,41,8,122, - 51,69,120,101,99,117,116,101,32,116,104,101,32,115,112,101, - 99,32,105,110,32,97,110,32,101,120,105,115,116,105,110,103, - 32,109,111,100,117,108,101,39,115,32,110,97,109,101,115,112, - 97,99,101,46,122,30,109,111,100,117,108,101,32,123,33,114, - 125,32,110,111,116,32,105,110,32,115,121,115,46,109,111,100, - 117,108,101,115,114,67,0,0,0,78,122,14,109,105,115,115, - 105,110,103,32,108,111,97,100,101,114,114,249,0,0,0,84, - 114,2,1,0,0,41,16,114,178,0,0,0,114,67,0,0, - 0,114,106,0,0,0,218,12,97,99,113,117,105,114,101,95, - 108,111,99,107,114,103,0,0,0,114,7,0,0,0,114,73, - 0,0,0,114,93,0,0,0,114,47,0,0,0,114,154,0, - 0,0,114,170,0,0,0,114,221,0,0,0,114,255,0,0, - 0,114,60,0,0,0,218,11,108,111,97,100,95,109,111,100, - 117,108,101,114,3,1,0,0,41,4,114,71,0,0,0,114, - 180,0,0,0,114,67,0,0,0,114,172,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,176,0, - 0,0,108,4,0,0,115,32,0,0,0,0,2,12,1,10, - 1,13,1,24,1,15,1,21,1,18,1,18,1,27,2,19, - 1,4,1,19,1,21,4,22,2,19,1,122,17,95,83,112, - 101,99,77,101,116,104,111,100,115,46,101,120,101,99,99,1, - 0,0,0,0,0,0,0,3,0,0,0,27,0,0,0,67, - 0,0,0,115,24,1,0,0,124,0,0,106,0,0,125,1, - 0,124,1,0,106,1,0,106,2,0,124,1,0,106,3,0, - 131,1,0,1,116,4,0,106,5,0,124,1,0,106,3,0, - 25,125,2,0,116,6,0,124,2,0,100,1,0,100,0,0, - 131,3,0,100,0,0,107,8,0,114,108,0,121,16,0,124, - 1,0,106,1,0,124,2,0,95,7,0,87,113,108,0,4, - 116,8,0,107,10,0,114,104,0,1,1,1,89,113,108,0, - 88,110,0,0,116,6,0,124,2,0,100,2,0,100,0,0, - 131,3,0,100,0,0,107,8,0,114,215,0,121,59,0,124, - 2,0,106,9,0,124,2,0,95,10,0,116,11,0,124,2, - 0,100,3,0,131,2,0,115,190,0,124,1,0,106,3,0, - 106,12,0,100,4,0,131,1,0,100,5,0,25,124,2,0, - 95,10,0,110,0,0,87,113,215,0,4,116,8,0,107,10, - 0,114,211,0,1,1,1,89,113,215,0,88,110,0,0,116, - 6,0,124,2,0,100,6,0,100,0,0,131,3,0,100,0, - 0,107,8,0,114,20,1,121,13,0,124,1,0,124,2,0, - 95,13,0,87,113,20,1,4,116,8,0,107,10,0,114,16, - 1,1,1,1,89,113,20,1,88,110,0,0,124,2,0,83, - 41,7,78,114,205,0,0,0,114,251,0,0,0,114,247,0, - 0,0,114,116,0,0,0,114,84,0,0,0,114,209,0,0, - 0,41,14,114,178,0,0,0,114,170,0,0,0,114,5,1, - 0,0,114,67,0,0,0,114,7,0,0,0,114,73,0,0, - 0,114,62,0,0,0,114,205,0,0,0,114,210,0,0,0, - 114,57,0,0,0,114,251,0,0,0,114,60,0,0,0,114, - 32,0,0,0,114,209,0,0,0,41,3,114,71,0,0,0, - 114,178,0,0,0,114,180,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,25,95,108,111,97,100, - 95,98,97,99,107,119,97,114,100,95,99,111,109,112,97,116, - 105,98,108,101,132,4,0,0,115,42,0,0,0,0,4,9, - 1,19,2,16,1,24,1,3,1,16,1,13,1,8,1,24, - 1,3,4,12,1,15,1,32,1,13,1,8,1,24,1,3, - 1,13,1,13,1,8,1,122,38,95,83,112,101,99,77,101, - 116,104,111,100,115,46,95,108,111,97,100,95,98,97,99,107, - 119,97,114,100,95,99,111,109,112,97,116,105,98,108,101,99, - 1,0,0,0,0,0,0,0,2,0,0,0,11,0,0,0, - 67,0,0,0,115,179,0,0,0,124,0,0,106,0,0,106, - 1,0,100,0,0,107,9,0,114,52,0,116,2,0,124,0, - 0,106,0,0,106,1,0,100,1,0,131,2,0,115,52,0, - 124,0,0,106,3,0,131,0,0,83,110,0,0,124,0,0, - 106,4,0,131,0,0,125,1,0,116,5,0,124,1,0,131, - 1,0,143,84,0,1,124,0,0,106,0,0,106,1,0,100, - 0,0,107,8,0,114,143,0,124,0,0,106,0,0,106,6, - 0,100,0,0,107,8,0,114,156,0,116,7,0,100,2,0, - 100,3,0,124,0,0,106,0,0,106,8,0,131,1,1,130, - 1,0,113,156,0,110,13,0,124,0,0,106,9,0,124,1, - 0,131,1,0,1,87,100,0,0,81,88,116,10,0,106,11, - 0,124,0,0,106,0,0,106,8,0,25,83,41,4,78,114, - 2,1,0,0,122,14,109,105,115,115,105,110,103,32,108,111, - 97,100,101,114,114,67,0,0,0,41,12,114,178,0,0,0, - 114,170,0,0,0,114,60,0,0,0,114,6,1,0,0,114, - 1,1,0,0,114,213,0,0,0,114,221,0,0,0,114,154, - 0,0,0,114,67,0,0,0,114,3,1,0,0,114,7,0, - 0,0,114,73,0,0,0,41,2,114,71,0,0,0,114,180, + 0,107,8,0,114,218,0,124,5,0,100,0,0,107,8,0, + 114,212,0,121,13,0,124,1,0,106,5,0,125,2,0,87, + 113,218,0,4,116,1,0,107,10,0,114,208,0,1,1,1, + 100,0,0,125,2,0,89,113,218,0,88,110,6,0,124,5, + 0,125,2,0,121,13,0,124,0,0,106,6,0,125,6,0, + 87,110,24,0,4,116,1,0,107,10,0,114,1,1,1,1, + 1,100,0,0,125,6,0,89,110,1,0,88,121,19,0,116, + 7,0,124,0,0,106,8,0,131,1,0,125,7,0,87,110, + 24,0,4,116,1,0,107,10,0,114,47,1,1,1,1,100, + 0,0,125,7,0,89,110,1,0,88,116,9,0,124,4,0, + 124,1,0,100,1,0,124,2,0,131,2,1,125,3,0,124, + 5,0,100,0,0,107,8,0,114,87,1,100,2,0,110,3, + 0,100,3,0,124,3,0,95,10,0,124,6,0,124,3,0, + 95,11,0,124,7,0,124,3,0,95,12,0,124,3,0,83, + 41,4,78,114,221,0,0,0,70,84,41,13,114,210,0,0, + 0,114,211,0,0,0,114,57,0,0,0,114,206,0,0,0, + 114,213,0,0,0,90,7,95,79,82,73,71,73,78,218,10, + 95,95,99,97,99,104,101,100,95,95,218,4,108,105,115,116, + 218,8,95,95,112,97,116,104,95,95,114,220,0,0,0,114, + 225,0,0,0,114,229,0,0,0,114,224,0,0,0,41,8, + 114,181,0,0,0,114,173,0,0,0,114,221,0,0,0,114, + 180,0,0,0,114,67,0,0,0,114,245,0,0,0,114,229, + 0,0,0,114,224,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,17,95,115,112,101,99,95,102, + 114,111,109,95,109,111,100,117,108,101,210,3,0,0,115,72, + 0,0,0,0,2,3,1,13,1,13,1,5,2,12,1,4, + 2,9,1,12,1,3,1,13,1,13,2,5,1,3,1,13, + 1,13,1,11,1,12,1,12,1,3,1,13,1,13,1,14, + 2,6,1,3,1,13,1,13,1,11,1,3,1,19,1,13, + 1,11,2,21,1,27,1,9,1,9,1,114,251,0,0,0, + 218,8,111,118,101,114,114,105,100,101,70,99,2,0,0,0, + 1,0,0,0,4,0,0,0,59,0,0,0,67,0,0,0, + 115,27,2,0,0,124,2,0,115,30,0,116,0,0,124,1, + 0,100,1,0,100,0,0,131,3,0,100,0,0,107,8,0, + 114,67,0,121,16,0,124,0,0,106,1,0,124,1,0,95, + 2,0,87,110,18,0,4,116,3,0,107,10,0,114,66,0, + 1,1,1,89,110,1,0,88,124,2,0,115,97,0,116,0, + 0,124,1,0,100,2,0,100,0,0,131,3,0,100,0,0, + 107,8,0,114,194,0,124,0,0,106,4,0,125,3,0,124, + 3,0,100,0,0,107,8,0,114,160,0,124,0,0,106,5, + 0,100,0,0,107,9,0,114,160,0,116,6,0,106,7,0, + 116,6,0,131,1,0,125,3,0,124,0,0,106,5,0,124, + 3,0,95,8,0,121,13,0,124,3,0,124,1,0,95,9, + 0,87,110,18,0,4,116,3,0,107,10,0,114,193,0,1, + 1,1,89,110,1,0,88,124,2,0,115,224,0,116,0,0, + 124,1,0,100,3,0,100,0,0,131,3,0,100,0,0,107, + 8,0,114,5,1,121,16,0,124,0,0,106,10,0,124,1, + 0,95,11,0,87,110,18,0,4,116,3,0,107,10,0,114, + 4,1,1,1,1,89,110,1,0,88,121,13,0,124,0,0, + 124,1,0,95,12,0,87,110,18,0,4,116,3,0,107,10, + 0,114,38,1,1,1,1,89,110,1,0,88,124,2,0,115, + 69,1,116,0,0,124,1,0,100,4,0,100,0,0,131,3, + 0,100,0,0,107,8,0,114,121,1,124,0,0,106,5,0, + 100,0,0,107,9,0,114,121,1,121,16,0,124,0,0,106, + 5,0,124,1,0,95,13,0,87,110,18,0,4,116,3,0, + 107,10,0,114,120,1,1,1,1,89,110,1,0,88,124,0, + 0,106,14,0,114,23,2,124,2,0,115,160,1,116,0,0, + 124,1,0,100,5,0,100,0,0,131,3,0,100,0,0,107, + 8,0,114,197,1,121,16,0,124,0,0,106,15,0,124,1, + 0,95,16,0,87,110,18,0,4,116,3,0,107,10,0,114, + 196,1,1,1,1,89,110,1,0,88,124,2,0,115,227,1, + 116,0,0,124,1,0,100,6,0,100,0,0,131,3,0,100, + 0,0,107,8,0,114,23,2,124,0,0,106,17,0,100,0, + 0,107,9,0,114,23,2,121,16,0,124,0,0,106,17,0, + 124,1,0,95,18,0,87,110,18,0,4,116,3,0,107,10, + 0,114,22,2,1,1,1,89,110,1,0,88,124,1,0,83, + 41,7,78,114,57,0,0,0,114,206,0,0,0,218,11,95, + 95,112,97,99,107,97,103,101,95,95,114,250,0,0,0,114, + 213,0,0,0,114,248,0,0,0,41,19,114,62,0,0,0, + 114,67,0,0,0,114,57,0,0,0,114,211,0,0,0,114, + 173,0,0,0,114,224,0,0,0,218,16,95,78,97,109,101, + 115,112,97,99,101,76,111,97,100,101,114,218,7,95,95,110, + 101,119,95,95,218,5,95,112,97,116,104,114,206,0,0,0, + 114,236,0,0,0,114,253,0,0,0,114,210,0,0,0,114, + 250,0,0,0,114,230,0,0,0,114,221,0,0,0,114,213, + 0,0,0,114,229,0,0,0,114,248,0,0,0,41,4,114, + 180,0,0,0,114,181,0,0,0,114,252,0,0,0,114,173, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,14,95,108,111,97,100,95,117,110,108,111,99,107, - 101,100,162,4,0,0,115,20,0,0,0,0,2,18,2,21, - 1,13,2,12,1,13,1,18,1,18,1,30,3,19,5,122, - 27,95,83,112,101,99,77,101,116,104,111,100,115,46,95,108, - 111,97,100,95,117,110,108,111,99,107,101,100,99,1,0,0, - 0,0,0,0,0,1,0,0,0,8,0,0,0,67,0,0, - 0,115,49,0,0,0,116,0,0,106,1,0,131,0,0,1, - 116,2,0,124,0,0,106,3,0,106,4,0,131,1,0,143, - 15,0,1,124,0,0,106,5,0,131,0,0,83,87,100,1, - 0,81,88,100,1,0,83,41,2,122,207,82,101,116,117,114, + 0,0,218,18,95,105,110,105,116,95,109,111,100,117,108,101, + 95,97,116,116,114,115,255,3,0,0,115,86,0,0,0,0, + 4,30,1,3,1,16,1,13,1,5,2,30,1,9,1,12, + 2,15,1,15,1,12,1,3,1,13,1,13,1,5,2,30, + 1,3,1,16,1,13,1,5,2,3,1,13,1,13,1,5, + 2,30,1,15,1,3,1,16,1,13,1,5,2,9,1,30, + 1,3,1,16,1,13,1,5,2,30,1,15,1,3,1,16, + 1,13,1,5,1,114,1,1,0,0,99,1,0,0,0,0, + 0,0,0,2,0,0,0,5,0,0,0,67,0,0,0,115, + 129,0,0,0,100,1,0,125,1,0,116,0,0,124,0,0, + 106,1,0,100,2,0,131,2,0,114,45,0,124,0,0,106, + 1,0,106,2,0,124,0,0,131,1,0,125,1,0,110,40, + 0,116,0,0,124,0,0,106,1,0,100,3,0,131,2,0, + 114,85,0,116,3,0,106,4,0,100,4,0,116,5,0,100, + 5,0,100,6,0,131,2,1,1,124,1,0,100,1,0,107, + 8,0,114,112,0,116,6,0,124,0,0,106,7,0,131,1, + 0,125,1,0,116,8,0,124,0,0,124,1,0,131,2,0, + 1,124,1,0,83,41,7,122,43,67,114,101,97,116,101,32, + 97,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, + 110,32,116,104,101,32,112,114,111,118,105,100,101,100,32,115, + 112,101,99,46,78,218,13,99,114,101,97,116,101,95,109,111, + 100,117,108,101,218,11,101,120,101,99,95,109,111,100,117,108, + 101,122,87,115,116,97,114,116,105,110,103,32,105,110,32,80, + 121,116,104,111,110,32,51,46,54,44,32,108,111,97,100,101, + 114,115,32,100,101,102,105,110,105,110,103,32,101,120,101,99, + 95,109,111,100,117,108,101,40,41,32,109,117,115,116,32,97, + 108,115,111,32,100,101,102,105,110,101,32,99,114,101,97,116, + 101,95,109,111,100,117,108,101,40,41,90,10,115,116,97,99, + 107,108,101,118,101,108,114,115,0,0,0,41,9,114,60,0, + 0,0,114,173,0,0,0,114,2,1,0,0,114,118,0,0, + 0,114,119,0,0,0,114,120,0,0,0,114,68,0,0,0, + 114,67,0,0,0,114,1,1,0,0,41,2,114,180,0,0, + 0,114,181,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,16,109,111,100,117,108,101,95,102,114, + 111,109,95,115,112,101,99,55,4,0,0,115,20,0,0,0, + 0,3,6,1,18,3,21,1,18,1,9,2,13,1,12,1, + 15,1,13,1,114,4,1,0,0,99,1,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,149, + 0,0,0,124,0,0,106,0,0,100,1,0,107,8,0,114, + 21,0,100,2,0,110,6,0,124,0,0,106,0,0,125,1, + 0,124,0,0,106,1,0,100,1,0,107,8,0,114,95,0, + 124,0,0,106,2,0,100,1,0,107,8,0,114,73,0,100, + 3,0,106,3,0,124,1,0,131,1,0,83,100,4,0,106, + 3,0,124,1,0,124,0,0,106,2,0,131,2,0,83,110, + 50,0,124,0,0,106,4,0,114,123,0,100,5,0,106,3, + 0,124,1,0,124,0,0,106,1,0,131,2,0,83,100,6, + 0,106,3,0,124,0,0,106,0,0,124,0,0,106,1,0, + 131,2,0,83,100,1,0,83,41,7,122,38,82,101,116,117, + 114,110,32,116,104,101,32,114,101,112,114,32,116,111,32,117, + 115,101,32,102,111,114,32,116,104,101,32,109,111,100,117,108, + 101,46,78,114,208,0,0,0,122,13,60,109,111,100,117,108, + 101,32,123,33,114,125,62,122,20,60,109,111,100,117,108,101, + 32,123,33,114,125,32,40,123,33,114,125,41,62,122,23,60, + 109,111,100,117,108,101,32,123,33,114,125,32,102,114,111,109, + 32,123,33,114,125,62,122,18,60,109,111,100,117,108,101,32, + 123,33,114,125,32,40,123,125,41,62,41,5,114,67,0,0, + 0,114,221,0,0,0,114,173,0,0,0,114,47,0,0,0, + 114,230,0,0,0,41,2,114,180,0,0,0,114,67,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,212,0,0,0,73,4,0,0,115,16,0,0,0,0,3, + 30,1,15,1,15,1,13,2,22,2,9,1,19,2,114,212, + 0,0,0,99,2,0,0,0,0,0,0,0,4,0,0,0, + 12,0,0,0,67,0,0,0,115,252,0,0,0,124,0,0, + 106,0,0,125,2,0,116,1,0,106,2,0,131,0,0,1, + 116,3,0,124,2,0,131,1,0,143,208,0,1,116,4,0, + 106,5,0,106,6,0,124,2,0,131,1,0,124,1,0,107, + 9,0,114,89,0,100,1,0,106,7,0,124,2,0,131,1, + 0,125,3,0,116,8,0,124,3,0,100,2,0,124,2,0, + 131,1,1,130,1,0,124,0,0,106,9,0,100,3,0,107, + 8,0,114,163,0,124,0,0,106,10,0,100,3,0,107,8, + 0,114,140,0,116,8,0,100,4,0,100,2,0,124,0,0, + 106,0,0,131,1,1,130,1,0,116,11,0,124,0,0,124, + 1,0,100,5,0,100,6,0,131,2,1,1,124,1,0,83, + 116,11,0,124,0,0,124,1,0,100,5,0,100,6,0,131, + 2,1,1,116,12,0,124,0,0,106,9,0,100,7,0,131, + 2,0,115,219,0,124,0,0,106,9,0,106,13,0,124,2, + 0,131,1,0,1,110,16,0,124,0,0,106,9,0,106,14, + 0,124,1,0,131,1,0,1,87,100,3,0,81,88,116,4, + 0,106,5,0,124,2,0,25,83,41,8,122,51,69,120,101, + 99,117,116,101,32,116,104,101,32,115,112,101,99,32,105,110, + 32,97,110,32,101,120,105,115,116,105,110,103,32,109,111,100, + 117,108,101,39,115,32,110,97,109,101,115,112,97,99,101,46, + 122,30,109,111,100,117,108,101,32,123,33,114,125,32,110,111, + 116,32,105,110,32,115,121,115,46,109,111,100,117,108,101,115, + 114,67,0,0,0,78,122,14,109,105,115,115,105,110,103,32, + 108,111,97,100,101,114,114,252,0,0,0,84,114,3,1,0, + 0,41,15,114,67,0,0,0,114,106,0,0,0,218,12,97, + 99,113,117,105,114,101,95,108,111,99,107,114,103,0,0,0, + 114,7,0,0,0,114,73,0,0,0,114,93,0,0,0,114, + 47,0,0,0,114,159,0,0,0,114,173,0,0,0,114,224, + 0,0,0,114,1,1,0,0,114,60,0,0,0,218,11,108, + 111,97,100,95,109,111,100,117,108,101,114,3,1,0,0,41, + 4,114,180,0,0,0,114,181,0,0,0,114,67,0,0,0, + 114,175,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,178,0,0,0,90,4,0,0,115,32,0, + 0,0,0,2,9,1,10,1,13,1,24,1,15,1,18,1, + 15,1,15,1,21,2,19,1,4,1,19,1,18,4,19,2, + 22,1,114,178,0,0,0,99,1,0,0,0,0,0,0,0, + 2,0,0,0,27,0,0,0,67,0,0,0,115,3,1,0, + 0,124,0,0,106,0,0,106,1,0,124,0,0,106,2,0, + 131,1,0,1,116,3,0,106,4,0,124,0,0,106,2,0, + 25,125,1,0,116,5,0,124,1,0,100,1,0,100,0,0, + 131,3,0,100,0,0,107,8,0,114,96,0,121,16,0,124, + 0,0,106,0,0,124,1,0,95,6,0,87,110,18,0,4, + 116,7,0,107,10,0,114,95,0,1,1,1,89,110,1,0, + 88,116,5,0,124,1,0,100,2,0,100,0,0,131,3,0, + 100,0,0,107,8,0,114,197,0,121,56,0,124,1,0,106, + 8,0,124,1,0,95,9,0,116,10,0,124,1,0,100,3, + 0,131,2,0,115,175,0,124,0,0,106,2,0,106,11,0, + 100,4,0,131,1,0,100,5,0,25,124,1,0,95,9,0, + 87,110,18,0,4,116,7,0,107,10,0,114,196,0,1,1, + 1,89,110,1,0,88,116,5,0,124,1,0,100,6,0,100, + 0,0,131,3,0,100,0,0,107,8,0,114,255,0,121,13, + 0,124,0,0,124,1,0,95,12,0,87,110,18,0,4,116, + 7,0,107,10,0,114,254,0,1,1,1,89,110,1,0,88, + 124,1,0,83,41,7,78,114,206,0,0,0,114,253,0,0, + 0,114,250,0,0,0,114,117,0,0,0,114,84,0,0,0, + 114,210,0,0,0,41,13,114,173,0,0,0,114,6,1,0, + 0,114,67,0,0,0,114,7,0,0,0,114,73,0,0,0, + 114,62,0,0,0,114,206,0,0,0,114,211,0,0,0,114, + 57,0,0,0,114,253,0,0,0,114,60,0,0,0,114,32, + 0,0,0,114,210,0,0,0,41,2,114,180,0,0,0,114, + 181,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,25,95,108,111,97,100,95,98,97,99,107,119, + 97,114,100,95,99,111,109,112,97,116,105,98,108,101,115,4, + 0,0,115,40,0,0,0,0,4,19,2,16,1,24,1,3, + 1,16,1,13,1,5,1,24,1,3,4,12,1,15,1,29, + 1,13,1,5,1,24,1,3,1,13,1,13,1,5,1,114, + 7,1,0,0,99,1,0,0,0,0,0,0,0,2,0,0, + 0,11,0,0,0,67,0,0,0,115,158,0,0,0,124,0, + 0,106,0,0,100,0,0,107,9,0,114,43,0,116,1,0, + 124,0,0,106,0,0,100,1,0,131,2,0,115,43,0,116, + 2,0,124,0,0,131,1,0,83,116,3,0,124,0,0,131, + 1,0,125,1,0,116,4,0,124,1,0,131,1,0,143,75, + 0,1,124,0,0,106,0,0,100,0,0,107,8,0,114,122, + 0,124,0,0,106,5,0,100,0,0,107,8,0,114,138,0, + 116,6,0,100,2,0,100,3,0,124,0,0,106,7,0,131, + 1,1,130,1,0,110,16,0,124,0,0,106,0,0,106,8, + 0,124,1,0,131,1,0,1,87,100,0,0,81,88,116,9, + 0,106,10,0,124,0,0,106,7,0,25,83,41,4,78,114, + 3,1,0,0,122,14,109,105,115,115,105,110,103,32,108,111, + 97,100,101,114,114,67,0,0,0,41,11,114,173,0,0,0, + 114,60,0,0,0,114,7,1,0,0,114,4,1,0,0,114, + 216,0,0,0,114,224,0,0,0,114,159,0,0,0,114,67, + 0,0,0,114,3,1,0,0,114,7,0,0,0,114,73,0, + 0,0,41,2,114,180,0,0,0,114,181,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,14,95, + 108,111,97,100,95,117,110,108,111,99,107,101,100,144,4,0, + 0,115,20,0,0,0,0,2,15,2,18,1,10,2,12,1, + 13,1,15,1,15,1,24,3,22,5,114,8,1,0,0,99, + 1,0,0,0,0,0,0,0,1,0,0,0,9,0,0,0, + 67,0,0,0,115,46,0,0,0,116,0,0,106,1,0,131, + 0,0,1,116,2,0,124,0,0,106,3,0,131,1,0,143, + 15,0,1,116,4,0,124,0,0,131,1,0,83,87,100,1, + 0,81,88,100,1,0,83,41,2,122,191,82,101,116,117,114, 110,32,97,32,110,101,119,32,109,111,100,117,108,101,32,111, 98,106,101,99,116,44,32,108,111,97,100,101,100,32,98,121, 32,116,104,101,32,115,112,101,99,39,115,32,108,111,97,100, - 101,114,46,10,10,32,32,32,32,32,32,32,32,84,104,101, - 32,109,111,100,117,108,101,32,105,115,32,110,111,116,32,97, - 100,100,101,100,32,116,111,32,105,116,115,32,112,97,114,101, - 110,116,46,10,10,32,32,32,32,32,32,32,32,73,102,32, - 97,32,109,111,100,117,108,101,32,105,115,32,97,108,114,101, - 97,100,121,32,105,110,32,115,121,115,46,109,111,100,117,108, - 101,115,44,32,116,104,97,116,32,101,120,105,115,116,105,110, - 103,32,109,111,100,117,108,101,32,103,101,116,115,10,32,32, - 32,32,32,32,32,32,99,108,111,98,98,101,114,101,100,46, - 10,10,32,32,32,32,32,32,32,32,78,41,6,114,106,0, - 0,0,114,4,1,0,0,114,103,0,0,0,114,178,0,0, - 0,114,67,0,0,0,114,7,1,0,0,41,1,114,71,0, + 101,114,46,10,10,32,32,32,32,84,104,101,32,109,111,100, + 117,108,101,32,105,115,32,110,111,116,32,97,100,100,101,100, + 32,116,111,32,105,116,115,32,112,97,114,101,110,116,46,10, + 10,32,32,32,32,73,102,32,97,32,109,111,100,117,108,101, + 32,105,115,32,97,108,114,101,97,100,121,32,105,110,32,115, + 121,115,46,109,111,100,117,108,101,115,44,32,116,104,97,116, + 32,101,120,105,115,116,105,110,103,32,109,111,100,117,108,101, + 32,103,101,116,115,10,32,32,32,32,99,108,111,98,98,101, + 114,101,100,46,10,10,32,32,32,32,78,41,5,114,106,0, + 0,0,114,5,1,0,0,114,103,0,0,0,114,67,0,0, + 0,114,8,1,0,0,41,1,114,180,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,179,0,0, + 0,167,4,0,0,115,6,0,0,0,0,9,10,1,16,1, + 114,179,0,0,0,99,4,0,0,0,0,0,0,0,6,0, + 0,0,11,0,0,0,67,0,0,0,115,195,0,0,0,124, + 0,0,106,0,0,100,1,0,131,1,0,125,4,0,124,0, + 0,106,0,0,100,2,0,131,1,0,125,5,0,124,4,0, + 115,99,0,124,5,0,114,54,0,124,5,0,106,1,0,125, + 4,0,110,45,0,124,2,0,124,3,0,107,2,0,114,84, + 0,116,2,0,124,1,0,124,2,0,131,2,0,125,4,0, + 110,15,0,116,3,0,124,1,0,124,2,0,131,2,0,125, + 4,0,124,5,0,115,126,0,116,4,0,124,1,0,124,2, + 0,100,3,0,124,4,0,131,2,1,125,5,0,121,44,0, + 124,5,0,124,0,0,100,2,0,60,124,4,0,124,0,0, + 100,1,0,60,124,2,0,124,0,0,100,4,0,60,124,3, + 0,124,0,0,100,5,0,60,87,110,18,0,4,116,5,0, + 107,10,0,114,190,0,1,1,1,89,110,1,0,88,100,0, + 0,83,41,6,78,114,206,0,0,0,114,210,0,0,0,114, + 173,0,0,0,114,213,0,0,0,114,248,0,0,0,41,6, + 114,93,0,0,0,114,173,0,0,0,218,20,83,111,117,114, + 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, + 218,16,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,114,242,0,0,0,114,209,0,0,0,41,6,90,2, + 110,115,114,67,0,0,0,90,8,112,97,116,104,110,97,109, + 101,90,9,99,112,97,116,104,110,97,109,101,114,173,0,0, + 0,114,180,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,14,95,102,105,120,95,117,112,95,109, + 111,100,117,108,101,181,4,0,0,115,34,0,0,0,0,2, + 15,1,15,1,6,1,6,1,12,1,12,1,18,2,15,1, + 6,1,21,1,3,1,10,1,10,1,10,1,14,1,13,2, + 114,11,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,64,0,0,0,115,181,0,0,0,101, + 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, + 0,101,4,0,100,2,0,100,3,0,132,0,0,131,1,0, + 90,5,0,101,6,0,100,4,0,100,4,0,100,5,0,100, + 6,0,132,2,0,131,1,0,90,7,0,101,6,0,100,4, + 0,100,7,0,100,8,0,132,1,0,131,1,0,90,8,0, + 101,6,0,101,9,0,100,9,0,100,10,0,132,0,0,131, + 1,0,131,1,0,90,10,0,101,6,0,101,9,0,100,11, + 0,100,12,0,132,0,0,131,1,0,131,1,0,90,11,0, + 101,6,0,101,9,0,100,13,0,100,14,0,132,0,0,131, + 1,0,131,1,0,90,12,0,101,6,0,101,9,0,100,15, + 0,100,16,0,132,0,0,131,1,0,131,1,0,90,13,0, + 100,4,0,83,41,17,218,15,66,117,105,108,116,105,110,73, + 109,112,111,114,116,101,114,122,144,77,101,116,97,32,112,97, + 116,104,32,105,109,112,111,114,116,32,102,111,114,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,115,46,10, + 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, + 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, + 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, + 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, + 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, + 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, + 115,115,46,10,10,32,32,32,32,99,1,0,0,0,0,0, + 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, + 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, + 1,0,83,41,2,122,115,82,101,116,117,114,110,32,114,101, + 112,114,32,102,111,114,32,116,104,101,32,109,111,100,117,108, + 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,84,104,101,32,105,109,112,111,114, + 116,32,109,97,99,104,105,110,101,114,121,32,100,111,101,115, + 32,116,104,101,32,106,111,98,32,105,116,115,101,108,102,46, + 10,10,32,32,32,32,32,32,32,32,122,24,60,109,111,100, + 117,108,101,32,123,33,114,125,32,40,98,117,105,108,116,45, + 105,110,41,62,41,2,114,47,0,0,0,114,57,0,0,0, + 41,1,114,181,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,207,0,0,0,215,4,0,0,115, + 2,0,0,0,0,7,122,27,66,117,105,108,116,105,110,73, + 109,112,111,114,116,101,114,46,109,111,100,117,108,101,95,114, + 101,112,114,78,99,4,0,0,0,0,0,0,0,4,0,0, + 0,5,0,0,0,67,0,0,0,115,58,0,0,0,124,2, + 0,100,0,0,107,9,0,114,16,0,100,0,0,83,116,0, + 0,106,1,0,124,1,0,131,1,0,114,50,0,116,2,0, + 124,1,0,124,0,0,100,1,0,100,2,0,131,2,1,83, + 100,0,0,83,100,0,0,83,41,3,78,114,221,0,0,0, + 122,8,98,117,105,108,116,45,105,110,41,3,114,106,0,0, + 0,90,10,105,115,95,98,117,105,108,116,105,110,114,177,0, + 0,0,41,4,218,3,99,108,115,114,164,0,0,0,114,35, + 0,0,0,218,6,116,97,114,103,101,116,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,9,102,105,110,100, + 95,115,112,101,99,224,4,0,0,115,10,0,0,0,0,2, + 12,1,4,1,15,1,19,2,122,25,66,117,105,108,116,105, + 110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,115, + 112,101,99,99,3,0,0,0,0,0,0,0,4,0,0,0, + 3,0,0,0,67,0,0,0,115,41,0,0,0,124,0,0, + 106,0,0,124,1,0,124,2,0,131,2,0,125,3,0,124, + 3,0,100,1,0,107,9,0,114,37,0,124,3,0,106,1, + 0,83,100,1,0,83,41,2,122,175,70,105,110,100,32,116, + 104,101,32,98,117,105,108,116,45,105,110,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,73,102,32, + 39,112,97,116,104,39,32,105,115,32,101,118,101,114,32,115, + 112,101,99,105,102,105,101,100,32,116,104,101,110,32,116,104, + 101,32,115,101,97,114,99,104,32,105,115,32,99,111,110,115, + 105,100,101,114,101,100,32,97,32,102,97,105,108,117,114,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, + 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,78,41,2,114,15,1,0, + 0,114,173,0,0,0,41,4,114,13,1,0,0,114,164,0, + 0,0,114,35,0,0,0,114,180,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,11,102,105,110, + 100,95,109,111,100,117,108,101,233,4,0,0,115,4,0,0, + 0,0,9,18,1,122,27,66,117,105,108,116,105,110,73,109, + 112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,3,0,0,0,10, + 0,0,0,67,0,0,0,115,59,0,0,0,116,0,0,124, + 1,0,131,1,0,143,23,0,1,116,1,0,116,2,0,106, + 3,0,124,1,0,131,2,0,125,2,0,87,100,1,0,81, + 88,124,0,0,124,2,0,95,4,0,100,2,0,124,2,0, + 95,5,0,124,2,0,83,41,3,122,23,76,111,97,100,32, + 97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,46,78,114,30,0,0,0,41,6,114,69,0,0,0,114, + 114,0,0,0,114,106,0,0,0,90,12,105,110,105,116,95, + 98,117,105,108,116,105,110,114,206,0,0,0,114,253,0,0, + 0,41,3,114,13,1,0,0,114,164,0,0,0,114,181,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,177,0,0,0,185,4,0,0,115,6,0,0,0,0, - 9,10,1,19,1,122,17,95,83,112,101,99,77,101,116,104, - 111,100,115,46,108,111,97,100,78,41,13,114,57,0,0,0, - 114,56,0,0,0,114,58,0,0,0,114,59,0,0,0,114, - 72,0,0,0,114,206,0,0,0,114,255,0,0,0,114,1, - 1,0,0,114,3,1,0,0,114,176,0,0,0,114,6,1, - 0,0,114,7,1,0,0,114,177,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,175,0,0,0,225,3,0,0,115,20,0,0,0,12,3, - 6,4,12,3,12,16,24,80,12,23,12,10,12,24,12,30, - 12,23,114,175,0,0,0,99,4,0,0,0,0,0,0,0, - 6,0,0,0,11,0,0,0,67,0,0,0,115,201,0,0, - 0,124,0,0,106,0,0,100,1,0,131,1,0,125,4,0, - 124,0,0,106,0,0,100,2,0,131,1,0,125,5,0,124, - 4,0,115,102,0,124,5,0,114,54,0,124,5,0,106,1, - 0,125,4,0,113,102,0,124,2,0,124,3,0,107,2,0, - 114,84,0,116,2,0,124,1,0,124,2,0,131,2,0,125, - 4,0,113,102,0,116,3,0,124,1,0,124,2,0,131,2, - 0,125,4,0,110,0,0,124,5,0,115,132,0,116,4,0, - 124,1,0,124,2,0,100,3,0,124,4,0,131,2,1,125, - 5,0,110,0,0,121,44,0,124,5,0,124,0,0,100,2, - 0,60,124,4,0,124,0,0,100,1,0,60,124,2,0,124, - 0,0,100,4,0,60,124,3,0,124,0,0,100,5,0,60, - 87,110,18,0,4,116,5,0,107,10,0,114,196,0,1,1, - 1,89,110,1,0,88,100,0,0,83,41,6,78,114,205,0, - 0,0,114,209,0,0,0,114,170,0,0,0,114,211,0,0, - 0,114,245,0,0,0,41,6,114,93,0,0,0,114,170,0, - 0,0,218,20,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,218,16,83,111,117,114,99,101, - 70,105,108,101,76,111,97,100,101,114,114,240,0,0,0,114, - 208,0,0,0,41,6,90,2,110,115,114,67,0,0,0,90, - 8,112,97,116,104,110,97,109,101,90,9,99,112,97,116,104, - 110,97,109,101,114,170,0,0,0,114,178,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,14,95, - 102,105,120,95,117,112,95,109,111,100,117,108,101,199,4,0, - 0,115,34,0,0,0,0,2,15,1,15,1,6,1,6,1, - 12,1,12,1,18,2,18,1,6,1,24,1,3,1,10,1, - 10,1,10,1,14,1,13,2,114,10,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,64,0, - 0,0,115,181,0,0,0,101,0,0,90,1,0,100,0,0, - 90,2,0,100,1,0,90,3,0,101,4,0,100,2,0,100, - 3,0,132,0,0,131,1,0,90,5,0,101,6,0,100,4, - 0,100,4,0,100,5,0,100,6,0,132,2,0,131,1,0, - 90,7,0,101,6,0,100,4,0,100,7,0,100,8,0,132, - 1,0,131,1,0,90,8,0,101,6,0,101,9,0,100,9, - 0,100,10,0,132,0,0,131,1,0,131,1,0,90,10,0, - 101,6,0,101,9,0,100,11,0,100,12,0,132,0,0,131, - 1,0,131,1,0,90,11,0,101,6,0,101,9,0,100,13, - 0,100,14,0,132,0,0,131,1,0,131,1,0,90,12,0, - 101,6,0,101,9,0,100,15,0,100,16,0,132,0,0,131, - 1,0,131,1,0,90,13,0,100,4,0,83,41,17,218,15, - 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,122, - 144,77,101,116,97,32,112,97,116,104,32,105,109,112,111,114, - 116,32,102,111,114,32,98,117,105,108,116,45,105,110,32,109, - 111,100,117,108,101,115,46,10,10,32,32,32,32,65,108,108, - 32,109,101,116,104,111,100,115,32,97,114,101,32,101,105,116, - 104,101,114,32,99,108,97,115,115,32,111,114,32,115,116,97, - 116,105,99,32,109,101,116,104,111,100,115,32,116,111,32,97, - 118,111,105,100,32,116,104,101,32,110,101,101,100,32,116,111, - 10,32,32,32,32,105,110,115,116,97,110,116,105,97,116,101, - 32,116,104,101,32,99,108,97,115,115,46,10,10,32,32,32, - 32,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,16,0,0,0,100,1,0,106,0, - 0,124,0,0,106,1,0,131,1,0,83,41,2,122,115,82, - 101,116,117,114,110,32,114,101,112,114,32,102,111,114,32,116, - 104,101,32,109,111,100,117,108,101,46,10,10,32,32,32,32, - 32,32,32,32,84,104,101,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,84, - 104,101,32,105,109,112,111,114,116,32,109,97,99,104,105,110, - 101,114,121,32,100,111,101,115,32,116,104,101,32,106,111,98, - 32,105,116,115,101,108,102,46,10,10,32,32,32,32,32,32, - 32,32,122,24,60,109,111,100,117,108,101,32,123,33,114,125, - 32,40,98,117,105,108,116,45,105,110,41,62,41,2,114,47, - 0,0,0,114,57,0,0,0,41,1,114,180,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,206, - 0,0,0,233,4,0,0,115,2,0,0,0,0,7,122,27, - 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, - 109,111,100,117,108,101,95,114,101,112,114,78,99,4,0,0, - 0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,0, - 0,115,58,0,0,0,124,2,0,100,0,0,107,9,0,114, - 16,0,100,0,0,83,116,0,0,106,1,0,124,1,0,131, - 1,0,114,50,0,116,2,0,124,1,0,124,0,0,100,1, - 0,100,2,0,131,2,1,83,100,0,0,83,100,0,0,83, - 41,3,78,114,218,0,0,0,122,8,98,117,105,108,116,45, - 105,110,41,3,114,106,0,0,0,90,10,105,115,95,98,117, - 105,108,116,105,110,114,174,0,0,0,41,4,218,3,99,108, - 115,114,159,0,0,0,114,35,0,0,0,218,6,116,97,114, - 103,101,116,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,9,102,105,110,100,95,115,112,101,99,242,4,0, - 0,115,10,0,0,0,0,2,12,1,4,1,15,1,19,2, - 122,25,66,117,105,108,116,105,110,73,109,112,111,114,116,101, + 0,114,6,1,0,0,245,4,0,0,115,10,0,0,0,0, + 6,13,1,24,1,9,1,9,1,122,27,66,117,105,108,116, + 105,110,73,109,112,111,114,116,101,114,46,108,111,97,100,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, + 100,1,0,83,41,2,122,57,82,101,116,117,114,110,32,78, + 111,110,101,32,97,115,32,98,117,105,108,116,45,105,110,32, + 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, + 97,118,101,32,99,111,100,101,32,111,98,106,101,99,116,115, + 46,78,114,4,0,0,0,41,2,114,13,1,0,0,114,164, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,8,103,101,116,95,99,111,100,101,1,5,0,0, + 115,2,0,0,0,0,4,122,24,66,117,105,108,116,105,110, + 73,109,112,111,114,116,101,114,46,103,101,116,95,99,111,100, + 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41, + 2,122,56,82,101,116,117,114,110,32,78,111,110,101,32,97, + 115,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115, + 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, + 0,41,2,114,13,1,0,0,114,164,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,10,103,101, + 116,95,115,111,117,114,99,101,7,5,0,0,115,2,0,0, + 0,0,4,122,26,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,103,101,116,95,115,111,117,114,99,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, + 52,82,101,116,117,114,110,32,70,97,108,115,101,32,97,115, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 115,32,97,114,101,32,110,101,118,101,114,32,112,97,99,107, + 97,103,101,115,46,70,114,4,0,0,0,41,2,114,13,1, + 0,0,114,164,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,223,0,0,0,13,5,0,0,115, + 2,0,0,0,0,4,122,26,66,117,105,108,116,105,110,73, + 109,112,111,114,116,101,114,46,105,115,95,112,97,99,107,97, + 103,101,41,14,114,57,0,0,0,114,56,0,0,0,114,58, + 0,0,0,114,59,0,0,0,218,12,115,116,97,116,105,99, + 109,101,116,104,111,100,114,207,0,0,0,218,11,99,108,97, + 115,115,109,101,116,104,111,100,114,15,1,0,0,114,16,1, + 0,0,114,167,0,0,0,114,6,1,0,0,114,17,1,0, + 0,114,18,1,0,0,114,223,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 12,1,0,0,206,4,0,0,115,28,0,0,0,12,7,6, + 2,18,9,3,1,21,8,3,1,18,11,3,1,21,11,3, + 1,21,5,3,1,21,5,3,1,114,12,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,64, + 0,0,0,115,211,0,0,0,101,0,0,90,1,0,100,0, + 0,90,2,0,100,1,0,90,3,0,101,4,0,100,2,0, + 100,3,0,132,0,0,131,1,0,90,5,0,101,6,0,100, + 4,0,100,4,0,100,5,0,100,6,0,132,2,0,131,1, + 0,90,7,0,101,6,0,100,4,0,100,7,0,100,8,0, + 132,1,0,131,1,0,90,8,0,101,6,0,100,9,0,100, + 10,0,132,0,0,131,1,0,90,9,0,101,4,0,100,11, + 0,100,12,0,132,0,0,131,1,0,90,10,0,101,6,0, + 100,13,0,100,14,0,132,0,0,131,1,0,90,11,0,101, + 6,0,101,12,0,100,15,0,100,16,0,132,0,0,131,1, + 0,131,1,0,90,13,0,101,6,0,101,12,0,100,17,0, + 100,18,0,132,0,0,131,1,0,131,1,0,90,14,0,101, + 6,0,101,12,0,100,19,0,100,20,0,132,0,0,131,1, + 0,131,1,0,90,15,0,100,4,0,83,41,21,218,14,70, + 114,111,122,101,110,73,109,112,111,114,116,101,114,122,142,77, + 101,116,97,32,112,97,116,104,32,105,109,112,111,114,116,32, + 102,111,114,32,102,114,111,122,101,110,32,109,111,100,117,108, + 101,115,46,10,10,32,32,32,32,65,108,108,32,109,101,116, + 104,111,100,115,32,97,114,101,32,101,105,116,104,101,114,32, + 99,108,97,115,115,32,111,114,32,115,116,97,116,105,99,32, + 109,101,116,104,111,100,115,32,116,111,32,97,118,111,105,100, + 32,116,104,101,32,110,101,101,100,32,116,111,10,32,32,32, + 32,105,110,115,116,97,110,116,105,97,116,101,32,116,104,101, + 32,99,108,97,115,115,46,10,10,32,32,32,32,99,1,0, + 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, + 0,0,115,16,0,0,0,100,1,0,106,0,0,124,0,0, + 106,1,0,131,1,0,83,41,2,122,115,82,101,116,117,114, + 110,32,114,101,112,114,32,102,111,114,32,116,104,101,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,101,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,84,104,101,32,105, + 109,112,111,114,116,32,109,97,99,104,105,110,101,114,121,32, + 100,111,101,115,32,116,104,101,32,106,111,98,32,105,116,115, + 101,108,102,46,10,10,32,32,32,32,32,32,32,32,122,22, + 60,109,111,100,117,108,101,32,123,33,114,125,32,40,102,114, + 111,122,101,110,41,62,41,2,114,47,0,0,0,114,57,0, + 0,0,41,1,218,1,109,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,207,0,0,0,29,5,0,0,115, + 2,0,0,0,0,7,122,26,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,46,109,111,100,117,108,101,95,114,101, + 112,114,78,99,4,0,0,0,0,0,0,0,4,0,0,0, + 5,0,0,0,67,0,0,0,115,42,0,0,0,116,0,0, + 106,1,0,124,1,0,131,1,0,114,34,0,116,2,0,124, + 1,0,124,0,0,100,1,0,100,2,0,131,2,1,83,100, + 0,0,83,100,0,0,83,41,3,78,114,221,0,0,0,90, + 6,102,114,111,122,101,110,41,3,114,106,0,0,0,114,168, + 0,0,0,114,177,0,0,0,41,4,114,13,1,0,0,114, + 164,0,0,0,114,35,0,0,0,114,14,1,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,15,1, + 0,0,38,5,0,0,115,6,0,0,0,0,2,15,1,19, + 2,122,24,70,114,111,122,101,110,73,109,112,111,114,116,101, 114,46,102,105,110,100,95,115,112,101,99,99,3,0,0,0, - 0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,0, - 115,41,0,0,0,124,0,0,106,0,0,124,1,0,124,2, - 0,131,2,0,125,3,0,124,3,0,100,1,0,107,9,0, - 114,37,0,124,3,0,106,1,0,83,100,1,0,83,41,2, - 122,175,70,105,110,100,32,116,104,101,32,98,117,105,108,116, - 45,105,110,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,32,32,32,32,73,102,32,39,112,97,116,104,39,32,105, - 115,32,101,118,101,114,32,115,112,101,99,105,102,105,101,100, - 32,116,104,101,110,32,116,104,101,32,115,101,97,114,99,104, - 32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97, - 32,102,97,105,108,117,114,101,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,78,41,2,114,14,1,0,0,114,170,0,0,0,41,4, - 114,12,1,0,0,114,159,0,0,0,114,35,0,0,0,114, - 178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, - 251,4,0,0,115,4,0,0,0,0,9,18,1,122,27,66, - 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,102, - 105,110,100,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,3,0,0,0,10,0,0,0,67,0,0,0,115, - 59,0,0,0,116,0,0,124,1,0,131,1,0,143,23,0, - 1,116,1,0,116,2,0,106,3,0,124,1,0,131,2,0, - 125,2,0,87,100,1,0,81,88,124,0,0,124,2,0,95, - 4,0,100,2,0,124,2,0,95,5,0,124,2,0,83,41, - 3,122,23,76,111,97,100,32,97,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,46,78,114,30,0,0,0, - 41,6,114,69,0,0,0,114,114,0,0,0,114,106,0,0, - 0,90,12,105,110,105,116,95,98,117,105,108,116,105,110,114, - 205,0,0,0,114,251,0,0,0,41,3,114,12,1,0,0, - 114,159,0,0,0,114,180,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,5,1,0,0,7,5, - 0,0,115,10,0,0,0,0,6,13,1,24,1,9,1,9, - 1,122,27,66,117,105,108,116,105,110,73,109,112,111,114,116, - 101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,57, - 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, - 100,111,32,110,111,116,32,104,97,118,101,32,99,111,100,101, - 32,111,98,106,101,99,116,115,46,78,114,4,0,0,0,41, - 2,114,12,1,0,0,114,159,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,8,103,101,116,95, - 99,111,100,101,19,5,0,0,115,2,0,0,0,0,4,122, - 24,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, - 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, - 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, - 0,0,0,100,1,0,83,41,2,122,56,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,115,32,100,111,32,110,111, - 116,32,104,97,118,101,32,115,111,117,114,99,101,32,99,111, - 100,101,46,78,114,4,0,0,0,41,2,114,12,1,0,0, - 114,159,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,10,103,101,116,95,115,111,117,114,99,101, - 25,5,0,0,115,2,0,0,0,0,4,122,26,66,117,105, - 108,116,105,110,73,109,112,111,114,116,101,114,46,103,101,116, - 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, - 0,100,1,0,83,41,2,122,52,82,101,116,117,114,110,32, - 70,97,108,115,101,32,97,115,32,98,117,105,108,116,45,105, - 110,32,109,111,100,117,108,101,115,32,97,114,101,32,110,101, - 118,101,114,32,112,97,99,107,97,103,101,115,46,70,114,4, - 0,0,0,41,2,114,12,1,0,0,114,159,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,220, - 0,0,0,31,5,0,0,115,2,0,0,0,0,4,122,26, - 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, - 105,115,95,112,97,99,107,97,103,101,41,14,114,57,0,0, - 0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,0, - 218,12,115,116,97,116,105,99,109,101,116,104,111,100,114,206, - 0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,100, - 114,14,1,0,0,114,15,1,0,0,114,162,0,0,0,114, - 5,1,0,0,114,16,1,0,0,114,17,1,0,0,114,220, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,11,1,0,0,224,4,0,0, - 115,28,0,0,0,12,7,6,2,18,9,3,1,21,8,3, - 1,18,11,3,1,21,11,3,1,21,5,3,1,21,5,3, - 1,114,11,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,64,0,0,0,115,193,0,0,0, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, - 3,0,101,4,0,100,2,0,100,3,0,132,0,0,131,1, - 0,90,5,0,101,6,0,100,4,0,100,4,0,100,5,0, - 100,6,0,132,2,0,131,1,0,90,7,0,101,6,0,100, - 4,0,100,7,0,100,8,0,132,1,0,131,1,0,90,8, - 0,101,4,0,100,9,0,100,10,0,132,0,0,131,1,0, - 90,9,0,101,6,0,100,11,0,100,12,0,132,0,0,131, - 1,0,90,10,0,101,6,0,101,11,0,100,13,0,100,14, - 0,132,0,0,131,1,0,131,1,0,90,12,0,101,6,0, - 101,11,0,100,15,0,100,16,0,132,0,0,131,1,0,131, - 1,0,90,13,0,101,6,0,101,11,0,100,17,0,100,18, - 0,132,0,0,131,1,0,131,1,0,90,14,0,100,4,0, - 83,41,19,218,14,70,114,111,122,101,110,73,109,112,111,114, - 116,101,114,122,142,77,101,116,97,32,112,97,116,104,32,105, - 109,112,111,114,116,32,102,111,114,32,102,114,111,122,101,110, - 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,65, - 108,108,32,109,101,116,104,111,100,115,32,97,114,101,32,101, - 105,116,104,101,114,32,99,108,97,115,115,32,111,114,32,115, - 116,97,116,105,99,32,109,101,116,104,111,100,115,32,116,111, - 32,97,118,111,105,100,32,116,104,101,32,110,101,101,100,32, - 116,111,10,32,32,32,32,105,110,115,116,97,110,116,105,97, - 116,101,32,116,104,101,32,99,108,97,115,115,46,10,10,32, - 32,32,32,99,1,0,0,0,0,0,0,0,1,0,0,0, - 2,0,0,0,67,0,0,0,115,16,0,0,0,100,1,0, - 106,0,0,124,0,0,106,1,0,131,1,0,83,41,2,122, - 115,82,101,116,117,114,110,32,114,101,112,114,32,102,111,114, - 32,116,104,101,32,109,111,100,117,108,101,46,10,10,32,32, - 32,32,32,32,32,32,84,104,101,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,84,104,101,32,105,109,112,111,114,116,32,109,97,99,104, - 105,110,101,114,121,32,100,111,101,115,32,116,104,101,32,106, - 111,98,32,105,116,115,101,108,102,46,10,10,32,32,32,32, - 32,32,32,32,122,22,60,109,111,100,117,108,101,32,123,33, - 114,125,32,40,102,114,111,122,101,110,41,62,41,2,114,47, - 0,0,0,114,57,0,0,0,41,1,218,1,109,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,206,0,0, - 0,47,5,0,0,115,2,0,0,0,0,7,122,26,70,114, - 111,122,101,110,73,109,112,111,114,116,101,114,46,109,111,100, - 117,108,101,95,114,101,112,114,78,99,4,0,0,0,0,0, - 0,0,4,0,0,0,5,0,0,0,67,0,0,0,115,42, - 0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,114, - 34,0,116,2,0,124,1,0,124,0,0,100,1,0,100,2, - 0,131,2,1,83,100,0,0,83,100,0,0,83,41,3,78, - 114,218,0,0,0,90,6,102,114,111,122,101,110,41,3,114, - 106,0,0,0,114,163,0,0,0,114,174,0,0,0,41,4, - 114,12,1,0,0,114,159,0,0,0,114,35,0,0,0,114, - 13,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,14,1,0,0,56,5,0,0,115,6,0,0, - 0,0,2,15,1,19,2,122,24,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,102,105,110,100,95,115,112,101, - 99,99,3,0,0,0,0,0,0,0,3,0,0,0,2,0, - 0,0,67,0,0,0,115,23,0,0,0,116,0,0,106,1, - 0,124,1,0,131,1,0,114,19,0,124,0,0,83,100,1, - 0,83,41,2,122,93,70,105,110,100,32,97,32,102,114,111, - 122,101,110,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, - 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, - 32,32,32,78,41,2,114,106,0,0,0,114,163,0,0,0, - 41,3,114,12,1,0,0,114,159,0,0,0,114,35,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,15,1,0,0,63,5,0,0,115,2,0,0,0,0,7, - 122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 46,102,105,110,100,95,109,111,100,117,108,101,99,1,0,0, - 0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,0, - 0,115,95,0,0,0,124,0,0,106,0,0,106,1,0,125, - 1,0,116,2,0,106,3,0,124,1,0,131,1,0,115,57, - 0,116,4,0,100,1,0,106,5,0,124,1,0,131,1,0, - 100,2,0,124,1,0,131,1,1,130,1,0,110,0,0,116, + 0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0, + 115,23,0,0,0,116,0,0,106,1,0,124,1,0,131,1, + 0,114,19,0,124,0,0,83,100,1,0,83,41,2,122,93, + 70,105,110,100,32,97,32,102,114,111,122,101,110,32,109,111, + 100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, + 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2, + 114,106,0,0,0,114,168,0,0,0,41,3,114,13,1,0, + 0,114,164,0,0,0,114,35,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,16,1,0,0,45, + 5,0,0,115,2,0,0,0,0,7,122,26,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,46,102,105,110,100,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, + 100,1,0,83,41,2,122,42,85,115,101,32,100,101,102,97, + 117,108,116,32,115,101,109,97,110,116,105,99,115,32,102,111, + 114,32,109,111,100,117,108,101,32,99,114,101,97,116,105,111, + 110,46,78,114,4,0,0,0,41,2,114,13,1,0,0,114, + 180,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,2,1,0,0,54,5,0,0,115,0,0,0, + 0,122,28,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, + 1,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, + 67,0,0,0,115,92,0,0,0,124,0,0,106,0,0,106, + 1,0,125,1,0,116,2,0,106,3,0,124,1,0,131,1, + 0,115,54,0,116,4,0,100,1,0,106,5,0,124,1,0, + 131,1,0,100,2,0,124,1,0,131,1,1,130,1,0,116, 6,0,116,2,0,106,7,0,124,1,0,131,2,0,125,2, 0,116,8,0,124,2,0,124,0,0,106,9,0,131,2,0, 1,100,0,0,83,41,3,78,122,27,123,33,114,125,32,105, 115,32,110,111,116,32,97,32,102,114,111,122,101,110,32,109, - 111,100,117,108,101,114,67,0,0,0,41,10,114,209,0,0, - 0,114,67,0,0,0,114,106,0,0,0,114,163,0,0,0, - 114,154,0,0,0,114,47,0,0,0,114,114,0,0,0,218, + 111,100,117,108,101,114,67,0,0,0,41,10,114,210,0,0, + 0,114,67,0,0,0,114,106,0,0,0,114,168,0,0,0, + 114,159,0,0,0,114,47,0,0,0,114,114,0,0,0,218, 17,103,101,116,95,102,114,111,122,101,110,95,111,98,106,101, - 99,116,114,176,0,0,0,114,63,0,0,0,41,3,114,180, - 0,0,0,114,67,0,0,0,114,195,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,2,1,0, - 0,72,5,0,0,115,12,0,0,0,0,2,12,1,15,1, - 18,1,12,1,18,1,122,26,70,114,111,122,101,110,73,109, - 112,111,114,116,101,114,46,101,120,101,99,95,109,111,100,117, - 108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,67,0,0,0,115,13,0,0,0,116,0,0,124, - 0,0,124,1,0,131,2,0,83,41,1,122,95,76,111,97, - 100,32,97,32,102,114,111,122,101,110,32,109,111,100,117,108, - 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, - 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, - 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, - 100,46,10,10,32,32,32,32,32,32,32,32,41,1,114,181, - 0,0,0,41,2,114,12,1,0,0,114,159,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,5, - 1,0,0,81,5,0,0,115,2,0,0,0,0,7,122,26, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,108, - 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, - 13,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0, - 83,41,1,122,45,82,101,116,117,114,110,32,116,104,101,32, - 99,111,100,101,32,111,98,106,101,99,116,32,102,111,114,32, - 116,104,101,32,102,114,111,122,101,110,32,109,111,100,117,108, - 101,46,41,2,114,106,0,0,0,114,22,1,0,0,41,2, - 114,12,1,0,0,114,159,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,16,1,0,0,90,5, - 0,0,115,2,0,0,0,0,4,122,23,70,114,111,122,101, - 110,73,109,112,111,114,116,101,114,46,103,101,116,95,99,111, - 100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, - 41,2,122,54,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,102,114,111,122,101,110,32,109,111,100,117,108,101, - 115,32,100,111,32,110,111,116,32,104,97,118,101,32,115,111, - 117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,0, - 41,2,114,12,1,0,0,114,159,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,17,1,0,0, - 96,5,0,0,115,2,0,0,0,0,4,122,25,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,103,101,116,95, - 115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,0, - 116,0,0,106,1,0,124,1,0,131,1,0,83,41,1,122, - 46,82,101,116,117,114,110,32,84,114,117,101,32,105,102,32, - 116,104,101,32,102,114,111,122,101,110,32,109,111,100,117,108, - 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,41, - 2,114,106,0,0,0,90,17,105,115,95,102,114,111,122,101, - 110,95,112,97,99,107,97,103,101,41,2,114,12,1,0,0, - 114,159,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,220,0,0,0,102,5,0,0,115,2,0, - 0,0,0,4,122,25,70,114,111,122,101,110,73,109,112,111, - 114,116,101,114,46,105,115,95,112,97,99,107,97,103,101,41, - 15,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, - 114,59,0,0,0,114,18,1,0,0,114,206,0,0,0,114, - 19,1,0,0,114,14,1,0,0,114,15,1,0,0,114,2, - 1,0,0,114,5,1,0,0,114,165,0,0,0,114,16,1, - 0,0,114,17,1,0,0,114,220,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,20,1,0,0,38,5,0,0,115,28,0,0,0,12,7, - 6,2,18,9,3,1,21,6,3,1,18,8,18,9,18,9, - 3,1,21,5,3,1,21,5,3,1,114,20,1,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 64,0,0,0,115,121,0,0,0,101,0,0,90,1,0,100, - 0,0,90,2,0,100,1,0,90,3,0,100,2,0,90,4, - 0,100,3,0,90,5,0,100,4,0,90,6,0,101,7,0, - 100,5,0,100,6,0,132,0,0,131,1,0,90,8,0,101, - 7,0,100,7,0,100,8,0,132,0,0,131,1,0,90,9, - 0,101,7,0,100,9,0,100,9,0,100,10,0,100,11,0, - 132,2,0,131,1,0,90,10,0,101,7,0,100,9,0,100, - 12,0,100,13,0,132,1,0,131,1,0,90,11,0,100,9, - 0,83,41,14,218,21,87,105,110,100,111,119,115,82,101,103, - 105,115,116,114,121,70,105,110,100,101,114,122,62,77,101,116, - 97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111, - 114,32,109,111,100,117,108,101,115,32,100,101,99,108,97,114, - 101,100,32,105,110,32,116,104,101,32,87,105,110,100,111,119, - 115,32,114,101,103,105,115,116,114,121,46,122,59,83,111,102, - 116,119,97,114,101,92,80,121,116,104,111,110,92,80,121,116, - 104,111,110,67,111,114,101,92,123,115,121,115,95,118,101,114, - 115,105,111,110,125,92,77,111,100,117,108,101,115,92,123,102, - 117,108,108,110,97,109,101,125,122,65,83,111,102,116,119,97, - 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, - 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, - 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, - 110,97,109,101,125,92,68,101,98,117,103,70,99,2,0,0, - 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0, - 0,115,67,0,0,0,121,23,0,116,0,0,106,1,0,116, - 0,0,106,2,0,124,1,0,131,2,0,83,87,110,37,0, - 4,116,3,0,107,10,0,114,62,0,1,1,1,116,0,0, - 106,1,0,116,0,0,106,4,0,124,1,0,131,2,0,83, - 89,110,1,0,88,100,0,0,83,41,1,78,41,5,218,7, - 95,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121, - 90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, - 83,69,82,114,40,0,0,0,90,18,72,75,69,89,95,76, - 79,67,65,76,95,77,65,67,72,73,78,69,41,2,114,12, - 1,0,0,218,3,107,101,121,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,14,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,121,5,0,0,115,8,0,0,0, - 0,2,3,1,23,1,13,1,122,36,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, - 95,111,112,101,110,95,114,101,103,105,115,116,114,121,99,2, - 0,0,0,0,0,0,0,6,0,0,0,16,0,0,0,67, - 0,0,0,115,142,0,0,0,124,0,0,106,0,0,114,21, - 0,124,0,0,106,1,0,125,2,0,110,9,0,124,0,0, - 106,2,0,125,2,0,124,2,0,106,3,0,100,1,0,124, - 1,0,100,2,0,116,4,0,106,5,0,100,0,0,100,3, - 0,133,2,0,25,131,0,2,125,3,0,121,46,0,124,0, - 0,106,6,0,124,3,0,131,1,0,143,25,0,125,4,0, - 116,7,0,106,8,0,124,4,0,100,4,0,131,2,0,125, - 5,0,87,100,0,0,81,88,87,110,22,0,4,116,9,0, - 107,10,0,114,137,0,1,1,1,100,0,0,83,89,110,1, - 0,88,124,5,0,83,41,5,78,114,159,0,0,0,90,11, - 115,121,115,95,118,101,114,115,105,111,110,114,137,0,0,0, - 114,30,0,0,0,41,10,218,11,68,69,66,85,71,95,66, - 85,73,76,68,218,18,82,69,71,73,83,84,82,89,95,75, - 69,89,95,68,69,66,85,71,218,12,82,69,71,73,83,84, - 82,89,95,75,69,89,114,47,0,0,0,114,7,0,0,0, - 218,7,118,101,114,115,105,111,110,114,26,1,0,0,114,24, - 1,0,0,90,10,81,117,101,114,121,86,97,108,117,101,114, - 40,0,0,0,41,6,114,12,1,0,0,114,159,0,0,0, - 90,12,114,101,103,105,115,116,114,121,95,107,101,121,114,25, - 1,0,0,90,4,104,107,101,121,218,8,102,105,108,101,112, - 97,116,104,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,16,95,115,101,97,114,99,104,95,114,101,103,105, - 115,116,114,121,128,5,0,0,115,22,0,0,0,0,2,9, - 1,12,2,9,1,15,1,22,1,3,1,18,1,28,1,13, - 1,9,1,122,38,87,105,110,100,111,119,115,82,101,103,105, - 115,116,114,121,70,105,110,100,101,114,46,95,115,101,97,114, - 99,104,95,114,101,103,105,115,116,114,121,78,99,4,0,0, - 0,0,0,0,0,8,0,0,0,14,0,0,0,67,0,0, - 0,115,155,0,0,0,124,0,0,106,0,0,124,1,0,131, - 1,0,125,4,0,124,4,0,100,0,0,107,8,0,114,31, - 0,100,0,0,83,121,14,0,116,1,0,124,4,0,131,1, - 0,1,87,110,22,0,4,116,2,0,107,10,0,114,69,0, - 1,1,1,100,0,0,83,89,110,1,0,88,120,78,0,116, - 3,0,131,0,0,68,93,67,0,92,2,0,125,5,0,125, - 6,0,124,4,0,106,4,0,116,5,0,124,6,0,131,1, - 0,131,1,0,114,80,0,116,6,0,124,1,0,124,5,0, - 124,1,0,124,4,0,131,2,0,100,1,0,124,4,0,131, - 2,1,125,7,0,124,7,0,83,113,80,0,87,100,0,0, - 83,41,2,78,114,218,0,0,0,41,7,114,32,1,0,0, - 114,39,0,0,0,114,40,0,0,0,114,241,0,0,0,114, - 231,0,0,0,114,232,0,0,0,114,174,0,0,0,41,8, - 114,12,1,0,0,114,159,0,0,0,114,35,0,0,0,114, - 13,1,0,0,114,31,1,0,0,114,170,0,0,0,114,126, - 0,0,0,114,178,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,14,1,0,0,143,5,0,0, - 115,24,0,0,0,0,2,15,1,12,1,4,1,3,1,14, - 1,13,1,9,1,22,1,21,1,21,1,9,1,122,31,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,3, - 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, - 0,0,0,115,45,0,0,0,124,0,0,106,0,0,124,1, - 0,124,2,0,131,2,0,125,3,0,124,3,0,100,1,0, - 107,9,0,114,37,0,124,3,0,106,1,0,83,100,1,0, - 83,100,1,0,83,41,2,122,108,70,105,110,100,32,109,111, - 100,117,108,101,32,110,97,109,101,100,32,105,110,32,116,104, - 101,32,114,101,103,105,115,116,114,121,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,101, - 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, - 32,32,32,32,32,78,41,2,114,14,1,0,0,114,170,0, - 0,0,41,4,114,12,1,0,0,114,159,0,0,0,114,35, - 0,0,0,114,178,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,15,1,0,0,158,5,0,0, - 115,8,0,0,0,0,7,18,1,12,1,7,2,122,33,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, - 41,12,114,57,0,0,0,114,56,0,0,0,114,58,0,0, - 0,114,59,0,0,0,114,29,1,0,0,114,28,1,0,0, - 114,27,1,0,0,114,19,1,0,0,114,26,1,0,0,114, - 32,1,0,0,114,14,1,0,0,114,15,1,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,23,1,0,0,109,5,0,0,115,20,0,0,0, - 12,2,6,3,6,3,6,2,6,2,18,7,18,15,3,1, - 21,14,3,1,114,23,1,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,52, - 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, - 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, - 0,100,4,0,100,5,0,132,0,0,90,5,0,101,6,0, - 90,7,0,100,6,0,83,41,7,218,13,95,76,111,97,100, - 101,114,66,97,115,105,99,115,122,83,66,97,115,101,32,99, - 108,97,115,115,32,111,102,32,99,111,109,109,111,110,32,99, - 111,100,101,32,110,101,101,100,101,100,32,98,121,32,98,111, - 116,104,32,83,111,117,114,99,101,76,111,97,100,101,114,32, - 97,110,100,10,32,32,32,32,83,111,117,114,99,101,108,101, - 115,115,70,105,108,101,76,111,97,100,101,114,46,99,2,0, - 0,0,0,0,0,0,5,0,0,0,3,0,0,0,67,0, - 0,0,115,88,0,0,0,116,0,0,124,0,0,106,1,0, - 124,1,0,131,1,0,131,1,0,100,1,0,25,125,2,0, - 124,2,0,106,2,0,100,2,0,100,1,0,131,2,0,100, - 3,0,25,125,3,0,124,1,0,106,3,0,100,2,0,131, - 1,0,100,4,0,25,125,4,0,124,3,0,100,5,0,107, - 2,0,111,87,0,124,4,0,100,5,0,107,3,0,83,41, - 6,122,141,67,111,110,99,114,101,116,101,32,105,109,112,108, - 101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110, - 115,112,101,99,116,76,111,97,100,101,114,46,105,115,95,112, - 97,99,107,97,103,101,32,98,121,32,99,104,101,99,107,105, - 110,103,32,105,102,10,32,32,32,32,32,32,32,32,116,104, - 101,32,112,97,116,104,32,114,101,116,117,114,110,101,100,32, - 98,121,32,103,101,116,95,102,105,108,101,110,97,109,101,32, - 104,97,115,32,97,32,102,105,108,101,110,97,109,101,32,111, - 102,32,39,95,95,105,110,105,116,95,95,46,112,121,39,46, - 114,29,0,0,0,114,116,0,0,0,114,84,0,0,0,114, - 115,0,0,0,114,72,0,0,0,41,4,114,38,0,0,0, - 114,239,0,0,0,114,34,0,0,0,114,32,0,0,0,41, - 5,114,71,0,0,0,114,159,0,0,0,114,131,0,0,0, - 90,13,102,105,108,101,110,97,109,101,95,98,97,115,101,90, - 9,116,97,105,108,95,110,97,109,101,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,220,0,0,0,177,5, - 0,0,115,8,0,0,0,0,3,25,1,22,1,19,1,122, - 24,95,76,111,97,100,101,114,66,97,115,105,99,115,46,105, - 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, - 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,80, - 0,0,0,124,0,0,106,0,0,124,1,0,106,1,0,131, - 1,0,125,2,0,124,2,0,100,1,0,107,8,0,114,57, - 0,116,2,0,100,2,0,106,3,0,124,1,0,106,1,0, - 131,1,0,131,1,0,130,1,0,110,0,0,116,4,0,116, - 5,0,124,2,0,124,1,0,106,6,0,131,3,0,1,100, - 1,0,83,41,3,122,19,69,120,101,99,117,116,101,32,116, - 104,101,32,109,111,100,117,108,101,46,78,122,52,99,97,110, - 110,111,116,32,108,111,97,100,32,109,111,100,117,108,101,32, - 123,33,114,125,32,119,104,101,110,32,103,101,116,95,99,111, - 100,101,40,41,32,114,101,116,117,114,110,115,32,78,111,110, - 101,41,7,114,16,1,0,0,114,57,0,0,0,114,154,0, - 0,0,114,47,0,0,0,114,114,0,0,0,114,176,0,0, - 0,114,63,0,0,0,41,3,114,71,0,0,0,114,180,0, - 0,0,114,195,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,2,1,0,0,185,5,0,0,115, - 10,0,0,0,0,2,18,1,12,1,9,1,18,1,122,25, - 95,76,111,97,100,101,114,66,97,115,105,99,115,46,101,120, - 101,99,95,109,111,100,117,108,101,78,41,8,114,57,0,0, - 0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,0, - 114,220,0,0,0,114,2,1,0,0,114,181,0,0,0,114, - 5,1,0,0,114,4,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,33,1,0,0,172,5,0, - 0,115,8,0,0,0,12,3,6,2,12,8,12,8,114,33, + 99,116,218,4,101,120,101,99,114,63,0,0,0,41,3,114, + 181,0,0,0,114,67,0,0,0,114,196,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,3,1, + 0,0,58,5,0,0,115,12,0,0,0,0,2,12,1,15, + 1,18,1,9,1,18,1,122,26,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,67,0,0,0,115,13,0,0,0,116,0,0, + 124,0,0,124,1,0,131,2,0,83,41,1,122,95,76,111, + 97,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,41,1,114, + 182,0,0,0,41,2,114,13,1,0,0,114,164,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 6,1,0,0,67,5,0,0,115,2,0,0,0,0,7,122, + 26,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 115,13,0,0,0,116,0,0,106,1,0,124,1,0,131,1, + 0,83,41,1,122,45,82,101,116,117,114,110,32,116,104,101, + 32,99,111,100,101,32,111,98,106,101,99,116,32,102,111,114, + 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,46,41,2,114,106,0,0,0,114,23,1,0,0,41, + 2,114,13,1,0,0,114,164,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,17,1,0,0,76, + 5,0,0,115,2,0,0,0,0,4,122,23,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99, + 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, + 83,41,2,122,54,82,101,116,117,114,110,32,78,111,110,101, + 32,97,115,32,102,114,111,122,101,110,32,109,111,100,117,108, + 101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115, + 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, + 0,41,2,114,13,1,0,0,114,164,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,18,1,0, + 0,82,5,0,0,115,2,0,0,0,0,4,122,25,70,114, + 111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,116, + 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, + 0,116,0,0,106,1,0,124,1,0,131,1,0,83,41,1, + 122,46,82,101,116,117,114,110,32,84,114,117,101,32,105,102, + 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, + 41,2,114,106,0,0,0,90,17,105,115,95,102,114,111,122, + 101,110,95,112,97,99,107,97,103,101,41,2,114,13,1,0, + 0,114,164,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,223,0,0,0,88,5,0,0,115,2, + 0,0,0,0,4,122,25,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, + 41,16,114,57,0,0,0,114,56,0,0,0,114,58,0,0, + 0,114,59,0,0,0,114,19,1,0,0,114,207,0,0,0, + 114,20,1,0,0,114,15,1,0,0,114,16,1,0,0,114, + 2,1,0,0,114,3,1,0,0,114,6,1,0,0,114,170, + 0,0,0,114,17,1,0,0,114,18,1,0,0,114,223,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,21,1,0,0,20,5,0,0,115, + 30,0,0,0,12,7,6,2,18,9,3,1,21,6,3,1, + 18,8,18,4,18,9,18,9,3,1,21,5,3,1,21,5, + 3,1,114,21,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,64,0,0,0,115,121,0,0, + 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, + 90,3,0,100,2,0,90,4,0,100,3,0,90,5,0,100, + 4,0,90,6,0,101,7,0,100,5,0,100,6,0,132,0, + 0,131,1,0,90,8,0,101,7,0,100,7,0,100,8,0, + 132,0,0,131,1,0,90,9,0,101,7,0,100,9,0,100, + 9,0,100,10,0,100,11,0,132,2,0,131,1,0,90,10, + 0,101,7,0,100,9,0,100,12,0,100,13,0,132,1,0, + 131,1,0,90,11,0,100,9,0,83,41,14,218,21,87,105, + 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, + 100,101,114,122,62,77,101,116,97,32,112,97,116,104,32,102, + 105,110,100,101,114,32,102,111,114,32,109,111,100,117,108,101, + 115,32,100,101,99,108,97,114,101,100,32,105,110,32,116,104, + 101,32,87,105,110,100,111,119,115,32,114,101,103,105,115,116, + 114,121,46,122,59,83,111,102,116,119,97,114,101,92,80,121, + 116,104,111,110,92,80,121,116,104,111,110,67,111,114,101,92, + 123,115,121,115,95,118,101,114,115,105,111,110,125,92,77,111, + 100,117,108,101,115,92,123,102,117,108,108,110,97,109,101,125, + 122,65,83,111,102,116,119,97,114,101,92,80,121,116,104,111, + 110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121, + 115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108, + 101,115,92,123,102,117,108,108,110,97,109,101,125,92,68,101, + 98,117,103,70,99,2,0,0,0,0,0,0,0,2,0,0, + 0,11,0,0,0,67,0,0,0,115,67,0,0,0,121,23, + 0,116,0,0,106,1,0,116,0,0,106,2,0,124,1,0, + 131,2,0,83,87,110,37,0,4,116,3,0,107,10,0,114, + 62,0,1,1,1,116,0,0,106,1,0,116,0,0,106,4, + 0,124,1,0,131,2,0,83,89,110,1,0,88,100,0,0, + 83,41,1,78,41,5,218,7,95,119,105,110,114,101,103,90, + 7,79,112,101,110,75,101,121,90,17,72,75,69,89,95,67, + 85,82,82,69,78,84,95,85,83,69,82,114,40,0,0,0, + 90,18,72,75,69,89,95,76,79,67,65,76,95,77,65,67, + 72,73,78,69,41,2,114,13,1,0,0,218,3,107,101,121, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 14,95,111,112,101,110,95,114,101,103,105,115,116,114,121,107, + 5,0,0,115,8,0,0,0,0,2,3,1,23,1,13,1, + 122,36,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,46,95,111,112,101,110,95,114,101, + 103,105,115,116,114,121,99,2,0,0,0,0,0,0,0,6, + 0,0,0,16,0,0,0,67,0,0,0,115,142,0,0,0, + 124,0,0,106,0,0,114,21,0,124,0,0,106,1,0,125, + 2,0,110,9,0,124,0,0,106,2,0,125,2,0,124,2, + 0,106,3,0,100,1,0,124,1,0,100,2,0,116,4,0, + 106,5,0,100,0,0,100,3,0,133,2,0,25,131,0,2, + 125,3,0,121,46,0,124,0,0,106,6,0,124,3,0,131, + 1,0,143,25,0,125,4,0,116,7,0,106,8,0,124,4, + 0,100,4,0,131,2,0,125,5,0,87,100,0,0,81,88, + 87,110,22,0,4,116,9,0,107,10,0,114,137,0,1,1, + 1,100,0,0,83,89,110,1,0,88,124,5,0,83,41,5, + 78,114,164,0,0,0,90,11,115,121,115,95,118,101,114,115, + 105,111,110,114,139,0,0,0,114,30,0,0,0,41,10,218, + 11,68,69,66,85,71,95,66,85,73,76,68,218,18,82,69, + 71,73,83,84,82,89,95,75,69,89,95,68,69,66,85,71, + 218,12,82,69,71,73,83,84,82,89,95,75,69,89,114,47, + 0,0,0,114,7,0,0,0,218,7,118,101,114,115,105,111, + 110,114,28,1,0,0,114,26,1,0,0,90,10,81,117,101, + 114,121,86,97,108,117,101,114,40,0,0,0,41,6,114,13, + 1,0,0,114,164,0,0,0,90,12,114,101,103,105,115,116, + 114,121,95,107,101,121,114,27,1,0,0,90,4,104,107,101, + 121,218,8,102,105,108,101,112,97,116,104,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,16,95,115,101,97, + 114,99,104,95,114,101,103,105,115,116,114,121,114,5,0,0, + 115,22,0,0,0,0,2,9,1,12,2,9,1,15,1,22, + 1,3,1,18,1,28,1,13,1,9,1,122,38,87,105,110, + 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, + 101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,115, + 116,114,121,78,99,4,0,0,0,0,0,0,0,8,0,0, + 0,14,0,0,0,67,0,0,0,115,155,0,0,0,124,0, + 0,106,0,0,124,1,0,131,1,0,125,4,0,124,4,0, + 100,0,0,107,8,0,114,31,0,100,0,0,83,121,14,0, + 116,1,0,124,4,0,131,1,0,1,87,110,22,0,4,116, + 2,0,107,10,0,114,69,0,1,1,1,100,0,0,83,89, + 110,1,0,88,120,78,0,116,3,0,131,0,0,68,93,67, + 0,92,2,0,125,5,0,125,6,0,124,4,0,106,4,0, + 116,5,0,124,6,0,131,1,0,131,1,0,114,80,0,116, + 6,0,124,1,0,124,5,0,124,1,0,124,4,0,131,2, + 0,100,1,0,124,4,0,131,2,1,125,7,0,124,7,0, + 83,113,80,0,87,100,0,0,83,41,2,78,114,221,0,0, + 0,41,7,114,34,1,0,0,114,39,0,0,0,114,40,0, + 0,0,114,243,0,0,0,114,234,0,0,0,114,235,0,0, + 0,114,177,0,0,0,41,8,114,13,1,0,0,114,164,0, + 0,0,114,35,0,0,0,114,14,1,0,0,114,33,1,0, + 0,114,173,0,0,0,114,247,0,0,0,114,180,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 15,1,0,0,129,5,0,0,115,24,0,0,0,0,2,15, + 1,12,1,4,1,3,1,14,1,13,1,9,1,22,1,21, + 1,21,1,9,1,122,31,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110, + 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,67,0,0,0,115,45,0,0,0, + 124,0,0,106,0,0,124,1,0,124,2,0,131,2,0,125, + 3,0,124,3,0,100,1,0,107,9,0,114,37,0,124,3, + 0,106,1,0,83,100,1,0,83,100,1,0,83,41,2,122, + 108,70,105,110,100,32,109,111,100,117,108,101,32,110,97,109, + 101,100,32,105,110,32,116,104,101,32,114,101,103,105,115,116, + 114,121,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2, + 114,15,1,0,0,114,173,0,0,0,41,4,114,13,1,0, + 0,114,164,0,0,0,114,35,0,0,0,114,180,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 16,1,0,0,144,5,0,0,115,8,0,0,0,0,7,18, + 1,12,1,7,2,122,33,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,110, + 100,95,109,111,100,117,108,101,41,12,114,57,0,0,0,114, + 56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,31, + 1,0,0,114,30,1,0,0,114,29,1,0,0,114,20,1, + 0,0,114,28,1,0,0,114,34,1,0,0,114,15,1,0, + 0,114,16,1,0,0,114,4,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,25,1,0,0,95, + 5,0,0,115,20,0,0,0,12,2,6,3,6,3,6,2, + 6,2,18,7,18,15,3,1,21,14,3,1,114,25,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,64,0,0,0,115,64,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, + 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, + 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, + 0,101,7,0,90,8,0,100,8,0,83,41,9,218,13,95, + 76,111,97,100,101,114,66,97,115,105,99,115,122,83,66,97, + 115,101,32,99,108,97,115,115,32,111,102,32,99,111,109,109, + 111,110,32,99,111,100,101,32,110,101,101,100,101,100,32,98, + 121,32,98,111,116,104,32,83,111,117,114,99,101,76,111,97, + 100,101,114,32,97,110,100,10,32,32,32,32,83,111,117,114, + 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, + 46,99,2,0,0,0,0,0,0,0,5,0,0,0,3,0, + 0,0,67,0,0,0,115,88,0,0,0,116,0,0,124,0, + 0,106,1,0,124,1,0,131,1,0,131,1,0,100,1,0, + 25,125,2,0,124,2,0,106,2,0,100,2,0,100,1,0, + 131,2,0,100,3,0,25,125,3,0,124,1,0,106,3,0, + 100,2,0,131,1,0,100,4,0,25,125,4,0,124,3,0, + 100,5,0,107,2,0,111,87,0,124,4,0,100,5,0,107, + 3,0,83,41,6,122,141,67,111,110,99,114,101,116,101,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, + 102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,46, + 105,115,95,112,97,99,107,97,103,101,32,98,121,32,99,104, + 101,99,107,105,110,103,32,105,102,10,32,32,32,32,32,32, + 32,32,116,104,101,32,112,97,116,104,32,114,101,116,117,114, + 110,101,100,32,98,121,32,103,101,116,95,102,105,108,101,110, + 97,109,101,32,104,97,115,32,97,32,102,105,108,101,110,97, + 109,101,32,111,102,32,39,95,95,105,110,105,116,95,95,46, + 112,121,39,46,114,29,0,0,0,114,117,0,0,0,114,84, + 0,0,0,114,115,0,0,0,114,72,0,0,0,41,4,114, + 38,0,0,0,114,241,0,0,0,114,34,0,0,0,114,32, + 0,0,0,41,5,114,71,0,0,0,114,164,0,0,0,114, + 214,0,0,0,90,13,102,105,108,101,110,97,109,101,95,98, + 97,115,101,90,9,116,97,105,108,95,110,97,109,101,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,223,0, + 0,0,163,5,0,0,115,8,0,0,0,0,3,25,1,22, + 1,19,1,122,24,95,76,111,97,100,101,114,66,97,115,105, + 99,115,46,105,115,95,112,97,99,107,97,103,101,99,2,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,115,4,0,0,0,100,1,0,83,41,2,122,42,85, + 115,101,32,100,101,102,97,117,108,116,32,115,101,109,97,110, + 116,105,99,115,32,102,111,114,32,109,111,100,117,108,101,32, + 99,114,101,97,116,105,111,110,46,78,114,4,0,0,0,41, + 2,114,71,0,0,0,114,180,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,2,1,0,0,171, + 5,0,0,115,0,0,0,0,122,27,95,76,111,97,100,101, + 114,66,97,115,105,99,115,46,99,114,101,97,116,101,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,3,0, + 0,0,4,0,0,0,67,0,0,0,115,77,0,0,0,124, + 0,0,106,0,0,124,1,0,106,1,0,131,1,0,125,2, + 0,124,2,0,100,1,0,107,8,0,114,54,0,116,2,0, + 100,2,0,106,3,0,124,1,0,106,1,0,131,1,0,131, + 1,0,130,1,0,116,4,0,116,5,0,124,2,0,124,1, + 0,106,6,0,131,3,0,1,100,1,0,83,41,3,122,19, + 69,120,101,99,117,116,101,32,116,104,101,32,109,111,100,117, + 108,101,46,78,122,52,99,97,110,110,111,116,32,108,111,97, + 100,32,109,111,100,117,108,101,32,123,33,114,125,32,119,104, + 101,110,32,103,101,116,95,99,111,100,101,40,41,32,114,101, + 116,117,114,110,115,32,78,111,110,101,41,7,114,17,1,0, + 0,114,57,0,0,0,114,159,0,0,0,114,47,0,0,0, + 114,114,0,0,0,114,24,1,0,0,114,63,0,0,0,41, + 3,114,71,0,0,0,114,181,0,0,0,114,196,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 3,1,0,0,174,5,0,0,115,10,0,0,0,0,2,18, + 1,12,1,9,1,15,1,122,25,95,76,111,97,100,101,114, + 66,97,115,105,99,115,46,101,120,101,99,95,109,111,100,117, + 108,101,78,41,9,114,57,0,0,0,114,56,0,0,0,114, + 58,0,0,0,114,59,0,0,0,114,223,0,0,0,114,2, + 1,0,0,114,3,1,0,0,114,182,0,0,0,114,6,1, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,35,1,0,0,158,5,0,0,115, + 10,0,0,0,12,3,6,2,12,8,12,3,12,8,114,35, 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, 4,0,0,0,64,0,0,0,115,106,0,0,0,101,0,0, 90,1,0,100,0,0,90,2,0,100,1,0,100,2,0,132, @@ -2515,7 +2489,7 @@ const unsigned char _Py_M__importlib[] = { 32,78,41,1,218,7,73,79,69,114,114,111,114,41,2,114, 71,0,0,0,114,35,0,0,0,114,4,0,0,0,114,4, 0,0,0,114,5,0,0,0,218,10,112,97,116,104,95,109, - 116,105,109,101,198,5,0,0,115,2,0,0,0,0,6,122, + 116,105,109,101,187,5,0,0,115,2,0,0,0,0,6,122, 23,83,111,117,114,99,101,76,111,97,100,101,114,46,112,97, 116,104,95,109,116,105,109,101,99,2,0,0,0,0,0,0, 0,2,0,0,0,3,0,0,0,67,0,0,0,115,20,0, @@ -2547,10 +2521,10 @@ const unsigned char _Py_M__importlib[] = { 97,105,115,101,115,32,73,79,69,114,114,111,114,32,119,104, 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, - 32,32,32,32,32,32,32,114,184,0,0,0,41,1,114,36, + 32,32,32,32,32,32,32,114,185,0,0,0,41,1,114,38, 1,0,0,41,2,114,71,0,0,0,114,35,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,10, - 112,97,116,104,95,115,116,97,116,115,206,5,0,0,115,2, + 112,97,116,104,95,115,116,97,116,115,195,5,0,0,115,2, 0,0,0,0,11,122,23,83,111,117,114,99,101,76,111,97, 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, @@ -2571,10 +2545,10 @@ const unsigned char _Py_M__importlib[] = { 108,121,32,116,114,97,110,115,102,101,114,32,112,101,114,109, 105,115,115,105,111,110,115,10,32,32,32,32,32,32,32,32, 41,1,218,8,115,101,116,95,100,97,116,97,41,4,114,71, - 0,0,0,114,142,0,0,0,90,10,99,97,99,104,101,95, + 0,0,0,114,148,0,0,0,90,10,99,97,99,104,101,95, 112,97,116,104,114,53,0,0,0,114,4,0,0,0,114,4, 0,0,0,114,5,0,0,0,218,15,95,99,97,99,104,101, - 95,98,121,116,101,99,111,100,101,219,5,0,0,115,2,0, + 95,98,121,116,101,99,111,100,101,208,5,0,0,115,2,0, 0,0,0,8,122,28,83,111,117,114,99,101,76,111,97,100, 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, 100,101,99,3,0,0,0,0,0,0,0,3,0,0,0,1, @@ -2591,7 +2565,7 @@ const unsigned char _Py_M__importlib[] = { 46,10,32,32,32,32,32,32,32,32,78,114,4,0,0,0, 41,3,114,71,0,0,0,114,35,0,0,0,114,53,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,38,1,0,0,229,5,0,0,115,0,0,0,0,122,21, + 114,40,1,0,0,218,5,0,0,115,0,0,0,0,122,21, 83,111,117,114,99,101,76,111,97,100,101,114,46,115,101,116, 95,100,97,116,97,99,2,0,0,0,0,0,0,0,5,0, 0,0,16,0,0,0,67,0,0,0,115,105,0,0,0,124, @@ -2608,11 +2582,11 @@ const unsigned char _Py_M__importlib[] = { 122,39,115,111,117,114,99,101,32,110,111,116,32,97,118,97, 105,108,97,98,108,101,32,116,104,114,111,117,103,104,32,103, 101,116,95,100,97,116,97,40,41,114,67,0,0,0,78,41, - 5,114,239,0,0,0,218,8,103,101,116,95,100,97,116,97, - 114,40,0,0,0,114,154,0,0,0,114,204,0,0,0,41, - 5,114,71,0,0,0,114,159,0,0,0,114,35,0,0,0, - 114,202,0,0,0,218,3,101,120,99,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,17,1,0,0,236,5, + 5,114,241,0,0,0,218,8,103,101,116,95,100,97,116,97, + 114,40,0,0,0,114,159,0,0,0,114,205,0,0,0,41, + 5,114,71,0,0,0,114,164,0,0,0,114,35,0,0,0, + 114,203,0,0,0,218,3,101,120,99,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,18,1,0,0,225,5, 0,0,115,14,0,0,0,0,2,15,1,3,1,19,1,18, 1,9,1,31,1,122,23,83,111,117,114,99,101,76,111,97, 100,101,114,46,103,101,116,95,115,111,117,114,99,101,218,9, @@ -2628,17 +2602,17 @@ const unsigned char _Py_M__importlib[] = { 109,101,110,116,32,99,97,110,32,98,101,32,97,110,121,32, 111,98,106,101,99,116,32,116,121,112,101,32,116,104,97,116, 32,99,111,109,112,105,108,101,40,41,32,115,117,112,112,111, - 114,116,115,46,10,32,32,32,32,32,32,32,32,114,176,0, + 114,116,115,46,10,32,32,32,32,32,32,32,32,114,24,1, 0,0,218,12,100,111,110,116,95,105,110,104,101,114,105,116, - 84,114,118,0,0,0,41,2,114,114,0,0,0,218,7,99, + 84,114,126,0,0,0,41,2,114,114,0,0,0,218,7,99, 111,109,112,105,108,101,41,4,114,71,0,0,0,114,53,0, - 0,0,114,35,0,0,0,114,42,1,0,0,114,4,0,0, + 0,0,114,35,0,0,0,114,44,1,0,0,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,218,14,115,111,117, - 114,99,101,95,116,111,95,99,111,100,101,246,5,0,0,115, + 114,99,101,95,116,111,95,99,111,100,101,235,5,0,0,115, 4,0,0,0,0,5,18,1,122,27,83,111,117,114,99,101, 76,111,97,100,101,114,46,115,111,117,114,99,101,95,116,111, 95,99,111,100,101,99,2,0,0,0,0,0,0,0,10,0, - 0,0,43,0,0,0,67,0,0,0,115,177,1,0,0,124, + 0,0,43,0,0,0,67,0,0,0,115,174,1,0,0,124, 0,0,106,0,0,124,1,0,131,1,0,125,2,0,100,1, 0,125,3,0,121,16,0,116,1,0,124,2,0,131,1,0, 125,4,0,87,110,24,0,4,116,2,0,107,10,0,114,63, @@ -2658,714 +2632,726 @@ const unsigned char _Py_M__importlib[] = { 0,124,2,0,131,1,3,83,124,0,0,106,6,0,124,2, 0,131,1,0,125,8,0,124,0,0,106,13,0,124,8,0, 124,2,0,131,2,0,125,9,0,116,11,0,100,9,0,124, - 2,0,131,2,0,1,116,14,0,106,15,0,12,114,173,1, - 124,4,0,100,1,0,107,9,0,114,173,1,124,3,0,100, - 1,0,107,9,0,114,173,1,116,16,0,124,9,0,124,3, + 2,0,131,2,0,1,116,14,0,106,15,0,12,114,170,1, + 124,4,0,100,1,0,107,9,0,114,170,1,124,3,0,100, + 1,0,107,9,0,114,170,1,116,16,0,124,9,0,124,3, 0,116,17,0,124,8,0,131,1,0,131,3,0,125,6,0, 121,36,0,124,0,0,106,18,0,124,2,0,124,4,0,124, 6,0,131,3,0,1,116,11,0,100,10,0,124,4,0,131, - 2,0,1,87,113,173,1,4,116,2,0,107,10,0,114,169, - 1,1,1,1,89,113,173,1,88,110,0,0,124,9,0,83, - 41,11,122,190,67,111,110,99,114,101,116,101,32,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, - 110,115,112,101,99,116,76,111,97,100,101,114,46,103,101,116, - 95,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, - 82,101,97,100,105,110,103,32,111,102,32,98,121,116,101,99, - 111,100,101,32,114,101,113,117,105,114,101,115,32,112,97,116, - 104,95,115,116,97,116,115,32,116,111,32,98,101,32,105,109, - 112,108,101,109,101,110,116,101,100,46,32,84,111,32,119,114, - 105,116,101,10,32,32,32,32,32,32,32,32,98,121,116,101, - 99,111,100,101,44,32,115,101,116,95,100,97,116,97,32,109, - 117,115,116,32,97,108,115,111,32,98,101,32,105,109,112,108, - 101,109,101,110,116,101,100,46,10,10,32,32,32,32,32,32, - 32,32,78,114,184,0,0,0,114,188,0,0,0,114,67,0, - 0,0,114,35,0,0,0,122,13,123,125,32,109,97,116,99, - 104,101,115,32,123,125,114,141,0,0,0,114,142,0,0,0, - 122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,114, - 111,109,32,123,125,122,10,119,114,111,116,101,32,123,33,114, - 125,41,19,114,239,0,0,0,114,132,0,0,0,114,123,0, - 0,0,114,37,1,0,0,114,35,1,0,0,114,14,0,0, - 0,114,40,1,0,0,114,40,0,0,0,114,191,0,0,0, - 114,154,0,0,0,114,187,0,0,0,114,153,0,0,0,114, - 196,0,0,0,114,45,1,0,0,114,7,0,0,0,218,19, - 100,111,110,116,95,119,114,105,116,101,95,98,121,116,101,99, - 111,100,101,114,199,0,0,0,114,31,0,0,0,114,39,1, - 0,0,41,10,114,71,0,0,0,114,159,0,0,0,114,142, - 0,0,0,114,189,0,0,0,114,141,0,0,0,218,2,115, - 116,114,53,0,0,0,218,10,98,121,116,101,115,95,100,97, - 116,97,114,202,0,0,0,90,11,99,111,100,101,95,111,98, - 106,101,99,116,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,16,1,0,0,254,5,0,0,115,78,0,0, - 0,0,7,15,1,6,1,3,1,16,1,13,1,11,2,3, - 1,19,1,13,1,5,2,16,1,3,1,19,1,13,1,5, - 2,3,1,9,1,12,1,13,1,19,1,5,2,9,1,7, - 1,15,1,6,1,7,1,15,1,18,1,13,1,22,1,12, - 1,9,1,15,1,3,1,19,1,17,1,13,1,8,1,122, - 21,83,111,117,114,99,101,76,111,97,100,101,114,46,103,101, - 116,95,99,111,100,101,78,114,139,0,0,0,41,10,114,57, - 0,0,0,114,56,0,0,0,114,58,0,0,0,114,36,1, - 0,0,114,37,1,0,0,114,39,1,0,0,114,38,1,0, - 0,114,17,1,0,0,114,45,1,0,0,114,16,1,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,34,1,0,0,196,5,0,0,115,14,0, - 0,0,12,2,12,8,12,13,12,10,12,7,12,10,18,8, - 114,34,1,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,0,0,0,0,115,112,0,0,0,101, - 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, - 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, - 100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,132, - 0,0,90,6,0,101,7,0,135,0,0,102,1,0,100,8, - 0,100,9,0,134,0,0,131,1,0,90,8,0,101,7,0, - 100,10,0,100,11,0,132,0,0,131,1,0,90,9,0,100, - 12,0,100,13,0,132,0,0,90,10,0,135,0,0,83,41, - 14,218,10,70,105,108,101,76,111,97,100,101,114,122,103,66, - 97,115,101,32,102,105,108,101,32,108,111,97,100,101,114,32, - 99,108,97,115,115,32,119,104,105,99,104,32,105,109,112,108, - 101,109,101,110,116,115,32,116,104,101,32,108,111,97,100,101, - 114,32,112,114,111,116,111,99,111,108,32,109,101,116,104,111, - 100,115,32,116,104,97,116,10,32,32,32,32,114,101,113,117, - 105,114,101,32,102,105,108,101,32,115,121,115,116,101,109,32, - 117,115,97,103,101,46,99,3,0,0,0,0,0,0,0,3, - 0,0,0,2,0,0,0,67,0,0,0,115,22,0,0,0, - 124,1,0,124,0,0,95,0,0,124,2,0,124,0,0,95, - 1,0,100,1,0,83,41,2,122,75,67,97,99,104,101,32, - 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,32, - 97,110,100,32,116,104,101,32,112,97,116,104,32,116,111,32, - 116,104,101,32,102,105,108,101,32,102,111,117,110,100,32,98, - 121,32,116,104,101,10,32,32,32,32,32,32,32,32,102,105, - 110,100,101,114,46,78,41,2,114,67,0,0,0,114,35,0, - 0,0,41,3,114,71,0,0,0,114,159,0,0,0,114,35, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,72,0,0,0,55,6,0,0,115,4,0,0,0, - 0,3,9,1,122,19,70,105,108,101,76,111,97,100,101,114, - 46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,0, - 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,34, - 0,0,0,124,0,0,106,0,0,124,1,0,106,0,0,107, - 2,0,111,33,0,124,0,0,106,1,0,124,1,0,106,1, - 0,107,2,0,83,41,1,78,41,2,114,225,0,0,0,114, - 63,0,0,0,41,2,114,71,0,0,0,114,228,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 230,0,0,0,61,6,0,0,115,4,0,0,0,0,1,18, - 1,122,17,70,105,108,101,76,111,97,100,101,114,46,95,95, - 101,113,95,95,99,1,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,115,26,0,0,0,116,0, - 0,124,0,0,106,1,0,131,1,0,116,0,0,124,0,0, - 106,2,0,131,1,0,65,83,41,1,78,41,3,218,4,104, - 97,115,104,114,67,0,0,0,114,35,0,0,0,41,1,114, - 71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,8,95,95,104,97,115,104,95,95,65,6,0, - 0,115,2,0,0,0,0,1,122,19,70,105,108,101,76,111, - 97,100,101,114,46,95,95,104,97,115,104,95,95,99,2,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,3,0, - 0,0,115,22,0,0,0,116,0,0,116,1,0,124,0,0, - 131,2,0,106,2,0,124,1,0,131,1,0,83,41,1,122, - 100,76,111,97,100,32,97,32,109,111,100,117,108,101,32,102, - 114,111,109,32,97,32,102,105,108,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,101, - 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, - 32,32,32,32,32,41,3,218,5,115,117,112,101,114,114,49, - 1,0,0,114,5,1,0,0,41,2,114,71,0,0,0,114, - 159,0,0,0,41,1,114,225,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,5,1,0,0,68,6,0,0,115,2, - 0,0,0,0,10,122,22,70,105,108,101,76,111,97,100,101, - 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,115,7,0,0,0,124,0,0,106,0,0,83,41,1, - 122,58,82,101,116,117,114,110,32,116,104,101,32,112,97,116, - 104,32,116,111,32,116,104,101,32,115,111,117,114,99,101,32, - 102,105,108,101,32,97,115,32,102,111,117,110,100,32,98,121, - 32,116,104,101,32,102,105,110,100,101,114,46,41,1,114,35, - 0,0,0,41,2,114,71,0,0,0,114,159,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,239, - 0,0,0,80,6,0,0,115,2,0,0,0,0,3,122,23, - 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,102, - 105,108,101,110,97,109,101,99,2,0,0,0,0,0,0,0, - 3,0,0,0,8,0,0,0,67,0,0,0,115,41,0,0, - 0,116,0,0,106,1,0,124,1,0,100,1,0,131,2,0, - 143,17,0,125,2,0,124,2,0,106,2,0,131,0,0,83, - 87,100,2,0,81,88,100,2,0,83,41,3,122,39,82,101, - 116,117,114,110,32,116,104,101,32,100,97,116,97,32,102,114, - 111,109,32,112,97,116,104,32,97,115,32,114,97,119,32,98, - 121,116,101,115,46,218,1,114,78,41,3,114,49,0,0,0, - 114,50,0,0,0,90,4,114,101,97,100,41,3,114,71,0, - 0,0,114,35,0,0,0,114,54,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,40,1,0,0, - 85,6,0,0,115,4,0,0,0,0,2,21,1,122,19,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,100,97, - 116,97,41,11,114,57,0,0,0,114,56,0,0,0,114,58, - 0,0,0,114,59,0,0,0,114,72,0,0,0,114,230,0, - 0,0,114,51,1,0,0,114,157,0,0,0,114,5,1,0, - 0,114,239,0,0,0,114,40,1,0,0,114,4,0,0,0, - 114,4,0,0,0,41,1,114,225,0,0,0,114,5,0,0, - 0,114,49,1,0,0,50,6,0,0,115,14,0,0,0,12, - 3,6,2,12,6,12,4,12,3,24,12,18,5,114,49,1, + 2,0,1,87,110,18,0,4,116,2,0,107,10,0,114,169, + 1,1,1,1,89,110,1,0,88,124,9,0,83,41,11,122, + 190,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, + 101,99,116,76,111,97,100,101,114,46,103,101,116,95,99,111, + 100,101,46,10,10,32,32,32,32,32,32,32,32,82,101,97, + 100,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101, + 32,114,101,113,117,105,114,101,115,32,112,97,116,104,95,115, + 116,97,116,115,32,116,111,32,98,101,32,105,109,112,108,101, + 109,101,110,116,101,100,46,32,84,111,32,119,114,105,116,101, + 10,32,32,32,32,32,32,32,32,98,121,116,101,99,111,100, + 101,44,32,115,101,116,95,100,97,116,97,32,109,117,115,116, + 32,97,108,115,111,32,98,101,32,105,109,112,108,101,109,101, + 110,116,101,100,46,10,10,32,32,32,32,32,32,32,32,78, + 114,185,0,0,0,114,189,0,0,0,114,67,0,0,0,114, + 35,0,0,0,122,13,123,125,32,109,97,116,99,104,101,115, + 32,123,125,114,147,0,0,0,114,148,0,0,0,122,19,99, + 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, + 123,125,122,10,119,114,111,116,101,32,123,33,114,125,41,19, + 114,241,0,0,0,114,138,0,0,0,114,124,0,0,0,114, + 39,1,0,0,114,37,1,0,0,114,14,0,0,0,114,42, + 1,0,0,114,40,0,0,0,114,192,0,0,0,114,159,0, + 0,0,114,188,0,0,0,114,158,0,0,0,114,197,0,0, + 0,114,47,1,0,0,114,7,0,0,0,218,19,100,111,110, + 116,95,119,114,105,116,101,95,98,121,116,101,99,111,100,101, + 114,200,0,0,0,114,31,0,0,0,114,41,1,0,0,41, + 10,114,71,0,0,0,114,164,0,0,0,114,148,0,0,0, + 114,190,0,0,0,114,147,0,0,0,218,2,115,116,114,53, + 0,0,0,218,10,98,121,116,101,115,95,100,97,116,97,114, + 203,0,0,0,90,11,99,111,100,101,95,111,98,106,101,99, + 116,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,17,1,0,0,243,5,0,0,115,78,0,0,0,0,7, + 15,1,6,1,3,1,16,1,13,1,11,2,3,1,19,1, + 13,1,5,2,16,1,3,1,19,1,13,1,5,2,3,1, + 9,1,12,1,13,1,19,1,5,2,9,1,7,1,15,1, + 6,1,7,1,15,1,18,1,13,1,22,1,12,1,9,1, + 15,1,3,1,19,1,17,1,13,1,5,1,122,21,83,111, + 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,99, + 111,100,101,78,114,145,0,0,0,41,10,114,57,0,0,0, + 114,56,0,0,0,114,58,0,0,0,114,38,1,0,0,114, + 39,1,0,0,114,41,1,0,0,114,40,1,0,0,114,18, + 1,0,0,114,47,1,0,0,114,17,1,0,0,114,4,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,36,1,0,0,185,5,0,0,115,14,0,0,0,12, + 2,12,8,12,13,12,10,12,7,12,10,18,8,114,36,1, 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,64,0,0,0,115,64,0,0,0,101,0,0,90, + 0,0,0,0,0,0,0,115,112,0,0,0,101,0,0,90, 1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,2, 0,100,3,0,132,0,0,90,4,0,100,4,0,100,5,0, - 132,0,0,90,5,0,100,6,0,100,7,0,100,8,0,100, - 9,0,132,0,1,90,6,0,100,10,0,83,41,11,114,9, - 1,0,0,122,62,67,111,110,99,114,101,116,101,32,105,109, - 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, - 83,111,117,114,99,101,76,111,97,100,101,114,32,117,115,105, - 110,103,32,116,104,101,32,102,105,108,101,32,115,121,115,116, - 101,109,46,99,2,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,36,0,0,0,116,0,0, - 124,1,0,131,1,0,125,2,0,105,2,0,124,2,0,106, - 1,0,100,1,0,54,124,2,0,106,2,0,100,2,0,54, - 83,41,3,122,33,82,101,116,117,114,110,32,116,104,101,32, - 109,101,116,97,100,97,116,97,32,102,111,114,32,116,104,101, - 32,112,97,116,104,46,114,184,0,0,0,114,185,0,0,0, - 41,3,114,39,0,0,0,218,8,115,116,95,109,116,105,109, - 101,90,7,115,116,95,115,105,122,101,41,3,114,71,0,0, - 0,114,35,0,0,0,114,47,1,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,37,1,0,0,95, - 6,0,0,115,4,0,0,0,0,2,12,1,122,27,83,111, - 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,112, - 97,116,104,95,115,116,97,116,115,99,4,0,0,0,0,0, - 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,34, - 0,0,0,116,0,0,124,1,0,131,1,0,125,4,0,124, - 0,0,106,1,0,124,2,0,124,3,0,100,1,0,124,4, - 0,131,2,1,83,41,2,78,218,5,95,109,111,100,101,41, - 2,114,145,0,0,0,114,38,1,0,0,41,5,114,71,0, - 0,0,114,142,0,0,0,114,141,0,0,0,114,53,0,0, - 0,114,42,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,39,1,0,0,100,6,0,0,115,4, - 0,0,0,0,2,12,1,122,32,83,111,117,114,99,101,70, - 105,108,101,76,111,97,100,101,114,46,95,99,97,99,104,101, - 95,98,121,116,101,99,111,100,101,114,55,1,0,0,105,182, - 1,0,0,99,3,0,0,0,1,0,0,0,9,0,0,0, - 17,0,0,0,67,0,0,0,115,53,1,0,0,116,0,0, - 124,1,0,131,1,0,92,2,0,125,4,0,125,5,0,103, - 0,0,125,6,0,120,54,0,124,4,0,114,80,0,116,1, - 0,124,4,0,131,1,0,12,114,80,0,116,0,0,124,4, - 0,131,1,0,92,2,0,125,4,0,125,7,0,124,6,0, - 106,2,0,124,7,0,131,1,0,1,113,27,0,87,120,132, - 0,116,3,0,124,6,0,131,1,0,68,93,118,0,125,7, - 0,116,4,0,124,4,0,124,7,0,131,2,0,125,4,0, - 121,17,0,116,5,0,106,6,0,124,4,0,131,1,0,1, - 87,113,94,0,4,116,7,0,107,10,0,114,155,0,1,1, - 1,119,94,0,89,113,94,0,4,116,8,0,107,10,0,114, - 211,0,1,125,8,0,1,122,25,0,116,9,0,100,1,0, - 124,4,0,124,8,0,131,3,0,1,100,2,0,83,87,89, - 100,2,0,100,2,0,125,8,0,126,8,0,88,113,94,0, - 88,113,94,0,87,121,33,0,116,10,0,124,1,0,124,2, - 0,124,3,0,131,3,0,1,116,9,0,100,3,0,124,1, - 0,131,2,0,1,87,110,53,0,4,116,8,0,107,10,0, - 114,48,1,1,125,8,0,1,122,21,0,116,9,0,100,1, - 0,124,1,0,124,8,0,131,3,0,1,87,89,100,2,0, - 100,2,0,125,8,0,126,8,0,88,110,1,0,88,100,2, - 0,83,41,4,122,27,87,114,105,116,101,32,98,121,116,101, - 115,32,100,97,116,97,32,116,111,32,97,32,102,105,108,101, - 46,122,27,99,111,117,108,100,32,110,111,116,32,99,114,101, - 97,116,101,32,123,33,114,125,58,32,123,33,114,125,78,122, - 12,99,114,101,97,116,101,100,32,123,33,114,125,41,11,114, - 38,0,0,0,114,46,0,0,0,114,224,0,0,0,114,33, - 0,0,0,114,28,0,0,0,114,3,0,0,0,90,5,109, - 107,100,105,114,218,15,70,105,108,101,69,120,105,115,116,115, - 69,114,114,111,114,114,40,0,0,0,114,153,0,0,0,114, - 55,0,0,0,41,9,114,71,0,0,0,114,35,0,0,0, - 114,53,0,0,0,114,55,1,0,0,114,234,0,0,0,114, - 131,0,0,0,114,27,0,0,0,114,23,0,0,0,114,41, - 1,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,38,1,0,0,105,6,0,0,115,38,0,0,0, - 0,2,18,1,6,2,22,1,18,1,17,2,19,1,15,1, - 3,1,17,1,13,2,7,1,18,3,16,1,27,1,3,1, - 16,1,17,1,18,2,122,25,83,111,117,114,99,101,70,105, - 108,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, - 97,78,41,7,114,57,0,0,0,114,56,0,0,0,114,58, - 0,0,0,114,59,0,0,0,114,37,1,0,0,114,39,1, - 0,0,114,38,1,0,0,114,4,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,9,1,0,0, - 91,6,0,0,115,8,0,0,0,12,2,6,2,12,5,12, - 5,114,9,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,64,0,0,0,115,46,0,0,0, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, - 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, - 0,100,5,0,132,0,0,90,5,0,100,6,0,83,41,7, - 114,8,1,0,0,122,45,76,111,97,100,101,114,32,119,104, - 105,99,104,32,104,97,110,100,108,101,115,32,115,111,117,114, - 99,101,108,101,115,115,32,102,105,108,101,32,105,109,112,111, - 114,116,115,46,99,2,0,0,0,0,0,0,0,5,0,0, - 0,6,0,0,0,67,0,0,0,115,76,0,0,0,124,0, - 0,106,0,0,124,1,0,131,1,0,125,2,0,124,0,0, - 106,1,0,124,2,0,131,1,0,125,3,0,116,2,0,124, - 3,0,100,1,0,124,1,0,100,2,0,124,2,0,131,1, - 2,125,4,0,116,3,0,124,4,0,100,1,0,124,1,0, - 100,3,0,124,2,0,131,1,2,83,41,4,78,114,67,0, - 0,0,114,35,0,0,0,114,141,0,0,0,41,4,114,239, - 0,0,0,114,40,1,0,0,114,191,0,0,0,114,196,0, - 0,0,41,5,114,71,0,0,0,114,159,0,0,0,114,35, - 0,0,0,114,53,0,0,0,114,48,1,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, - 0,138,6,0,0,115,8,0,0,0,0,1,15,1,15,1, - 24,1,122,29,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41, - 2,122,39,82,101,116,117,114,110,32,78,111,110,101,32,97, - 115,32,116,104,101,114,101,32,105,115,32,110,111,32,115,111, - 117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,0, - 41,2,114,71,0,0,0,114,159,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,17,1,0,0, - 144,6,0,0,115,2,0,0,0,0,2,122,31,83,111,117, - 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,78,41,6,114, - 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,59, - 0,0,0,114,16,1,0,0,114,17,1,0,0,114,4,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,8,1,0,0,134,6,0,0,115,6,0,0,0,12, - 2,6,2,12,6,114,8,1,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, - 130,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, - 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, - 0,100,7,0,132,0,0,90,6,0,101,7,0,100,8,0, - 100,9,0,132,0,0,131,1,0,90,8,0,100,10,0,100, - 11,0,132,0,0,90,9,0,100,12,0,100,13,0,132,0, - 0,90,10,0,100,14,0,100,15,0,132,0,0,90,11,0, - 101,7,0,100,16,0,100,17,0,132,0,0,131,1,0,90, - 12,0,100,18,0,83,41,19,218,19,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,122,93,76, - 111,97,100,101,114,32,102,111,114,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,115,46,10,10,32,32, - 32,32,84,104,101,32,99,111,110,115,116,114,117,99,116,111, - 114,32,105,115,32,100,101,115,105,103,110,101,100,32,116,111, - 32,119,111,114,107,32,119,105,116,104,32,70,105,108,101,70, - 105,110,100,101,114,46,10,10,32,32,32,32,99,3,0,0, - 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, - 0,115,22,0,0,0,124,1,0,124,0,0,95,0,0,124, - 2,0,124,0,0,95,1,0,100,0,0,83,41,1,78,41, - 2,114,67,0,0,0,114,35,0,0,0,41,3,114,71,0, - 0,0,114,67,0,0,0,114,35,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,72,0,0,0, - 161,6,0,0,115,4,0,0,0,0,1,9,1,122,28,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,95,95,105,110,105,116,95,95,99,2,0,0,0, - 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, - 115,34,0,0,0,124,0,0,106,0,0,124,1,0,106,0, - 0,107,2,0,111,33,0,124,0,0,106,1,0,124,1,0, - 106,1,0,107,2,0,83,41,1,78,41,2,114,225,0,0, - 0,114,63,0,0,0,41,2,114,71,0,0,0,114,228,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,230,0,0,0,165,6,0,0,115,4,0,0,0,0, - 1,18,1,122,26,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,95,95,101,113,95,95,99, - 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,106, - 1,0,131,1,0,116,0,0,124,0,0,106,2,0,131,1, - 0,65,83,41,1,78,41,3,114,50,1,0,0,114,67,0, - 0,0,114,35,0,0,0,41,1,114,71,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,51,1, - 0,0,169,6,0,0,115,2,0,0,0,0,1,122,28,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,95,95,104,97,115,104,95,95,99,2,0,0,0, - 0,0,0,0,4,0,0,0,11,0,0,0,67,0,0,0, - 115,183,0,0,0,116,0,0,124,1,0,131,1,0,143,29, - 0,1,116,1,0,116,2,0,106,3,0,124,1,0,124,0, - 0,106,4,0,131,3,0,125,2,0,87,100,1,0,81,88, - 116,5,0,100,2,0,124,0,0,106,4,0,131,2,0,1, - 124,0,0,106,6,0,124,1,0,131,1,0,125,3,0,124, - 3,0,114,124,0,116,7,0,124,2,0,100,3,0,131,2, - 0,12,114,124,0,116,8,0,124,0,0,106,4,0,131,1, - 0,100,4,0,25,103,1,0,124,2,0,95,9,0,110,0, - 0,124,0,0,124,2,0,95,10,0,124,2,0,106,11,0, - 124,2,0,95,12,0,124,3,0,115,179,0,124,2,0,106, - 12,0,106,13,0,100,5,0,131,1,0,100,4,0,25,124, - 2,0,95,12,0,110,0,0,124,2,0,83,41,6,122,25, - 76,111,97,100,32,97,110,32,101,120,116,101,110,115,105,111, - 110,32,109,111,100,117,108,101,46,78,122,33,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,32,108,111,97, - 100,101,100,32,102,114,111,109,32,123,33,114,125,114,247,0, - 0,0,114,84,0,0,0,114,116,0,0,0,41,14,114,69, - 0,0,0,114,114,0,0,0,114,106,0,0,0,90,12,108, - 111,97,100,95,100,121,110,97,109,105,99,114,35,0,0,0, - 114,153,0,0,0,114,220,0,0,0,114,60,0,0,0,114, - 38,0,0,0,114,247,0,0,0,114,205,0,0,0,114,57, - 0,0,0,114,251,0,0,0,114,32,0,0,0,41,4,114, - 71,0,0,0,114,159,0,0,0,114,180,0,0,0,114,220, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,5,1,0,0,172,6,0,0,115,24,0,0,0, - 0,5,13,1,9,1,21,1,16,1,15,1,22,1,28,1, - 9,1,12,1,6,1,28,1,122,31,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,108,111, - 97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,3,0,0,0,115,48, - 0,0,0,116,0,0,124,0,0,106,1,0,131,1,0,100, - 1,0,25,137,0,0,116,2,0,135,0,0,102,1,0,100, - 2,0,100,3,0,134,0,0,116,3,0,68,131,1,0,131, - 1,0,83,41,4,122,49,82,101,116,117,114,110,32,84,114, - 117,101,32,105,102,32,116,104,101,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,32,105,115,32,97,32, - 112,97,99,107,97,103,101,46,114,29,0,0,0,99,1,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0, - 0,0,115,31,0,0,0,124,0,0,93,21,0,125,1,0, - 136,0,0,100,0,0,124,1,0,23,107,2,0,86,1,113, - 3,0,100,1,0,83,41,2,114,72,0,0,0,78,114,4, - 0,0,0,41,2,114,22,0,0,0,218,6,115,117,102,102, - 105,120,41,1,218,9,102,105,108,101,95,110,97,109,101,114, - 4,0,0,0,114,5,0,0,0,114,77,0,0,0,193,6, - 0,0,115,2,0,0,0,6,1,122,49,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105, - 115,95,112,97,99,107,97,103,101,46,60,108,111,99,97,108, - 115,62,46,60,103,101,110,101,120,112,114,62,41,4,114,38, - 0,0,0,114,35,0,0,0,114,78,0,0,0,218,18,69, - 88,84,69,78,83,73,79,78,95,83,85,70,70,73,88,69, - 83,41,2,114,71,0,0,0,114,159,0,0,0,114,4,0, - 0,0,41,1,114,59,1,0,0,114,5,0,0,0,114,220, - 0,0,0,190,6,0,0,115,6,0,0,0,0,2,19,1, - 18,1,122,30,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, - 41,2,122,63,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,97,110,32,101,120,116,101,110,115,105,111,110,32, - 109,111,100,117,108,101,32,99,97,110,110,111,116,32,99,114, - 101,97,116,101,32,97,32,99,111,100,101,32,111,98,106,101, - 99,116,46,78,114,4,0,0,0,41,2,114,71,0,0,0, - 114,159,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,16,1,0,0,196,6,0,0,115,2,0, - 0,0,0,2,122,28,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,99,111, - 100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, - 41,2,122,53,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,115,32,104,97,118,101,32,110,111,32,115,111,117, - 114,99,101,32,99,111,100,101,46,78,114,4,0,0,0,41, - 2,114,71,0,0,0,114,159,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,17,1,0,0,200, - 6,0,0,115,2,0,0,0,0,2,122,30,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, + 132,0,0,90,5,0,100,6,0,100,7,0,132,0,0,90, + 6,0,101,7,0,135,0,0,102,1,0,100,8,0,100,9, + 0,134,0,0,131,1,0,90,8,0,101,7,0,100,10,0, + 100,11,0,132,0,0,131,1,0,90,9,0,100,12,0,100, + 13,0,132,0,0,90,10,0,135,0,0,83,41,14,218,10, + 70,105,108,101,76,111,97,100,101,114,122,103,66,97,115,101, + 32,102,105,108,101,32,108,111,97,100,101,114,32,99,108,97, + 115,115,32,119,104,105,99,104,32,105,109,112,108,101,109,101, + 110,116,115,32,116,104,101,32,108,111,97,100,101,114,32,112, + 114,111,116,111,99,111,108,32,109,101,116,104,111,100,115,32, + 116,104,97,116,10,32,32,32,32,114,101,113,117,105,114,101, + 32,102,105,108,101,32,115,121,115,116,101,109,32,117,115,97, + 103,101,46,99,3,0,0,0,0,0,0,0,3,0,0,0, + 2,0,0,0,67,0,0,0,115,22,0,0,0,124,1,0, + 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,100, + 1,0,83,41,2,122,75,67,97,99,104,101,32,116,104,101, + 32,109,111,100,117,108,101,32,110,97,109,101,32,97,110,100, + 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, + 32,102,105,108,101,32,102,111,117,110,100,32,98,121,32,116, + 104,101,10,32,32,32,32,32,32,32,32,102,105,110,100,101, + 114,46,78,41,2,114,67,0,0,0,114,35,0,0,0,41, + 3,114,71,0,0,0,114,164,0,0,0,114,35,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 72,0,0,0,44,6,0,0,115,4,0,0,0,0,3,9, + 1,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, + 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,2, + 0,0,0,2,0,0,0,67,0,0,0,115,34,0,0,0, + 124,0,0,106,0,0,124,1,0,106,0,0,107,2,0,111, + 33,0,124,0,0,106,1,0,124,1,0,106,1,0,107,2, + 0,83,41,1,78,41,2,114,228,0,0,0,114,63,0,0, + 0,41,2,114,71,0,0,0,114,231,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,233,0,0, + 0,50,6,0,0,115,4,0,0,0,0,1,18,1,122,17, + 70,105,108,101,76,111,97,100,101,114,46,95,95,101,113,95, + 95,99,1,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,67,0,0,0,115,26,0,0,0,116,0,0,124,0, + 0,106,1,0,131,1,0,116,0,0,124,0,0,106,2,0, + 131,1,0,65,83,41,1,78,41,3,218,4,104,97,115,104, + 114,67,0,0,0,114,35,0,0,0,41,1,114,71,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,8,95,95,104,97,115,104,95,95,54,6,0,0,115,2, + 0,0,0,0,1,122,19,70,105,108,101,76,111,97,100,101, + 114,46,95,95,104,97,115,104,95,95,99,2,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115, + 22,0,0,0,116,0,0,116,1,0,124,0,0,131,2,0, + 106,2,0,124,1,0,131,1,0,83,41,1,122,100,76,111, + 97,100,32,97,32,109,111,100,117,108,101,32,102,114,111,109, + 32,97,32,102,105,108,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,41,3,218,5,115,117,112,101,114,114,51,1,0,0, + 114,6,1,0,0,41,2,114,71,0,0,0,114,164,0,0, + 0,41,1,114,228,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,6,1,0,0,57,6,0,0,115,2,0,0,0, + 0,10,122,22,70,105,108,101,76,111,97,100,101,114,46,108, + 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, 7,0,0,0,124,0,0,106,0,0,83,41,1,122,58,82, 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, 111,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, 101,32,97,115,32,102,111,117,110,100,32,98,121,32,116,104, 101,32,102,105,110,100,101,114,46,41,1,114,35,0,0,0, - 41,2,114,71,0,0,0,114,159,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,239,0,0,0, - 204,6,0,0,115,2,0,0,0,0,3,122,32,69,120,116, + 41,2,114,71,0,0,0,114,164,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,241,0,0,0, + 69,6,0,0,115,2,0,0,0,0,3,122,23,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, + 110,97,109,101,99,2,0,0,0,0,0,0,0,3,0,0, + 0,8,0,0,0,67,0,0,0,115,41,0,0,0,116,0, + 0,106,1,0,124,1,0,100,1,0,131,2,0,143,17,0, + 125,2,0,124,2,0,106,2,0,131,0,0,83,87,100,2, + 0,81,88,100,2,0,83,41,3,122,39,82,101,116,117,114, + 110,32,116,104,101,32,100,97,116,97,32,102,114,111,109,32, + 112,97,116,104,32,97,115,32,114,97,119,32,98,121,116,101, + 115,46,218,1,114,78,41,3,114,49,0,0,0,114,50,0, + 0,0,90,4,114,101,97,100,41,3,114,71,0,0,0,114, + 35,0,0,0,114,54,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,42,1,0,0,74,6,0, + 0,115,4,0,0,0,0,2,21,1,122,19,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,100,97,116,97,41, + 11,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, + 114,59,0,0,0,114,72,0,0,0,114,233,0,0,0,114, + 53,1,0,0,114,162,0,0,0,114,6,1,0,0,114,241, + 0,0,0,114,42,1,0,0,114,4,0,0,0,114,4,0, + 0,0,41,1,114,228,0,0,0,114,5,0,0,0,114,51, + 1,0,0,39,6,0,0,115,14,0,0,0,12,3,6,2, + 12,6,12,4,12,3,24,12,18,5,114,51,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 64,0,0,0,115,64,0,0,0,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, + 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, + 90,5,0,100,6,0,100,7,0,100,8,0,100,9,0,132, + 0,1,90,6,0,100,10,0,83,41,11,114,10,1,0,0, + 122,62,67,111,110,99,114,101,116,101,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,111,102,32,83,111,117, + 114,99,101,76,111,97,100,101,114,32,117,115,105,110,103,32, + 116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,46, + 99,2,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,67,0,0,0,115,36,0,0,0,116,0,0,124,1,0, + 131,1,0,125,2,0,105,2,0,124,2,0,106,1,0,100, + 1,0,54,124,2,0,106,2,0,100,2,0,54,83,41,3, + 122,33,82,101,116,117,114,110,32,116,104,101,32,109,101,116, + 97,100,97,116,97,32,102,111,114,32,116,104,101,32,112,97, + 116,104,46,114,185,0,0,0,114,186,0,0,0,41,3,114, + 39,0,0,0,218,8,115,116,95,109,116,105,109,101,90,7, + 115,116,95,115,105,122,101,41,3,114,71,0,0,0,114,35, + 0,0,0,114,49,1,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,39,1,0,0,84,6,0,0, + 115,4,0,0,0,0,2,12,1,122,27,83,111,117,114,99, + 101,70,105,108,101,76,111,97,100,101,114,46,112,97,116,104, + 95,115,116,97,116,115,99,4,0,0,0,0,0,0,0,5, + 0,0,0,5,0,0,0,67,0,0,0,115,34,0,0,0, + 116,0,0,124,1,0,131,1,0,125,4,0,124,0,0,106, + 1,0,124,2,0,124,3,0,100,1,0,124,4,0,131,2, + 1,83,41,2,78,218,5,95,109,111,100,101,41,2,114,151, + 0,0,0,114,40,1,0,0,41,5,114,71,0,0,0,114, + 148,0,0,0,114,147,0,0,0,114,53,0,0,0,114,42, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,41,1,0,0,89,6,0,0,115,4,0,0,0, + 0,2,12,1,122,32,83,111,117,114,99,101,70,105,108,101, + 76,111,97,100,101,114,46,95,99,97,99,104,101,95,98,121, + 116,101,99,111,100,101,114,57,1,0,0,105,182,1,0,0, + 99,3,0,0,0,1,0,0,0,9,0,0,0,17,0,0, + 0,67,0,0,0,115,53,1,0,0,116,0,0,124,1,0, + 131,1,0,92,2,0,125,4,0,125,5,0,103,0,0,125, + 6,0,120,54,0,124,4,0,114,80,0,116,1,0,124,4, + 0,131,1,0,12,114,80,0,116,0,0,124,4,0,131,1, + 0,92,2,0,125,4,0,125,7,0,124,6,0,106,2,0, + 124,7,0,131,1,0,1,113,27,0,87,120,132,0,116,3, + 0,124,6,0,131,1,0,68,93,118,0,125,7,0,116,4, + 0,124,4,0,124,7,0,131,2,0,125,4,0,121,17,0, + 116,5,0,106,6,0,124,4,0,131,1,0,1,87,113,94, + 0,4,116,7,0,107,10,0,114,155,0,1,1,1,119,94, + 0,89,113,94,0,4,116,8,0,107,10,0,114,211,0,1, + 125,8,0,1,122,25,0,116,9,0,100,1,0,124,4,0, + 124,8,0,131,3,0,1,100,2,0,83,87,89,100,2,0, + 100,2,0,125,8,0,126,8,0,88,113,94,0,88,113,94, + 0,87,121,33,0,116,10,0,124,1,0,124,2,0,124,3, + 0,131,3,0,1,116,9,0,100,3,0,124,1,0,131,2, + 0,1,87,110,53,0,4,116,8,0,107,10,0,114,48,1, + 1,125,8,0,1,122,21,0,116,9,0,100,1,0,124,1, + 0,124,8,0,131,3,0,1,87,89,100,2,0,100,2,0, + 125,8,0,126,8,0,88,110,1,0,88,100,2,0,83,41, + 4,122,27,87,114,105,116,101,32,98,121,116,101,115,32,100, + 97,116,97,32,116,111,32,97,32,102,105,108,101,46,122,27, + 99,111,117,108,100,32,110,111,116,32,99,114,101,97,116,101, + 32,123,33,114,125,58,32,123,33,114,125,78,122,12,99,114, + 101,97,116,101,100,32,123,33,114,125,41,11,114,38,0,0, + 0,114,46,0,0,0,114,227,0,0,0,114,33,0,0,0, + 114,28,0,0,0,114,3,0,0,0,90,5,109,107,100,105, + 114,218,15,70,105,108,101,69,120,105,115,116,115,69,114,114, + 111,114,114,40,0,0,0,114,158,0,0,0,114,55,0,0, + 0,41,9,114,71,0,0,0,114,35,0,0,0,114,53,0, + 0,0,114,57,1,0,0,114,236,0,0,0,114,214,0,0, + 0,114,27,0,0,0,114,23,0,0,0,114,43,1,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 40,1,0,0,94,6,0,0,115,38,0,0,0,0,2,18, + 1,6,2,22,1,18,1,17,2,19,1,15,1,3,1,17, + 1,13,2,7,1,18,3,16,1,27,1,3,1,16,1,17, + 1,18,2,122,25,83,111,117,114,99,101,70,105,108,101,76, + 111,97,100,101,114,46,115,101,116,95,100,97,116,97,78,41, + 7,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, + 114,59,0,0,0,114,39,1,0,0,114,41,1,0,0,114, + 40,1,0,0,114,4,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,10,1,0,0,80,6,0, + 0,115,8,0,0,0,12,2,6,2,12,5,12,5,114,10, + 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,64,0,0,0,115,46,0,0,0,101,0,0, + 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, + 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, + 0,132,0,0,90,5,0,100,6,0,83,41,7,114,9,1, + 0,0,122,45,76,111,97,100,101,114,32,119,104,105,99,104, + 32,104,97,110,100,108,101,115,32,115,111,117,114,99,101,108, + 101,115,115,32,102,105,108,101,32,105,109,112,111,114,116,115, + 46,99,2,0,0,0,0,0,0,0,5,0,0,0,6,0, + 0,0,67,0,0,0,115,76,0,0,0,124,0,0,106,0, + 0,124,1,0,131,1,0,125,2,0,124,0,0,106,1,0, + 124,2,0,131,1,0,125,3,0,116,2,0,124,3,0,100, + 1,0,124,1,0,100,2,0,124,2,0,131,1,2,125,4, + 0,116,3,0,124,4,0,100,1,0,124,1,0,100,3,0, + 124,2,0,131,1,2,83,41,4,78,114,67,0,0,0,114, + 35,0,0,0,114,147,0,0,0,41,4,114,241,0,0,0, + 114,42,1,0,0,114,192,0,0,0,114,197,0,0,0,41, + 5,114,71,0,0,0,114,164,0,0,0,114,35,0,0,0, + 114,53,0,0,0,114,50,1,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,17,1,0,0,127,6, + 0,0,115,8,0,0,0,0,1,15,1,15,1,24,1,122, + 29,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,99,111,100,101,99,2, + 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, + 0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,39, + 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,116, + 104,101,114,101,32,105,115,32,110,111,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,4,0,0,0,41,2,114, + 71,0,0,0,114,164,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,18,1,0,0,133,6,0, + 0,115,2,0,0,0,0,2,122,31,83,111,117,114,99,101, + 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,103, + 101,116,95,115,111,117,114,99,101,78,41,6,114,57,0,0, + 0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,0, + 114,17,1,0,0,114,18,1,0,0,114,4,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,9, + 1,0,0,123,6,0,0,115,6,0,0,0,12,2,6,2, + 12,6,114,9,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,64,0,0,0,115,130,0,0, + 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, + 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,100, + 4,0,100,5,0,132,0,0,90,5,0,100,6,0,100,7, + 0,132,0,0,90,6,0,101,7,0,100,8,0,100,9,0, + 132,0,0,131,1,0,90,8,0,100,10,0,100,11,0,132, + 0,0,90,9,0,100,12,0,100,13,0,132,0,0,90,10, + 0,100,14,0,100,15,0,132,0,0,90,11,0,101,7,0, + 100,16,0,100,17,0,132,0,0,131,1,0,90,12,0,100, + 18,0,83,41,19,218,19,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,122,93,76,111,97,100, + 101,114,32,102,111,114,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,84, + 104,101,32,99,111,110,115,116,114,117,99,116,111,114,32,105, + 115,32,100,101,115,105,103,110,101,100,32,116,111,32,119,111, + 114,107,32,119,105,116,104,32,70,105,108,101,70,105,110,100, + 101,114,46,10,10,32,32,32,32,99,3,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,22, + 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, + 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,67, + 0,0,0,114,35,0,0,0,41,3,114,71,0,0,0,114, + 67,0,0,0,114,35,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,72,0,0,0,150,6,0, + 0,115,4,0,0,0,0,1,9,1,122,28,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,115,34,0, + 0,0,124,0,0,106,0,0,124,1,0,106,0,0,107,2, + 0,111,33,0,124,0,0,106,1,0,124,1,0,106,1,0, + 107,2,0,83,41,1,78,41,2,114,228,0,0,0,114,63, + 0,0,0,41,2,114,71,0,0,0,114,231,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,233, + 0,0,0,154,6,0,0,115,4,0,0,0,0,1,18,1, + 122,26,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,26,0,0,0,116,0,0,124,0,0,106,1,0,131, + 1,0,116,0,0,124,0,0,106,2,0,131,1,0,65,83, + 41,1,78,41,3,114,52,1,0,0,114,67,0,0,0,114, + 35,0,0,0,41,1,114,71,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,53,1,0,0,158, + 6,0,0,115,2,0,0,0,0,1,122,28,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,0, + 0,4,0,0,0,11,0,0,0,67,0,0,0,115,177,0, + 0,0,116,0,0,124,1,0,131,1,0,143,29,0,1,116, + 1,0,116,2,0,106,3,0,124,1,0,124,0,0,106,4, + 0,131,3,0,125,2,0,87,100,1,0,81,88,116,5,0, + 100,2,0,124,0,0,106,4,0,131,2,0,1,124,0,0, + 106,6,0,124,1,0,131,1,0,125,3,0,124,3,0,114, + 121,0,116,7,0,124,2,0,100,3,0,131,2,0,12,114, + 121,0,116,8,0,124,0,0,106,4,0,131,1,0,100,4, + 0,25,103,1,0,124,2,0,95,9,0,124,0,0,124,2, + 0,95,10,0,124,2,0,106,11,0,124,2,0,95,12,0, + 124,3,0,115,173,0,124,2,0,106,12,0,106,13,0,100, + 5,0,131,1,0,100,4,0,25,124,2,0,95,12,0,124, + 2,0,83,41,6,122,25,76,111,97,100,32,97,110,32,101, + 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,46, + 78,122,33,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,32,108,111,97,100,101,100,32,102,114,111,109,32, + 123,33,114,125,114,250,0,0,0,114,84,0,0,0,114,117, + 0,0,0,41,14,114,69,0,0,0,114,114,0,0,0,114, + 106,0,0,0,90,12,108,111,97,100,95,100,121,110,97,109, + 105,99,114,35,0,0,0,114,158,0,0,0,114,223,0,0, + 0,114,60,0,0,0,114,38,0,0,0,114,250,0,0,0, + 114,206,0,0,0,114,57,0,0,0,114,253,0,0,0,114, + 32,0,0,0,41,4,114,71,0,0,0,114,164,0,0,0, + 114,181,0,0,0,114,223,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,6,1,0,0,161,6, + 0,0,115,24,0,0,0,0,5,13,1,9,1,21,1,16, + 1,15,1,22,1,25,1,9,1,12,1,6,1,25,1,122, + 31,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,3,0,0,0,115,48,0,0,0,116,0,0,124,0,0, + 106,1,0,131,1,0,100,1,0,25,137,0,0,116,2,0, + 135,0,0,102,1,0,100,2,0,100,3,0,134,0,0,116, + 3,0,68,131,1,0,131,1,0,83,41,4,122,49,82,101, + 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,114, + 29,0,0,0,99,1,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,51,0,0,0,115,31,0,0,0,124,0, + 0,93,21,0,125,1,0,136,0,0,100,0,0,124,1,0, + 23,107,2,0,86,1,113,3,0,100,1,0,83,41,2,114, + 72,0,0,0,78,114,4,0,0,0,41,2,114,22,0,0, + 0,218,6,115,117,102,102,105,120,41,1,218,9,102,105,108, + 101,95,110,97,109,101,114,4,0,0,0,114,5,0,0,0, + 114,77,0,0,0,182,6,0,0,115,2,0,0,0,6,1, + 122,49,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, + 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, + 112,114,62,41,4,114,38,0,0,0,114,35,0,0,0,114, + 78,0,0,0,218,18,69,88,84,69,78,83,73,79,78,95, + 83,85,70,70,73,88,69,83,41,2,114,71,0,0,0,114, + 164,0,0,0,114,4,0,0,0,41,1,114,61,1,0,0, + 114,5,0,0,0,114,223,0,0,0,179,6,0,0,115,6, + 0,0,0,0,2,19,1,18,1,122,30,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105, + 115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,0,83,41,2,122,63,82,101,116,117,114, + 110,32,78,111,110,101,32,97,115,32,97,110,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,99,97, + 110,110,111,116,32,99,114,101,97,116,101,32,97,32,99,111, + 100,101,32,111,98,106,101,99,116,46,78,114,4,0,0,0, + 41,2,114,71,0,0,0,114,164,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,17,1,0,0, + 185,6,0,0,115,2,0,0,0,0,2,122,28,69,120,116, 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,103,101,116,95,102,105,108,101,110,97,109,101,78,41,13, - 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, - 59,0,0,0,114,72,0,0,0,114,230,0,0,0,114,51, - 1,0,0,114,157,0,0,0,114,5,1,0,0,114,220,0, - 0,0,114,16,1,0,0,114,17,1,0,0,114,239,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,57,1,0,0,153,6,0,0,115,18, - 0,0,0,12,6,6,2,12,4,12,4,12,3,18,18,12, - 6,12,4,12,4,114,57,1,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, - 130,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, - 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, - 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, - 132,0,0,90,7,0,100,10,0,100,11,0,132,0,0,90, - 8,0,100,12,0,100,13,0,132,0,0,90,9,0,100,14, - 0,100,15,0,132,0,0,90,10,0,100,16,0,100,17,0, - 132,0,0,90,11,0,100,18,0,100,19,0,132,0,0,90, - 12,0,100,20,0,83,41,21,218,14,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,97,38,1,0,0,82,101,112, - 114,101,115,101,110,116,115,32,97,32,110,97,109,101,115,112, - 97,99,101,32,112,97,99,107,97,103,101,39,115,32,112,97, - 116,104,46,32,32,73,116,32,117,115,101,115,32,116,104,101, - 32,109,111,100,117,108,101,32,110,97,109,101,10,32,32,32, - 32,116,111,32,102,105,110,100,32,105,116,115,32,112,97,114, - 101,110,116,32,109,111,100,117,108,101,44,32,97,110,100,32, - 102,114,111,109,32,116,104,101,114,101,32,105,116,32,108,111, - 111,107,115,32,117,112,32,116,104,101,32,112,97,114,101,110, - 116,39,115,10,32,32,32,32,95,95,112,97,116,104,95,95, - 46,32,32,87,104,101,110,32,116,104,105,115,32,99,104,97, - 110,103,101,115,44,32,116,104,101,32,109,111,100,117,108,101, - 39,115,32,111,119,110,32,112,97,116,104,32,105,115,32,114, - 101,99,111,109,112,117,116,101,100,44,10,32,32,32,32,117, - 115,105,110,103,32,112,97,116,104,95,102,105,110,100,101,114, - 46,32,32,70,111,114,32,116,111,112,45,108,101,118,101,108, - 32,109,111,100,117,108,101,115,44,32,116,104,101,32,112,97, - 114,101,110,116,32,109,111,100,117,108,101,39,115,32,112,97, - 116,104,10,32,32,32,32,105,115,32,115,121,115,46,112,97, - 116,104,46,99,4,0,0,0,0,0,0,0,4,0,0,0, - 2,0,0,0,67,0,0,0,115,52,0,0,0,124,1,0, - 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,116, - 2,0,124,0,0,106,3,0,131,0,0,131,1,0,124,0, - 0,95,4,0,124,3,0,124,0,0,95,5,0,100,0,0, - 83,41,1,78,41,6,114,70,0,0,0,114,254,0,0,0, - 114,232,0,0,0,218,16,95,103,101,116,95,112,97,114,101, - 110,116,95,112,97,116,104,218,17,95,108,97,115,116,95,112, - 97,114,101,110,116,95,112,97,116,104,218,12,95,112,97,116, - 104,95,102,105,110,100,101,114,41,4,114,71,0,0,0,114, - 67,0,0,0,114,35,0,0,0,218,11,112,97,116,104,95, - 102,105,110,100,101,114,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,72,0,0,0,217,6,0,0,115,8, - 0,0,0,0,1,9,1,9,1,21,1,122,23,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,110, - 105,116,95,95,99,1,0,0,0,0,0,0,0,4,0,0, - 0,3,0,0,0,67,0,0,0,115,53,0,0,0,124,0, - 0,106,0,0,106,1,0,100,1,0,131,1,0,92,3,0, - 125,1,0,125,2,0,125,3,0,124,2,0,100,2,0,107, - 2,0,114,43,0,100,6,0,83,124,1,0,100,5,0,102, - 2,0,83,41,7,122,62,82,101,116,117,114,110,115,32,97, - 32,116,117,112,108,101,32,111,102,32,40,112,97,114,101,110, - 116,45,109,111,100,117,108,101,45,110,97,109,101,44,32,112, - 97,114,101,110,116,45,112,97,116,104,45,97,116,116,114,45, - 110,97,109,101,41,114,116,0,0,0,114,30,0,0,0,114, - 7,0,0,0,114,35,0,0,0,114,247,0,0,0,41,2, - 122,3,115,121,115,122,4,112,97,116,104,41,2,114,70,0, - 0,0,114,32,0,0,0,41,4,114,71,0,0,0,114,234, - 0,0,0,218,3,100,111,116,114,94,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,23,95,102, - 105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,95, - 110,97,109,101,115,223,6,0,0,115,8,0,0,0,0,2, - 27,1,12,2,4,3,122,38,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,102,105,110,100,95,112,97,114, - 101,110,116,95,112,97,116,104,95,110,97,109,101,115,99,1, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,38,0,0,0,124,0,0,106,0,0,131,0, - 0,92,2,0,125,1,0,125,2,0,116,1,0,116,2,0, - 106,3,0,124,1,0,25,124,2,0,131,2,0,83,41,1, - 78,41,4,114,67,1,0,0,114,62,0,0,0,114,7,0, - 0,0,114,73,0,0,0,41,3,114,71,0,0,0,90,18, - 112,97,114,101,110,116,95,109,111,100,117,108,101,95,110,97, - 109,101,90,14,112,97,116,104,95,97,116,116,114,95,110,97, - 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,62,1,0,0,233,6,0,0,115,4,0,0,0,0, - 1,18,1,122,31,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,103,101,116,95,112,97,114,101,110,116,95, - 112,97,116,104,99,1,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,127,0,0,0,116,0, - 0,124,0,0,106,1,0,131,0,0,131,1,0,125,1,0, - 124,1,0,124,0,0,106,2,0,107,3,0,114,120,0,124, - 0,0,106,3,0,124,0,0,106,4,0,124,1,0,131,2, - 0,125,2,0,124,2,0,100,0,0,107,9,0,114,108,0, - 124,2,0,106,5,0,100,0,0,107,8,0,114,108,0,124, - 2,0,106,6,0,114,108,0,124,2,0,106,6,0,124,0, - 0,95,7,0,113,108,0,110,0,0,124,1,0,124,0,0, - 95,2,0,110,0,0,124,0,0,106,7,0,83,41,1,78, - 41,8,114,232,0,0,0,114,62,1,0,0,114,63,1,0, - 0,114,64,1,0,0,114,70,0,0,0,114,170,0,0,0, - 114,221,0,0,0,114,254,0,0,0,41,3,114,71,0,0, - 0,90,11,112,97,114,101,110,116,95,112,97,116,104,114,178, + 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,0,83,41,2,122,53,82,101,116,117,114, + 110,32,78,111,110,101,32,97,115,32,101,120,116,101,110,115, + 105,111,110,32,109,111,100,117,108,101,115,32,104,97,118,101, + 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, + 78,114,4,0,0,0,41,2,114,71,0,0,0,114,164,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,18,1,0,0,189,6,0,0,115,2,0,0,0,0, + 2,122,30,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, + 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,115,7,0,0,0,124,0,0,106,0, + 0,83,41,1,122,58,82,101,116,117,114,110,32,116,104,101, + 32,112,97,116,104,32,116,111,32,116,104,101,32,115,111,117, + 114,99,101,32,102,105,108,101,32,97,115,32,102,111,117,110, + 100,32,98,121,32,116,104,101,32,102,105,110,100,101,114,46, + 41,1,114,35,0,0,0,41,2,114,71,0,0,0,114,164, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,12,95,114,101,99,97,108,99,117,108,97,116,101, - 237,6,0,0,115,16,0,0,0,0,2,18,1,15,1,21, - 3,27,1,9,1,18,1,12,1,122,27,95,78,97,109,101, - 115,112,97,99,101,80,97,116,104,46,95,114,101,99,97,108, - 99,117,108,97,116,101,99,1,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, - 116,0,0,124,0,0,106,1,0,131,0,0,131,1,0,83, - 41,1,78,41,2,218,4,105,116,101,114,114,68,1,0,0, - 41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,8,95,95,105,116,101,114,95,95, - 250,6,0,0,115,2,0,0,0,0,1,122,23,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,116, - 101,114,95,95,99,1,0,0,0,0,0,0,0,1,0,0, + 0,0,114,241,0,0,0,193,6,0,0,115,2,0,0,0, + 0,3,122,32,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, + 110,97,109,101,78,41,13,114,57,0,0,0,114,56,0,0, + 0,114,58,0,0,0,114,59,0,0,0,114,72,0,0,0, + 114,233,0,0,0,114,53,1,0,0,114,162,0,0,0,114, + 6,1,0,0,114,223,0,0,0,114,17,1,0,0,114,18, + 1,0,0,114,241,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,59,1,0, + 0,142,6,0,0,115,18,0,0,0,12,6,6,2,12,4, + 12,4,12,3,18,18,12,6,12,4,12,4,114,59,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,64,0,0,0,115,130,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, + 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, + 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, + 0,100,8,0,100,9,0,132,0,0,90,7,0,100,10,0, + 100,11,0,132,0,0,90,8,0,100,12,0,100,13,0,132, + 0,0,90,9,0,100,14,0,100,15,0,132,0,0,90,10, + 0,100,16,0,100,17,0,132,0,0,90,11,0,100,18,0, + 100,19,0,132,0,0,90,12,0,100,20,0,83,41,21,218, + 14,95,78,97,109,101,115,112,97,99,101,80,97,116,104,97, + 38,1,0,0,82,101,112,114,101,115,101,110,116,115,32,97, + 32,110,97,109,101,115,112,97,99,101,32,112,97,99,107,97, + 103,101,39,115,32,112,97,116,104,46,32,32,73,116,32,117, + 115,101,115,32,116,104,101,32,109,111,100,117,108,101,32,110, + 97,109,101,10,32,32,32,32,116,111,32,102,105,110,100,32, + 105,116,115,32,112,97,114,101,110,116,32,109,111,100,117,108, + 101,44,32,97,110,100,32,102,114,111,109,32,116,104,101,114, + 101,32,105,116,32,108,111,111,107,115,32,117,112,32,116,104, + 101,32,112,97,114,101,110,116,39,115,10,32,32,32,32,95, + 95,112,97,116,104,95,95,46,32,32,87,104,101,110,32,116, + 104,105,115,32,99,104,97,110,103,101,115,44,32,116,104,101, + 32,109,111,100,117,108,101,39,115,32,111,119,110,32,112,97, + 116,104,32,105,115,32,114,101,99,111,109,112,117,116,101,100, + 44,10,32,32,32,32,117,115,105,110,103,32,112,97,116,104, + 95,102,105,110,100,101,114,46,32,32,70,111,114,32,116,111, + 112,45,108,101,118,101,108,32,109,111,100,117,108,101,115,44, + 32,116,104,101,32,112,97,114,101,110,116,32,109,111,100,117, + 108,101,39,115,32,112,97,116,104,10,32,32,32,32,105,115, + 32,115,121,115,46,112,97,116,104,46,99,4,0,0,0,0, + 0,0,0,4,0,0,0,2,0,0,0,67,0,0,0,115, + 52,0,0,0,124,1,0,124,0,0,95,0,0,124,2,0, + 124,0,0,95,1,0,116,2,0,124,0,0,106,3,0,131, + 0,0,131,1,0,124,0,0,95,4,0,124,3,0,124,0, + 0,95,5,0,100,0,0,83,41,1,78,41,6,114,70,0, + 0,0,114,0,1,0,0,114,235,0,0,0,218,16,95,103, + 101,116,95,112,97,114,101,110,116,95,112,97,116,104,218,17, + 95,108,97,115,116,95,112,97,114,101,110,116,95,112,97,116, + 104,218,12,95,112,97,116,104,95,102,105,110,100,101,114,41, + 4,114,71,0,0,0,114,67,0,0,0,114,35,0,0,0, + 218,11,112,97,116,104,95,102,105,110,100,101,114,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,72,0,0, + 0,206,6,0,0,115,8,0,0,0,0,1,9,1,9,1, + 21,1,122,23,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,105,110,105,116,95,95,99,1,0,0,0, + 0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,0, + 115,53,0,0,0,124,0,0,106,0,0,106,1,0,100,1, + 0,131,1,0,92,3,0,125,1,0,125,2,0,125,3,0, + 124,2,0,100,2,0,107,2,0,114,43,0,100,6,0,83, + 124,1,0,100,5,0,102,2,0,83,41,7,122,62,82,101, + 116,117,114,110,115,32,97,32,116,117,112,108,101,32,111,102, + 32,40,112,97,114,101,110,116,45,109,111,100,117,108,101,45, + 110,97,109,101,44,32,112,97,114,101,110,116,45,112,97,116, + 104,45,97,116,116,114,45,110,97,109,101,41,114,117,0,0, + 0,114,30,0,0,0,114,7,0,0,0,114,35,0,0,0, + 114,250,0,0,0,41,2,122,3,115,121,115,122,4,112,97, + 116,104,41,2,114,70,0,0,0,114,32,0,0,0,41,4, + 114,71,0,0,0,114,236,0,0,0,218,3,100,111,116,114, + 94,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,23,95,102,105,110,100,95,112,97,114,101,110, + 116,95,112,97,116,104,95,110,97,109,101,115,212,6,0,0, + 115,8,0,0,0,0,2,27,1,12,2,4,3,122,38,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,102, + 105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,95, + 110,97,109,101,115,99,1,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,124, + 0,0,106,0,0,131,0,0,92,2,0,125,1,0,125,2, + 0,116,1,0,116,2,0,106,3,0,124,1,0,25,124,2, + 0,131,2,0,83,41,1,78,41,4,114,69,1,0,0,114, + 62,0,0,0,114,7,0,0,0,114,73,0,0,0,41,3, + 114,71,0,0,0,90,18,112,97,114,101,110,116,95,109,111, + 100,117,108,101,95,110,97,109,101,90,14,112,97,116,104,95, + 97,116,116,114,95,110,97,109,101,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,64,1,0,0,222,6,0, + 0,115,4,0,0,0,0,1,18,1,122,31,95,78,97,109, + 101,115,112,97,99,101,80,97,116,104,46,95,103,101,116,95, + 112,97,114,101,110,116,95,112,97,116,104,99,1,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,118,0,0,0,116,0,0,124,0,0,106,1,0,131,0, + 0,131,1,0,125,1,0,124,1,0,124,0,0,106,2,0, + 107,3,0,114,111,0,124,0,0,106,3,0,124,0,0,106, + 4,0,124,1,0,131,2,0,125,2,0,124,2,0,100,0, + 0,107,9,0,114,102,0,124,2,0,106,5,0,100,0,0, + 107,8,0,114,102,0,124,2,0,106,6,0,114,102,0,124, + 2,0,106,6,0,124,0,0,95,7,0,124,1,0,124,0, + 0,95,2,0,124,0,0,106,7,0,83,41,1,78,41,8, + 114,235,0,0,0,114,64,1,0,0,114,65,1,0,0,114, + 66,1,0,0,114,70,0,0,0,114,173,0,0,0,114,224, + 0,0,0,114,0,1,0,0,41,3,114,71,0,0,0,90, + 11,112,97,114,101,110,116,95,112,97,116,104,114,180,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,12,95,114,101,99,97,108,99,117,108,97,116,101,226,6, + 0,0,115,16,0,0,0,0,2,18,1,15,1,21,3,27, + 1,9,1,12,1,9,1,122,27,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,95,114,101,99,97,108,99,117, + 108,97,116,101,99,1,0,0,0,0,0,0,0,1,0,0, 0,2,0,0,0,67,0,0,0,115,16,0,0,0,116,0, 0,124,0,0,106,1,0,131,0,0,131,1,0,83,41,1, - 78,41,2,114,31,0,0,0,114,68,1,0,0,41,1,114, - 71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,7,95,95,108,101,110,95,95,253,6,0,0, - 115,2,0,0,0,0,1,122,22,95,78,97,109,101,115,112, - 97,99,101,80,97,116,104,46,95,95,108,101,110,95,95,99, - 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, - 67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,124, - 0,0,106,1,0,131,1,0,83,41,2,78,122,20,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,40,123,33,114, - 125,41,41,2,114,47,0,0,0,114,254,0,0,0,41,1, + 78,41,2,218,4,105,116,101,114,114,70,1,0,0,41,1, 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,101,0,0,0,0,7,0,0,115,2,0, - 0,0,0,1,122,23,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,95,114,101,112,114,95,95,99,2,0, - 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, - 0,0,115,16,0,0,0,124,1,0,124,0,0,106,0,0, - 131,0,0,107,6,0,83,41,1,78,41,1,114,68,1,0, - 0,41,2,114,71,0,0,0,218,4,105,116,101,109,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,12,95, - 95,99,111,110,116,97,105,110,115,95,95,3,7,0,0,115, - 2,0,0,0,0,1,122,27,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,99,111,110,116,97,105,110, - 115,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, - 2,0,0,0,67,0,0,0,115,20,0,0,0,124,0,0, - 106,0,0,106,1,0,124,1,0,131,1,0,1,100,0,0, - 83,41,1,78,41,2,114,254,0,0,0,114,224,0,0,0, - 41,2,114,71,0,0,0,114,72,1,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,224,0,0,0, - 6,7,0,0,115,2,0,0,0,0,1,122,21,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,97,112,112,101, - 110,100,78,41,13,114,57,0,0,0,114,56,0,0,0,114, - 58,0,0,0,114,59,0,0,0,114,72,0,0,0,114,67, - 1,0,0,114,62,1,0,0,114,68,1,0,0,114,70,1, - 0,0,114,71,1,0,0,114,101,0,0,0,114,73,1,0, - 0,114,224,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,61,1,0,0,210, - 6,0,0,115,20,0,0,0,12,5,6,2,12,6,12,10, - 12,4,12,13,12,3,12,3,12,3,12,3,114,61,1,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,64,0,0,0,115,106,0,0,0,101,0,0,90,1, - 0,100,0,0,90,2,0,100,1,0,100,2,0,132,0,0, - 90,3,0,101,4,0,100,3,0,100,4,0,132,0,0,131, - 1,0,90,5,0,100,5,0,100,6,0,132,0,0,90,6, - 0,100,7,0,100,8,0,132,0,0,90,7,0,100,9,0, - 100,10,0,132,0,0,90,8,0,100,11,0,100,12,0,132, - 0,0,90,9,0,100,13,0,100,14,0,132,0,0,90,10, - 0,100,15,0,83,41,16,114,252,0,0,0,99,4,0,0, - 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, - 0,115,25,0,0,0,116,0,0,124,1,0,124,2,0,124, - 3,0,131,3,0,124,0,0,95,1,0,100,0,0,83,41, - 1,78,41,2,114,61,1,0,0,114,254,0,0,0,41,4, - 114,71,0,0,0,114,67,0,0,0,114,35,0,0,0,114, - 65,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,72,0,0,0,12,7,0,0,115,2,0,0, - 0,0,1,122,25,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,2, - 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, - 0,0,0,115,16,0,0,0,100,1,0,106,0,0,124,1, - 0,106,1,0,131,1,0,83,41,2,122,115,82,101,116,117, - 114,110,32,114,101,112,114,32,102,111,114,32,116,104,101,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, - 32,84,104,101,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,84,104,101,32, - 105,109,112,111,114,116,32,109,97,99,104,105,110,101,114,121, - 32,100,111,101,115,32,116,104,101,32,106,111,98,32,105,116, - 115,101,108,102,46,10,10,32,32,32,32,32,32,32,32,122, - 25,60,109,111,100,117,108,101,32,123,33,114,125,32,40,110, - 97,109,101,115,112,97,99,101,41,62,41,2,114,47,0,0, - 0,114,57,0,0,0,41,2,114,12,1,0,0,114,180,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,206,0,0,0,15,7,0,0,115,2,0,0,0,0, - 7,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,99, - 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,78, - 84,114,4,0,0,0,41,2,114,71,0,0,0,114,159,0, + 5,0,0,0,218,8,95,95,105,116,101,114,95,95,239,6, + 0,0,115,2,0,0,0,0,1,122,23,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,105,116,101,114, + 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, + 0,0,0,67,0,0,0,115,16,0,0,0,116,0,0,124, + 0,0,106,1,0,131,0,0,131,1,0,83,41,1,78,41, + 2,114,31,0,0,0,114,70,1,0,0,41,1,114,71,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,220,0,0,0,24,7,0,0,115,2,0,0,0,0, - 1,122,27,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,105,115,95,112,97,99,107,97,103,101,99,2, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,0,83,41,2,78,114, - 30,0,0,0,114,4,0,0,0,41,2,114,71,0,0,0, - 114,159,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,17,1,0,0,27,7,0,0,115,2,0, + 0,218,7,95,95,108,101,110,95,95,242,6,0,0,115,2, + 0,0,0,0,1,122,22,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,95,108,101,110,95,95,99,1,0, + 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, + 0,0,115,16,0,0,0,100,1,0,106,0,0,124,0,0, + 106,1,0,131,1,0,83,41,2,78,122,20,95,78,97,109, + 101,115,112,97,99,101,80,97,116,104,40,123,33,114,125,41, + 41,2,114,47,0,0,0,114,0,1,0,0,41,1,114,71, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,101,0,0,0,245,6,0,0,115,2,0,0,0, + 0,1,122,23,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,114,101,112,114,95,95,99,2,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 115,16,0,0,0,124,1,0,124,0,0,106,0,0,131,0, + 0,107,6,0,83,41,1,78,41,1,114,70,1,0,0,41, + 2,114,71,0,0,0,218,4,105,116,101,109,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,12,95,95,99, + 111,110,116,97,105,110,115,95,95,248,6,0,0,115,2,0, 0,0,0,1,122,27,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,6,0, - 0,0,67,0,0,0,115,22,0,0,0,116,0,0,100,1, - 0,100,2,0,100,3,0,100,4,0,100,5,0,131,3,1, - 83,41,6,78,114,30,0,0,0,122,8,60,115,116,114,105, - 110,103,62,114,176,0,0,0,114,43,1,0,0,84,41,1, - 114,44,1,0,0,41,2,114,71,0,0,0,114,159,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,16,1,0,0,30,7,0,0,115,2,0,0,0,0,1, - 122,25,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,0,0,83,41,1,78,114,4,0,0, - 0,41,2,114,71,0,0,0,114,180,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,2,1,0, - 0,33,7,0,0,115,2,0,0,0,0,1,122,28,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,101, - 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, - 29,0,0,0,116,0,0,100,1,0,124,0,0,106,1,0, - 131,2,0,1,116,2,0,124,0,0,124,1,0,131,2,0, - 83,41,2,122,98,76,111,97,100,32,97,32,110,97,109,101, - 115,112,97,99,101,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, - 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 46,32,32,85,115,101,32,101,120,101,99,95,109,111,100,117, - 108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,32, - 32,32,32,32,32,32,32,122,38,110,97,109,101,115,112,97, - 99,101,32,109,111,100,117,108,101,32,108,111,97,100,101,100, - 32,119,105,116,104,32,112,97,116,104,32,123,33,114,125,41, - 3,114,153,0,0,0,114,254,0,0,0,114,181,0,0,0, - 41,2,114,71,0,0,0,114,159,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,5,1,0,0, - 36,7,0,0,115,4,0,0,0,0,7,16,1,122,28,95, + 80,97,116,104,46,95,95,99,111,110,116,97,105,110,115,95, + 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, + 0,0,67,0,0,0,115,20,0,0,0,124,0,0,106,0, + 0,106,1,0,124,1,0,131,1,0,1,100,0,0,83,41, + 1,78,41,2,114,0,1,0,0,114,227,0,0,0,41,2, + 114,71,0,0,0,114,74,1,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,227,0,0,0,251,6, + 0,0,115,2,0,0,0,0,1,122,21,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,97,112,112,101,110,100, + 78,41,13,114,57,0,0,0,114,56,0,0,0,114,58,0, + 0,0,114,59,0,0,0,114,72,0,0,0,114,69,1,0, + 0,114,64,1,0,0,114,70,1,0,0,114,72,1,0,0, + 114,73,1,0,0,114,101,0,0,0,114,75,1,0,0,114, + 227,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,63,1,0,0,199,6,0, + 0,115,20,0,0,0,12,5,6,2,12,6,12,10,12,4, + 12,13,12,3,12,3,12,3,12,3,114,63,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 64,0,0,0,115,118,0,0,0,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3, + 0,101,4,0,100,3,0,100,4,0,132,0,0,131,1,0, + 90,5,0,100,5,0,100,6,0,132,0,0,90,6,0,100, + 7,0,100,8,0,132,0,0,90,7,0,100,9,0,100,10, + 0,132,0,0,90,8,0,100,11,0,100,12,0,132,0,0, + 90,9,0,100,13,0,100,14,0,132,0,0,90,10,0,100, + 15,0,100,16,0,132,0,0,90,11,0,100,17,0,83,41, + 18,114,254,0,0,0,99,4,0,0,0,0,0,0,0,4, + 0,0,0,4,0,0,0,67,0,0,0,115,25,0,0,0, + 116,0,0,124,1,0,124,2,0,124,3,0,131,3,0,124, + 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,63, + 1,0,0,114,0,1,0,0,41,4,114,71,0,0,0,114, + 67,0,0,0,114,35,0,0,0,114,67,1,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,72,0, + 0,0,1,7,0,0,115,2,0,0,0,0,1,122,25,95, 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 108,111,97,100,95,109,111,100,117,108,101,78,41,11,114,57, - 0,0,0,114,56,0,0,0,114,58,0,0,0,114,72,0, - 0,0,114,19,1,0,0,114,206,0,0,0,114,220,0,0, - 0,114,17,1,0,0,114,16,1,0,0,114,2,1,0,0, - 114,5,1,0,0,114,4,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,252,0,0,0,11,7, - 0,0,115,14,0,0,0,12,1,12,3,18,9,12,3,12, - 3,12,3,12,3,114,252,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,64,0,0,0,115, - 160,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,90,3,0,101,4,0,100,2,0,100,3,0,132, - 0,0,131,1,0,90,5,0,101,4,0,100,4,0,100,5, - 0,132,0,0,131,1,0,90,6,0,101,4,0,100,6,0, - 100,7,0,132,0,0,131,1,0,90,7,0,101,4,0,100, - 8,0,100,9,0,132,0,0,131,1,0,90,8,0,101,4, - 0,100,10,0,100,11,0,100,12,0,132,1,0,131,1,0, - 90,9,0,101,4,0,100,10,0,100,10,0,100,13,0,100, - 14,0,132,2,0,131,1,0,90,10,0,101,4,0,100,10, - 0,100,15,0,100,16,0,132,1,0,131,1,0,90,11,0, - 100,10,0,83,41,17,218,10,80,97,116,104,70,105,110,100, - 101,114,122,62,77,101,116,97,32,112,97,116,104,32,102,105, - 110,100,101,114,32,102,111,114,32,115,121,115,46,112,97,116, - 104,32,97,110,100,32,112,97,99,107,97,103,101,32,95,95, - 112,97,116,104,95,95,32,97,116,116,114,105,98,117,116,101, - 115,46,99,1,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,67,0,0,0,115,58,0,0,0,120,51,0,116, - 0,0,106,1,0,106,2,0,131,0,0,68,93,34,0,125, - 1,0,116,3,0,124,1,0,100,1,0,131,2,0,114,16, - 0,124,1,0,106,4,0,131,0,0,1,113,16,0,113,16, - 0,87,100,2,0,83,41,3,122,125,67,97,108,108,32,116, - 104,101,32,105,110,118,97,108,105,100,97,116,101,95,99,97, - 99,104,101,115,40,41,32,109,101,116,104,111,100,32,111,110, - 32,97,108,108,32,112,97,116,104,32,101,110,116,114,121,32, - 102,105,110,100,101,114,115,10,32,32,32,32,32,32,32,32, - 115,116,111,114,101,100,32,105,110,32,115,121,115,46,112,97, - 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, - 101,115,32,40,119,104,101,114,101,32,105,109,112,108,101,109, - 101,110,116,101,100,41,46,218,17,105,110,118,97,108,105,100, - 97,116,101,95,99,97,99,104,101,115,78,41,5,114,7,0, - 0,0,218,19,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,218,6,118,97,108,117,101,115,114, - 60,0,0,0,114,75,1,0,0,41,2,114,12,1,0,0, - 218,6,102,105,110,100,101,114,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,75,1,0,0,53,7,0,0, - 115,6,0,0,0,0,4,22,1,15,1,122,28,80,97,116, - 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0, - 0,0,3,0,0,0,12,0,0,0,67,0,0,0,115,94, - 0,0,0,116,0,0,106,1,0,115,28,0,116,2,0,106, - 3,0,100,1,0,116,4,0,131,2,0,1,110,0,0,120, - 59,0,116,0,0,106,1,0,68,93,44,0,125,2,0,121, - 14,0,124,2,0,124,1,0,131,1,0,83,87,113,38,0, - 4,116,5,0,107,10,0,114,81,0,1,1,1,119,38,0, - 89,113,38,0,88,113,38,0,87,100,2,0,83,100,2,0, - 83,41,3,122,113,83,101,97,114,99,104,32,115,101,113,117, - 101,110,99,101,32,111,102,32,104,111,111,107,115,32,102,111, - 114,32,97,32,102,105,110,100,101,114,32,102,111,114,32,39, - 112,97,116,104,39,46,10,10,32,32,32,32,32,32,32,32, - 73,102,32,39,104,111,111,107,115,39,32,105,115,32,102,97, - 108,115,101,32,116,104,101,110,32,117,115,101,32,115,121,115, - 46,112,97,116,104,95,104,111,111,107,115,46,10,10,32,32, - 32,32,32,32,32,32,122,23,115,121,115,46,112,97,116,104, - 95,104,111,111,107,115,32,105,115,32,101,109,112,116,121,78, - 41,6,114,7,0,0,0,218,10,112,97,116,104,95,104,111, - 111,107,115,114,167,0,0,0,114,168,0,0,0,114,169,0, - 0,0,114,154,0,0,0,41,3,114,12,1,0,0,114,35, - 0,0,0,90,4,104,111,111,107,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,11,95,112,97,116,104,95, - 104,111,111,107,115,61,7,0,0,115,16,0,0,0,0,7, - 9,1,19,1,16,1,3,1,14,1,13,1,12,2,122,22, - 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, - 95,104,111,111,107,115,99,2,0,0,0,0,0,0,0,3, - 0,0,0,11,0,0,0,67,0,0,0,115,97,0,0,0, - 124,1,0,100,1,0,107,2,0,114,27,0,116,0,0,106, - 1,0,131,0,0,125,1,0,110,0,0,121,17,0,116,2, - 0,106,3,0,124,1,0,25,125,2,0,87,110,46,0,4, - 116,4,0,107,10,0,114,92,0,1,1,1,124,0,0,106, - 5,0,124,1,0,131,1,0,125,2,0,124,2,0,116,2, - 0,106,3,0,124,1,0,60,89,110,1,0,88,124,2,0, - 83,41,2,122,210,71,101,116,32,116,104,101,32,102,105,110, + 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,100,1,0,106,0,0,124,1,0,106,1,0,131,1, + 0,83,41,2,122,115,82,101,116,117,114,110,32,114,101,112, + 114,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,109, + 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,46,32,32,84,104,101,32,105,109,112,111,114,116, + 32,109,97,99,104,105,110,101,114,121,32,100,111,101,115,32, + 116,104,101,32,106,111,98,32,105,116,115,101,108,102,46,10, + 10,32,32,32,32,32,32,32,32,122,25,60,109,111,100,117, + 108,101,32,123,33,114,125,32,40,110,97,109,101,115,112,97, + 99,101,41,62,41,2,114,47,0,0,0,114,57,0,0,0, + 41,2,114,13,1,0,0,114,181,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,207,0,0,0, + 4,7,0,0,115,2,0,0,0,0,7,122,28,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,109,111, + 100,117,108,101,95,114,101,112,114,99,2,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,0,83,41,2,78,84,114,4,0,0,0, + 41,2,114,71,0,0,0,114,164,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,223,0,0,0, + 13,7,0,0,115,2,0,0,0,0,1,122,27,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,105,115, + 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,0,83,41,2,78,114,30,0,0,0,114,4, + 0,0,0,41,2,114,71,0,0,0,114,164,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,18, + 1,0,0,16,7,0,0,115,2,0,0,0,0,1,122,27, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,6,0,0,0,67,0,0,0, + 115,22,0,0,0,116,0,0,100,1,0,100,2,0,100,3, + 0,100,4,0,100,5,0,131,3,1,83,41,6,78,114,30, + 0,0,0,122,8,60,115,116,114,105,110,103,62,114,24,1, + 0,0,114,45,1,0,0,84,41,1,114,46,1,0,0,41, + 2,114,71,0,0,0,114,164,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,17,1,0,0,19, + 7,0,0,115,2,0,0,0,0,1,122,25,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 1,0,83,41,2,122,42,85,115,101,32,100,101,102,97,117, + 108,116,32,115,101,109,97,110,116,105,99,115,32,102,111,114, + 32,109,111,100,117,108,101,32,99,114,101,97,116,105,111,110, + 46,78,114,4,0,0,0,41,2,114,71,0,0,0,114,180, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,2,1,0,0,22,7,0,0,115,0,0,0,0, + 122,30,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,115,4,0,0,0,100,0,0,83,41,1, + 78,114,4,0,0,0,41,2,114,71,0,0,0,114,181,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,3,1,0,0,25,7,0,0,115,2,0,0,0,0, + 1,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 67,0,0,0,115,29,0,0,0,116,0,0,100,1,0,124, + 0,0,106,1,0,131,2,0,1,116,2,0,124,0,0,124, + 1,0,131,2,0,83,41,2,122,98,76,111,97,100,32,97, + 32,110,97,109,101,115,112,97,99,101,32,109,111,100,117,108, + 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, + 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,122,38,110,97, + 109,101,115,112,97,99,101,32,109,111,100,117,108,101,32,108, + 111,97,100,101,100,32,119,105,116,104,32,112,97,116,104,32, + 123,33,114,125,41,3,114,158,0,0,0,114,0,1,0,0, + 114,182,0,0,0,41,2,114,71,0,0,0,114,164,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,6,1,0,0,28,7,0,0,115,4,0,0,0,0,7, + 16,1,122,28,95,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, + 78,41,12,114,57,0,0,0,114,56,0,0,0,114,58,0, + 0,0,114,72,0,0,0,114,20,1,0,0,114,207,0,0, + 0,114,223,0,0,0,114,18,1,0,0,114,17,1,0,0, + 114,2,1,0,0,114,3,1,0,0,114,6,1,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,254,0,0,0,0,7,0,0,115,16,0,0, + 0,12,1,12,3,18,9,12,3,12,3,12,3,12,3,12, + 3,114,254,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,64,0,0,0,115,160,0,0,0, + 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, + 3,0,101,4,0,100,2,0,100,3,0,132,0,0,131,1, + 0,90,5,0,101,4,0,100,4,0,100,5,0,132,0,0, + 131,1,0,90,6,0,101,4,0,100,6,0,100,7,0,132, + 0,0,131,1,0,90,7,0,101,4,0,100,8,0,100,9, + 0,132,0,0,131,1,0,90,8,0,101,4,0,100,10,0, + 100,11,0,100,12,0,132,1,0,131,1,0,90,9,0,101, + 4,0,100,10,0,100,10,0,100,13,0,100,14,0,132,2, + 0,131,1,0,90,10,0,101,4,0,100,10,0,100,15,0, + 100,16,0,132,1,0,131,1,0,90,11,0,100,10,0,83, + 41,17,218,10,80,97,116,104,70,105,110,100,101,114,122,62, + 77,101,116,97,32,112,97,116,104,32,102,105,110,100,101,114, + 32,102,111,114,32,115,121,115,46,112,97,116,104,32,97,110, + 100,32,112,97,99,107,97,103,101,32,95,95,112,97,116,104, + 95,95,32,97,116,116,114,105,98,117,116,101,115,46,99,1, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, + 0,0,0,115,55,0,0,0,120,48,0,116,0,0,106,1, + 0,106,2,0,131,0,0,68,93,31,0,125,1,0,116,3, + 0,124,1,0,100,1,0,131,2,0,114,16,0,124,1,0, + 106,4,0,131,0,0,1,113,16,0,87,100,2,0,83,41, + 3,122,125,67,97,108,108,32,116,104,101,32,105,110,118,97, + 108,105,100,97,116,101,95,99,97,99,104,101,115,40,41,32, + 109,101,116,104,111,100,32,111,110,32,97,108,108,32,112,97, + 116,104,32,101,110,116,114,121,32,102,105,110,100,101,114,115, + 10,32,32,32,32,32,32,32,32,115,116,111,114,101,100,32, + 105,110,32,115,121,115,46,112,97,116,104,95,105,109,112,111, + 114,116,101,114,95,99,97,99,104,101,115,32,40,119,104,101, + 114,101,32,105,109,112,108,101,109,101,110,116,101,100,41,46, + 218,17,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,78,41,5,114,7,0,0,0,218,19,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 218,6,118,97,108,117,101,115,114,60,0,0,0,114,77,1, + 0,0,41,2,114,13,1,0,0,218,6,102,105,110,100,101, + 114,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,77,1,0,0,45,7,0,0,115,6,0,0,0,0,4, + 22,1,15,1,122,28,80,97,116,104,70,105,110,100,101,114, + 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, + 101,115,99,2,0,0,0,0,0,0,0,3,0,0,0,12, + 0,0,0,67,0,0,0,115,107,0,0,0,116,0,0,106, + 1,0,100,1,0,107,9,0,114,41,0,116,0,0,106,1, + 0,12,114,41,0,116,2,0,106,3,0,100,2,0,116,4, + 0,131,2,0,1,120,59,0,116,0,0,106,1,0,68,93, + 44,0,125,2,0,121,14,0,124,2,0,124,1,0,131,1, + 0,83,87,113,51,0,4,116,5,0,107,10,0,114,94,0, + 1,1,1,119,51,0,89,113,51,0,88,113,51,0,87,100, + 1,0,83,100,1,0,83,41,3,122,113,83,101,97,114,99, + 104,32,115,101,113,117,101,110,99,101,32,111,102,32,104,111, + 111,107,115,32,102,111,114,32,97,32,102,105,110,100,101,114, + 32,102,111,114,32,39,112,97,116,104,39,46,10,10,32,32, + 32,32,32,32,32,32,73,102,32,39,104,111,111,107,115,39, + 32,105,115,32,102,97,108,115,101,32,116,104,101,110,32,117, + 115,101,32,115,121,115,46,112,97,116,104,95,104,111,111,107, + 115,46,10,10,32,32,32,32,32,32,32,32,78,122,23,115, + 121,115,46,112,97,116,104,95,104,111,111,107,115,32,105,115, + 32,101,109,112,116,121,41,6,114,7,0,0,0,218,10,112, + 97,116,104,95,104,111,111,107,115,114,118,0,0,0,114,119, + 0,0,0,114,172,0,0,0,114,159,0,0,0,41,3,114, + 13,1,0,0,114,35,0,0,0,90,4,104,111,111,107,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,11, + 95,112,97,116,104,95,104,111,111,107,115,53,7,0,0,115, + 16,0,0,0,0,7,25,1,16,1,16,1,3,1,14,1, + 13,1,12,2,122,22,80,97,116,104,70,105,110,100,101,114, + 46,95,112,97,116,104,95,104,111,111,107,115,99,2,0,0, + 0,0,0,0,0,3,0,0,0,19,0,0,0,67,0,0, + 0,115,123,0,0,0,124,1,0,100,1,0,107,2,0,114, + 53,0,121,16,0,116,0,0,106,1,0,131,0,0,125,1, + 0,87,110,22,0,4,116,2,0,107,10,0,114,52,0,1, + 1,1,100,2,0,83,89,110,1,0,88,121,17,0,116,3, + 0,106,4,0,124,1,0,25,125,2,0,87,110,46,0,4, + 116,5,0,107,10,0,114,118,0,1,1,1,124,0,0,106, + 6,0,124,1,0,131,1,0,125,2,0,124,2,0,116,3, + 0,106,4,0,124,1,0,60,89,110,1,0,88,124,2,0, + 83,41,3,122,210,71,101,116,32,116,104,101,32,102,105,110, 100,101,114,32,102,111,114,32,116,104,101,32,112,97,116,104, 32,101,110,116,114,121,32,102,114,111,109,32,115,121,115,46, 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, @@ -3378,864 +3364,854 @@ const unsigned char _Py_M__importlib[] = { 104,101,32,105,116,46,32,73,102,32,110,111,32,102,105,110, 100,101,114,32,105,115,32,97,118,97,105,108,97,98,108,101, 44,32,115,116,111,114,101,32,78,111,110,101,46,10,10,32, - 32,32,32,32,32,32,32,114,30,0,0,0,41,6,114,3, - 0,0,0,114,45,0,0,0,114,7,0,0,0,114,76,1, - 0,0,114,79,0,0,0,114,80,1,0,0,41,3,114,12, - 1,0,0,114,35,0,0,0,114,78,1,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,20,95,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,78,7,0,0,115,16,0,0,0,0,8,12,1,15, - 1,3,1,17,1,13,1,15,1,18,1,122,31,80,97,116, - 104,70,105,110,100,101,114,46,95,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,99,3,0,0, - 0,0,0,0,0,6,0,0,0,3,0,0,0,67,0,0, - 0,115,113,0,0,0,116,0,0,124,2,0,100,1,0,131, - 2,0,114,39,0,124,2,0,106,1,0,124,1,0,131,1, - 0,92,2,0,125,3,0,125,4,0,110,21,0,124,2,0, - 106,2,0,124,1,0,131,1,0,125,3,0,103,0,0,125, - 4,0,124,3,0,100,0,0,107,9,0,114,85,0,116,3, - 0,124,1,0,124,3,0,131,2,0,83,116,4,0,124,1, - 0,100,0,0,131,2,0,125,5,0,124,4,0,124,5,0, - 95,5,0,124,5,0,83,41,2,78,114,166,0,0,0,41, - 6,114,60,0,0,0,114,166,0,0,0,114,15,1,0,0, - 114,174,0,0,0,114,217,0,0,0,114,221,0,0,0,41, - 6,114,12,1,0,0,114,159,0,0,0,114,78,1,0,0, - 114,170,0,0,0,114,171,0,0,0,114,178,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,16, - 95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,99, - 95,7,0,0,115,18,0,0,0,0,4,15,1,24,2,15, - 1,6,1,12,1,13,1,15,1,9,1,122,27,80,97,116, - 104,70,105,110,100,101,114,46,95,108,101,103,97,99,121,95, - 103,101,116,95,115,112,101,99,78,99,4,0,0,0,0,0, - 0,0,9,0,0,0,5,0,0,0,67,0,0,0,115,252, - 0,0,0,103,0,0,125,4,0,120,239,0,124,2,0,68, - 93,203,0,125,5,0,116,0,0,124,5,0,116,1,0,116, - 2,0,102,2,0,131,2,0,115,46,0,113,13,0,110,0, - 0,124,0,0,106,3,0,124,5,0,131,1,0,125,6,0, - 124,6,0,100,1,0,107,9,0,114,13,0,116,4,0,124, - 6,0,100,2,0,131,2,0,114,109,0,124,6,0,106,5, - 0,124,1,0,124,3,0,131,2,0,125,7,0,110,18,0, - 124,0,0,106,6,0,124,1,0,124,6,0,131,2,0,125, - 7,0,124,7,0,100,1,0,107,8,0,114,145,0,113,13, - 0,110,0,0,124,7,0,106,7,0,100,1,0,107,9,0, - 114,164,0,124,7,0,83,124,7,0,106,8,0,125,8,0, - 124,8,0,100,1,0,107,8,0,114,200,0,116,9,0,100, - 3,0,131,1,0,130,1,0,110,0,0,124,4,0,106,10, - 0,124,8,0,131,1,0,1,113,13,0,113,13,0,87,116, - 11,0,124,1,0,100,1,0,131,2,0,125,7,0,124,4, - 0,124,7,0,95,8,0,124,7,0,83,100,1,0,83,41, - 4,122,63,70,105,110,100,32,116,104,101,32,108,111,97,100, - 101,114,32,111,114,32,110,97,109,101,115,112,97,99,101,95, - 112,97,116,104,32,102,111,114,32,116,104,105,115,32,109,111, - 100,117,108,101,47,112,97,99,107,97,103,101,32,110,97,109, - 101,46,78,114,14,1,0,0,122,19,115,112,101,99,32,109, - 105,115,115,105,110,103,32,108,111,97,100,101,114,41,12,114, - 193,0,0,0,218,3,115,116,114,218,5,98,121,116,101,115, - 114,81,1,0,0,114,60,0,0,0,114,14,1,0,0,114, - 82,1,0,0,114,170,0,0,0,114,221,0,0,0,114,154, - 0,0,0,114,198,0,0,0,114,217,0,0,0,41,9,114, - 12,1,0,0,114,159,0,0,0,114,35,0,0,0,114,13, - 1,0,0,218,14,110,97,109,101,115,112,97,99,101,95,112, - 97,116,104,90,5,101,110,116,114,121,114,78,1,0,0,114, - 178,0,0,0,114,171,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,9,95,103,101,116,95,115, - 112,101,99,110,7,0,0,115,40,0,0,0,0,5,6,1, - 13,1,21,1,6,1,15,1,12,1,15,1,21,2,18,1, - 12,1,6,1,15,1,4,1,9,1,12,1,15,5,20,2, - 15,1,9,1,122,20,80,97,116,104,70,105,110,100,101,114, - 46,95,103,101,116,95,115,112,101,99,99,4,0,0,0,0, - 0,0,0,6,0,0,0,4,0,0,0,67,0,0,0,115, - 143,0,0,0,124,2,0,100,1,0,107,8,0,114,24,0, - 116,0,0,106,1,0,125,2,0,110,0,0,124,0,0,106, - 2,0,124,1,0,124,2,0,124,3,0,131,3,0,125,4, - 0,124,4,0,100,1,0,107,8,0,114,61,0,100,1,0, - 83,124,4,0,106,3,0,100,1,0,107,8,0,114,135,0, - 124,4,0,106,4,0,125,5,0,124,5,0,114,128,0,100, - 2,0,124,4,0,95,5,0,116,6,0,124,1,0,124,5, - 0,124,0,0,106,2,0,131,3,0,124,4,0,95,4,0, - 124,4,0,83,100,1,0,83,110,4,0,124,4,0,83,100, - 1,0,83,41,3,122,98,102,105,110,100,32,116,104,101,32, - 109,111,100,117,108,101,32,111,110,32,115,121,115,46,112,97, - 116,104,32,111,114,32,39,112,97,116,104,39,32,98,97,115, - 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, - 111,111,107,115,32,97,110,100,10,32,32,32,32,32,32,32, - 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,46,78,90,9,110,97,109,101, - 115,112,97,99,101,41,7,114,7,0,0,0,114,35,0,0, - 0,114,86,1,0,0,114,170,0,0,0,114,221,0,0,0, - 114,218,0,0,0,114,61,1,0,0,41,6,114,12,1,0, - 0,114,159,0,0,0,114,35,0,0,0,114,13,1,0,0, - 114,178,0,0,0,114,85,1,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,14,1,0,0,142,7, - 0,0,115,26,0,0,0,0,4,12,1,12,1,21,1,12, - 1,4,1,15,1,9,1,6,3,9,1,24,1,4,2,7, - 2,122,20,80,97,116,104,70,105,110,100,101,114,46,102,105, - 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, - 4,0,0,0,3,0,0,0,67,0,0,0,115,41,0,0, - 0,124,0,0,106,0,0,124,1,0,124,2,0,131,2,0, - 125,3,0,124,3,0,100,1,0,107,8,0,114,34,0,100, - 1,0,83,124,3,0,106,1,0,83,41,2,122,170,102,105, - 110,100,32,116,104,101,32,109,111,100,117,108,101,32,111,110, - 32,115,121,115,46,112,97,116,104,32,111,114,32,39,112,97, - 116,104,39,32,98,97,115,101,100,32,111,110,32,115,121,115, - 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,10, - 32,32,32,32,32,32,32,32,115,121,115,46,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, - 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,115, - 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,78,41,2,114,14,1,0,0, - 114,170,0,0,0,41,4,114,12,1,0,0,114,159,0,0, - 0,114,35,0,0,0,114,178,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,15,1,0,0,164, - 7,0,0,115,8,0,0,0,0,8,18,1,12,1,4,1, - 122,22,80,97,116,104,70,105,110,100,101,114,46,102,105,110, - 100,95,109,111,100,117,108,101,41,12,114,57,0,0,0,114, - 56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,19, - 1,0,0,114,75,1,0,0,114,80,1,0,0,114,81,1, - 0,0,114,82,1,0,0,114,86,1,0,0,114,14,1,0, - 0,114,15,1,0,0,114,4,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,74,1,0,0,49, - 7,0,0,115,22,0,0,0,12,2,6,2,18,8,18,17, - 18,17,18,15,3,1,18,31,3,1,21,21,3,1,114,74, - 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,64,0,0,0,115,133,0,0,0,101,0,0, - 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, - 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, - 0,132,0,0,90,5,0,101,6,0,90,7,0,100,6,0, - 100,7,0,132,0,0,90,8,0,100,8,0,100,9,0,132, - 0,0,90,9,0,100,10,0,100,11,0,100,12,0,132,1, - 0,90,10,0,100,13,0,100,14,0,132,0,0,90,11,0, - 101,12,0,100,15,0,100,16,0,132,0,0,131,1,0,90, - 13,0,100,17,0,100,18,0,132,0,0,90,14,0,100,10, - 0,83,41,19,218,10,70,105,108,101,70,105,110,100,101,114, - 122,172,70,105,108,101,45,98,97,115,101,100,32,102,105,110, - 100,101,114,46,10,10,32,32,32,32,73,110,116,101,114,97, - 99,116,105,111,110,115,32,119,105,116,104,32,116,104,101,32, - 102,105,108,101,32,115,121,115,116,101,109,32,97,114,101,32, - 99,97,99,104,101,100,32,102,111,114,32,112,101,114,102,111, - 114,109,97,110,99,101,44,32,98,101,105,110,103,10,32,32, - 32,32,114,101,102,114,101,115,104,101,100,32,119,104,101,110, - 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,116, - 104,101,32,102,105,110,100,101,114,32,105,115,32,104,97,110, - 100,108,105,110,103,32,104,97,115,32,98,101,101,110,32,109, - 111,100,105,102,105,101,100,46,10,10,32,32,32,32,99,2, - 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,7, - 0,0,0,115,122,0,0,0,103,0,0,125,3,0,120,52, - 0,124,2,0,68,93,44,0,92,2,0,137,0,0,125,4, - 0,124,3,0,106,0,0,135,0,0,102,1,0,100,1,0, - 100,2,0,134,0,0,124,4,0,68,131,1,0,131,1,0, - 1,113,13,0,87,124,3,0,124,0,0,95,1,0,124,1, - 0,112,79,0,100,3,0,124,0,0,95,2,0,100,6,0, - 124,0,0,95,3,0,116,4,0,131,0,0,124,0,0,95, - 5,0,116,4,0,131,0,0,124,0,0,95,6,0,100,5, - 0,83,41,7,122,154,73,110,105,116,105,97,108,105,122,101, - 32,119,105,116,104,32,116,104,101,32,112,97,116,104,32,116, - 111,32,115,101,97,114,99,104,32,111,110,32,97,110,100,32, - 97,32,118,97,114,105,97,98,108,101,32,110,117,109,98,101, - 114,32,111,102,10,32,32,32,32,32,32,32,32,50,45,116, - 117,112,108,101,115,32,99,111,110,116,97,105,110,105,110,103, - 32,116,104,101,32,108,111,97,100,101,114,32,97,110,100,32, - 116,104,101,32,102,105,108,101,32,115,117,102,102,105,120,101, - 115,32,116,104,101,32,108,111,97,100,101,114,10,32,32,32, - 32,32,32,32,32,114,101,99,111,103,110,105,122,101,115,46, - 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,51,0,0,0,115,27,0,0,0,124,0,0,93,17,0, - 125,1,0,124,1,0,136,0,0,102,2,0,86,1,113,3, - 0,100,0,0,83,41,1,78,114,4,0,0,0,41,2,114, - 22,0,0,0,114,58,1,0,0,41,1,114,170,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,193, - 7,0,0,115,2,0,0,0,6,0,122,38,70,105,108,101, - 70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,46, - 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, - 114,62,114,116,0,0,0,114,29,0,0,0,78,114,139,0, - 0,0,41,7,114,198,0,0,0,218,8,95,108,111,97,100, - 101,114,115,114,35,0,0,0,218,11,95,112,97,116,104,95, - 109,116,105,109,101,218,3,115,101,116,218,11,95,112,97,116, - 104,95,99,97,99,104,101,218,19,95,114,101,108,97,120,101, - 100,95,112,97,116,104,95,99,97,99,104,101,41,5,114,71, - 0,0,0,114,35,0,0,0,218,14,108,111,97,100,101,114, - 95,100,101,116,97,105,108,115,90,7,108,111,97,100,101,114, - 115,114,126,0,0,0,114,4,0,0,0,41,1,114,170,0, - 0,0,114,5,0,0,0,114,72,0,0,0,187,7,0,0, - 115,16,0,0,0,0,4,6,1,19,1,36,1,9,2,15, - 1,9,1,12,1,122,19,70,105,108,101,70,105,110,100,101, - 114,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, - 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, - 13,0,0,0,100,3,0,124,0,0,95,0,0,100,2,0, - 83,41,4,122,31,73,110,118,97,108,105,100,97,116,101,32, - 116,104,101,32,100,105,114,101,99,116,111,114,121,32,109,116, - 105,109,101,46,114,29,0,0,0,78,114,139,0,0,0,41, - 1,114,89,1,0,0,41,1,114,71,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,75,1,0, - 0,201,7,0,0,115,2,0,0,0,0,2,122,28,70,105, - 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, - 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, - 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, - 59,0,0,0,124,0,0,106,0,0,124,1,0,131,1,0, - 125,2,0,124,2,0,100,1,0,107,8,0,114,37,0,100, - 1,0,103,0,0,102,2,0,83,124,2,0,106,1,0,124, - 2,0,106,2,0,112,55,0,103,0,0,102,2,0,83,41, - 2,122,197,84,114,121,32,116,111,32,102,105,110,100,32,97, - 32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, - 44,32,111,114,32,116,104,101,32,110,97,109,101,115,112,97, - 99,101,10,32,32,32,32,32,32,32,32,112,97,99,107,97, - 103,101,32,112,111,114,116,105,111,110,115,46,32,82,101,116, - 117,114,110,115,32,40,108,111,97,100,101,114,44,32,108,105, - 115,116,45,111,102,45,112,111,114,116,105,111,110,115,41,46, - 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,115, - 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,78,41,3,114,14,1,0,0, - 114,170,0,0,0,114,221,0,0,0,41,3,114,71,0,0, - 0,114,159,0,0,0,114,178,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,166,0,0,0,207, - 7,0,0,115,8,0,0,0,0,7,15,1,12,1,10,1, - 122,22,70,105,108,101,70,105,110,100,101,114,46,102,105,110, - 100,95,108,111,97,100,101,114,99,6,0,0,0,0,0,0, - 0,7,0,0,0,7,0,0,0,67,0,0,0,115,40,0, - 0,0,124,1,0,124,2,0,124,3,0,131,2,0,125,6, - 0,116,0,0,124,2,0,124,3,0,100,1,0,124,6,0, - 100,2,0,124,4,0,131,2,2,83,41,3,78,114,170,0, - 0,0,114,221,0,0,0,41,1,114,240,0,0,0,41,7, - 114,71,0,0,0,114,244,0,0,0,114,159,0,0,0,114, - 35,0,0,0,114,229,0,0,0,114,13,1,0,0,114,170, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,86,1,0,0,219,7,0,0,115,6,0,0,0, - 0,1,15,1,18,1,122,20,70,105,108,101,70,105,110,100, - 101,114,46,95,103,101,116,95,115,112,101,99,78,99,3,0, - 0,0,0,0,0,0,14,0,0,0,15,0,0,0,67,0, - 0,0,115,240,1,0,0,100,1,0,125,3,0,124,1,0, - 106,0,0,100,2,0,131,1,0,100,3,0,25,125,4,0, - 121,34,0,116,1,0,124,0,0,106,2,0,112,49,0,116, - 3,0,106,4,0,131,0,0,131,1,0,106,5,0,125,5, - 0,87,110,24,0,4,116,6,0,107,10,0,114,85,0,1, - 1,1,100,10,0,125,5,0,89,110,1,0,88,124,5,0, - 124,0,0,106,7,0,107,3,0,114,123,0,124,0,0,106, - 8,0,131,0,0,1,124,5,0,124,0,0,95,7,0,110, - 0,0,116,9,0,131,0,0,114,156,0,124,0,0,106,10, - 0,125,6,0,124,4,0,106,11,0,131,0,0,125,7,0, - 110,15,0,124,0,0,106,12,0,125,6,0,124,4,0,125, - 7,0,124,7,0,124,6,0,107,6,0,114,51,1,116,13, - 0,124,0,0,106,2,0,124,4,0,131,2,0,125,8,0, - 120,103,0,124,0,0,106,14,0,68,93,77,0,92,2,0, - 125,9,0,125,10,0,100,5,0,124,9,0,23,125,11,0, - 116,13,0,124,8,0,124,11,0,131,2,0,125,12,0,116, - 15,0,124,12,0,131,1,0,114,211,0,124,0,0,106,16, - 0,124,10,0,124,1,0,124,12,0,124,8,0,103,1,0, - 124,2,0,131,5,0,83,113,211,0,87,116,17,0,124,8, - 0,131,1,0,125,3,0,110,0,0,120,126,0,124,0,0, - 106,14,0,68,93,115,0,92,2,0,125,9,0,125,10,0, - 116,13,0,124,0,0,106,2,0,124,4,0,124,9,0,23, - 131,2,0,125,12,0,116,18,0,100,6,0,106,19,0,124, - 12,0,131,1,0,100,7,0,100,3,0,131,1,1,1,124, - 7,0,124,9,0,23,124,6,0,107,6,0,114,61,1,116, - 15,0,124,12,0,131,1,0,114,176,1,124,0,0,106,16, - 0,124,10,0,124,1,0,124,12,0,100,8,0,124,2,0, - 131,5,0,83,113,61,1,113,61,1,87,124,3,0,114,236, - 1,116,18,0,100,9,0,106,19,0,124,8,0,131,1,0, - 131,1,0,1,116,20,0,124,1,0,100,8,0,131,2,0, - 125,13,0,124,8,0,103,1,0,124,13,0,95,21,0,124, - 13,0,83,100,8,0,83,41,11,122,125,84,114,121,32,116, - 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, - 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, - 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, - 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, - 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, - 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, - 114,116,105,111,110,115,41,46,70,114,116,0,0,0,114,115, - 0,0,0,114,29,0,0,0,114,72,0,0,0,122,9,116, - 114,121,105,110,103,32,123,125,114,146,0,0,0,78,122,25, - 112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97, - 99,101,32,102,111,114,32,123,125,114,139,0,0,0,41,22, - 114,32,0,0,0,114,39,0,0,0,114,35,0,0,0,114, - 3,0,0,0,114,45,0,0,0,114,54,1,0,0,114,40, - 0,0,0,114,89,1,0,0,218,11,95,102,105,108,108,95, - 99,97,99,104,101,114,6,0,0,0,114,92,1,0,0,114, - 140,0,0,0,114,91,1,0,0,114,28,0,0,0,114,88, - 1,0,0,114,44,0,0,0,114,86,1,0,0,114,46,0, - 0,0,114,153,0,0,0,114,47,0,0,0,114,217,0,0, - 0,114,221,0,0,0,41,14,114,71,0,0,0,114,159,0, - 0,0,114,13,1,0,0,90,12,105,115,95,110,97,109,101, - 115,112,97,99,101,90,11,116,97,105,108,95,109,111,100,117, - 108,101,114,184,0,0,0,90,5,99,97,99,104,101,90,12, - 99,97,99,104,101,95,109,111,100,117,108,101,90,9,98,97, - 115,101,95,112,97,116,104,114,58,1,0,0,114,244,0,0, - 0,90,13,105,110,105,116,95,102,105,108,101,110,97,109,101, - 90,9,102,117,108,108,95,112,97,116,104,114,178,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 14,1,0,0,224,7,0,0,115,68,0,0,0,0,3,6, - 1,19,1,3,1,34,1,13,1,11,1,15,1,10,1,12, - 2,9,1,9,1,15,2,9,1,6,2,12,1,18,1,22, - 1,10,1,15,1,12,1,32,4,15,2,22,1,22,1,25, - 1,16,1,12,1,32,1,6,1,19,1,15,1,12,1,4, - 1,122,20,70,105,108,101,70,105,110,100,101,114,46,102,105, - 110,100,95,115,112,101,99,99,1,0,0,0,0,0,0,0, - 9,0,0,0,13,0,0,0,67,0,0,0,115,14,1,0, - 0,124,0,0,106,0,0,125,1,0,121,31,0,116,1,0, - 106,2,0,124,1,0,112,33,0,116,1,0,106,3,0,131, - 0,0,131,1,0,125,2,0,87,110,33,0,4,116,4,0, - 116,5,0,116,6,0,102,3,0,107,10,0,114,75,0,1, - 1,1,103,0,0,125,2,0,89,110,1,0,88,116,7,0, - 106,8,0,106,9,0,100,1,0,131,1,0,115,112,0,116, - 10,0,124,2,0,131,1,0,124,0,0,95,11,0,110,111, - 0,116,10,0,131,0,0,125,3,0,120,90,0,124,2,0, - 68,93,82,0,125,4,0,124,4,0,106,12,0,100,2,0, - 131,1,0,92,3,0,125,5,0,125,6,0,125,7,0,124, - 6,0,114,191,0,100,3,0,106,13,0,124,5,0,124,7, - 0,106,14,0,131,0,0,131,2,0,125,8,0,110,6,0, - 124,5,0,125,8,0,124,3,0,106,15,0,124,8,0,131, - 1,0,1,113,128,0,87,124,3,0,124,0,0,95,11,0, - 116,7,0,106,8,0,106,9,0,116,16,0,131,1,0,114, - 10,1,100,4,0,100,5,0,132,0,0,124,2,0,68,131, - 1,0,124,0,0,95,17,0,110,0,0,100,6,0,83,41, - 7,122,68,70,105,108,108,32,116,104,101,32,99,97,99,104, - 101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109, - 111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97, - 103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114, - 101,99,116,111,114,121,46,114,0,0,0,0,114,116,0,0, - 0,122,5,123,125,46,123,125,99,1,0,0,0,0,0,0, - 0,2,0,0,0,3,0,0,0,83,0,0,0,115,28,0, - 0,0,104,0,0,124,0,0,93,18,0,125,1,0,124,1, - 0,106,0,0,131,0,0,146,2,0,113,6,0,83,114,4, - 0,0,0,41,1,114,140,0,0,0,41,2,114,22,0,0, - 0,90,2,102,110,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,250,9,60,115,101,116,99,111,109,112,62,42, - 8,0,0,115,2,0,0,0,9,0,122,41,70,105,108,101, - 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99, - 104,101,46,60,108,111,99,97,108,115,62,46,60,115,101,116, - 99,111,109,112,62,78,41,18,114,35,0,0,0,114,3,0, - 0,0,90,7,108,105,115,116,100,105,114,114,45,0,0,0, - 218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,114, - 114,111,114,218,15,80,101,114,109,105,115,115,105,111,110,69, - 114,114,111,114,218,18,78,111,116,65,68,105,114,101,99,116, - 111,114,121,69,114,114,111,114,114,7,0,0,0,114,8,0, - 0,0,114,9,0,0,0,114,90,1,0,0,114,91,1,0, - 0,114,134,0,0,0,114,47,0,0,0,114,140,0,0,0, - 218,3,97,100,100,114,10,0,0,0,114,92,1,0,0,41, - 9,114,71,0,0,0,114,35,0,0,0,90,8,99,111,110, - 116,101,110,116,115,90,21,108,111,119,101,114,95,115,117,102, - 102,105,120,95,99,111,110,116,101,110,116,115,114,72,1,0, - 0,114,67,0,0,0,114,66,1,0,0,114,58,1,0,0, - 90,8,110,101,119,95,110,97,109,101,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,94,1,0,0,13,8, - 0,0,115,34,0,0,0,0,2,9,1,3,1,31,1,22, - 3,11,3,18,1,18,7,9,1,13,1,24,1,6,1,27, - 2,6,1,17,1,9,1,18,1,122,22,70,105,108,101,70, + 32,32,32,32,32,32,32,114,30,0,0,0,78,41,7,114, + 3,0,0,0,114,45,0,0,0,218,17,70,105,108,101,78, + 111,116,70,111,117,110,100,69,114,114,111,114,114,7,0,0, + 0,114,78,1,0,0,114,79,0,0,0,114,82,1,0,0, + 41,3,114,13,1,0,0,114,35,0,0,0,114,80,1,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,20,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,70,7,0,0,115,22,0,0,0,0, + 8,12,1,3,1,16,1,13,3,9,1,3,1,17,1,13, + 1,15,1,18,1,122,31,80,97,116,104,70,105,110,100,101, + 114,46,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,99,3,0,0,0,0,0,0,0,6, + 0,0,0,3,0,0,0,67,0,0,0,115,113,0,0,0, + 116,0,0,124,2,0,100,1,0,131,2,0,114,39,0,124, + 2,0,106,1,0,124,1,0,131,1,0,92,2,0,125,3, + 0,125,4,0,110,21,0,124,2,0,106,2,0,124,1,0, + 131,1,0,125,3,0,103,0,0,125,4,0,124,3,0,100, + 0,0,107,9,0,114,85,0,116,3,0,124,1,0,124,3, + 0,131,2,0,83,116,4,0,124,1,0,100,0,0,131,2, + 0,125,5,0,124,4,0,124,5,0,95,5,0,124,5,0, + 83,41,2,78,114,171,0,0,0,41,6,114,60,0,0,0, + 114,171,0,0,0,114,16,1,0,0,114,177,0,0,0,114, + 220,0,0,0,114,224,0,0,0,41,6,114,13,1,0,0, + 114,164,0,0,0,114,80,1,0,0,114,173,0,0,0,114, + 174,0,0,0,114,180,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,16,95,108,101,103,97,99, + 121,95,103,101,116,95,115,112,101,99,92,7,0,0,115,18, + 0,0,0,0,4,15,1,24,2,15,1,6,1,12,1,13, + 1,15,1,9,1,122,27,80,97,116,104,70,105,110,100,101, + 114,46,95,108,101,103,97,99,121,95,103,101,116,95,115,112, + 101,99,78,99,4,0,0,0,0,0,0,0,9,0,0,0, + 5,0,0,0,67,0,0,0,115,240,0,0,0,103,0,0, + 125,4,0,120,227,0,124,2,0,68,93,191,0,125,5,0, + 116,0,0,124,5,0,116,1,0,116,2,0,102,2,0,131, + 2,0,115,43,0,113,13,0,124,0,0,106,3,0,124,5, + 0,131,1,0,125,6,0,124,6,0,100,1,0,107,9,0, + 114,13,0,116,4,0,124,6,0,100,2,0,131,2,0,114, + 106,0,124,6,0,106,5,0,124,1,0,124,3,0,131,2, + 0,125,7,0,110,18,0,124,0,0,106,6,0,124,1,0, + 124,6,0,131,2,0,125,7,0,124,7,0,100,1,0,107, + 8,0,114,139,0,113,13,0,124,7,0,106,7,0,100,1, + 0,107,9,0,114,158,0,124,7,0,83,124,7,0,106,8, + 0,125,8,0,124,8,0,100,1,0,107,8,0,114,191,0, + 116,9,0,100,3,0,131,1,0,130,1,0,124,4,0,106, + 10,0,124,8,0,131,1,0,1,113,13,0,87,116,11,0, + 124,1,0,100,1,0,131,2,0,125,7,0,124,4,0,124, + 7,0,95,8,0,124,7,0,83,100,1,0,83,41,4,122, + 63,70,105,110,100,32,116,104,101,32,108,111,97,100,101,114, + 32,111,114,32,110,97,109,101,115,112,97,99,101,95,112,97, + 116,104,32,102,111,114,32,116,104,105,115,32,109,111,100,117, + 108,101,47,112,97,99,107,97,103,101,32,110,97,109,101,46, + 78,114,15,1,0,0,122,19,115,112,101,99,32,109,105,115, + 115,105,110,103,32,108,111,97,100,101,114,41,12,114,194,0, + 0,0,114,127,0,0,0,218,5,98,121,116,101,115,114,84, + 1,0,0,114,60,0,0,0,114,15,1,0,0,114,85,1, + 0,0,114,173,0,0,0,114,224,0,0,0,114,159,0,0, + 0,114,199,0,0,0,114,220,0,0,0,41,9,114,13,1, + 0,0,114,164,0,0,0,114,35,0,0,0,114,14,1,0, + 0,218,14,110,97,109,101,115,112,97,99,101,95,112,97,116, + 104,90,5,101,110,116,114,121,114,80,1,0,0,114,180,0, + 0,0,114,174,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,9,95,103,101,116,95,115,112,101, + 99,107,7,0,0,115,40,0,0,0,0,5,6,1,13,1, + 21,1,3,1,15,1,12,1,15,1,21,2,18,1,12,1, + 3,1,15,1,4,1,9,1,12,1,12,5,17,2,15,1, + 9,1,122,20,80,97,116,104,70,105,110,100,101,114,46,95, + 103,101,116,95,115,112,101,99,99,4,0,0,0,0,0,0, + 0,6,0,0,0,4,0,0,0,67,0,0,0,115,140,0, + 0,0,124,2,0,100,1,0,107,8,0,114,21,0,116,0, + 0,106,1,0,125,2,0,124,0,0,106,2,0,124,1,0, + 124,2,0,124,3,0,131,3,0,125,4,0,124,4,0,100, + 1,0,107,8,0,114,58,0,100,1,0,83,124,4,0,106, + 3,0,100,1,0,107,8,0,114,132,0,124,4,0,106,4, + 0,125,5,0,124,5,0,114,125,0,100,2,0,124,4,0, + 95,5,0,116,6,0,124,1,0,124,5,0,124,0,0,106, + 2,0,131,3,0,124,4,0,95,4,0,124,4,0,83,100, + 1,0,83,110,4,0,124,4,0,83,100,1,0,83,41,3, + 122,98,102,105,110,100,32,116,104,101,32,109,111,100,117,108, + 101,32,111,110,32,115,121,115,46,112,97,116,104,32,111,114, + 32,39,112,97,116,104,39,32,98,97,115,101,100,32,111,110, + 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, + 97,110,100,10,32,32,32,32,32,32,32,32,115,121,115,46, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,46,78,90,9,110,97,109,101,115,112,97,99,101, + 41,7,114,7,0,0,0,114,35,0,0,0,114,88,1,0, + 0,114,173,0,0,0,114,224,0,0,0,114,221,0,0,0, + 114,63,1,0,0,41,6,114,13,1,0,0,114,164,0,0, + 0,114,35,0,0,0,114,14,1,0,0,114,180,0,0,0, + 114,87,1,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,15,1,0,0,139,7,0,0,115,26,0, + 0,0,0,4,12,1,9,1,21,1,12,1,4,1,15,1, + 9,1,6,3,9,1,24,1,4,2,7,2,122,20,80,97, + 116,104,70,105,110,100,101,114,46,102,105,110,100,95,115,112, + 101,99,99,3,0,0,0,0,0,0,0,4,0,0,0,3, + 0,0,0,67,0,0,0,115,41,0,0,0,124,0,0,106, + 0,0,124,1,0,124,2,0,131,2,0,125,3,0,124,3, + 0,100,1,0,107,8,0,114,34,0,100,1,0,83,124,3, + 0,106,1,0,83,41,2,122,170,102,105,110,100,32,116,104, + 101,32,109,111,100,117,108,101,32,111,110,32,115,121,115,46, + 112,97,116,104,32,111,114,32,39,112,97,116,104,39,32,98, + 97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,104, + 95,104,111,111,107,115,32,97,110,100,10,32,32,32,32,32, + 32,32,32,115,121,115,46,112,97,116,104,95,105,109,112,111, + 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, + 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, + 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, + 32,32,32,78,41,2,114,15,1,0,0,114,173,0,0,0, + 41,4,114,13,1,0,0,114,164,0,0,0,114,35,0,0, + 0,114,180,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,16,1,0,0,161,7,0,0,115,8, + 0,0,0,0,8,18,1,12,1,4,1,122,22,80,97,116, + 104,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, + 117,108,101,41,12,114,57,0,0,0,114,56,0,0,0,114, + 58,0,0,0,114,59,0,0,0,114,20,1,0,0,114,77, + 1,0,0,114,82,1,0,0,114,84,1,0,0,114,85,1, + 0,0,114,88,1,0,0,114,15,1,0,0,114,16,1,0, + 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,76,1,0,0,41,7,0,0,115,22, + 0,0,0,12,2,6,2,18,8,18,17,18,22,18,15,3, + 1,18,31,3,1,21,21,3,1,114,76,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, + 0,0,0,115,133,0,0,0,101,0,0,90,1,0,100,0, + 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, + 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, + 5,0,101,6,0,90,7,0,100,6,0,100,7,0,132,0, + 0,90,8,0,100,8,0,100,9,0,132,0,0,90,9,0, + 100,10,0,100,11,0,100,12,0,132,1,0,90,10,0,100, + 13,0,100,14,0,132,0,0,90,11,0,101,12,0,100,15, + 0,100,16,0,132,0,0,131,1,0,90,13,0,100,17,0, + 100,18,0,132,0,0,90,14,0,100,10,0,83,41,19,218, + 10,70,105,108,101,70,105,110,100,101,114,122,172,70,105,108, + 101,45,98,97,115,101,100,32,102,105,110,100,101,114,46,10, + 10,32,32,32,32,73,110,116,101,114,97,99,116,105,111,110, + 115,32,119,105,116,104,32,116,104,101,32,102,105,108,101,32, + 115,121,115,116,101,109,32,97,114,101,32,99,97,99,104,101, + 100,32,102,111,114,32,112,101,114,102,111,114,109,97,110,99, + 101,44,32,98,101,105,110,103,10,32,32,32,32,114,101,102, + 114,101,115,104,101,100,32,119,104,101,110,32,116,104,101,32, + 100,105,114,101,99,116,111,114,121,32,116,104,101,32,102,105, + 110,100,101,114,32,105,115,32,104,97,110,100,108,105,110,103, + 32,104,97,115,32,98,101,101,110,32,109,111,100,105,102,105, + 101,100,46,10,10,32,32,32,32,99,2,0,0,0,0,0, + 0,0,5,0,0,0,5,0,0,0,7,0,0,0,115,122, + 0,0,0,103,0,0,125,3,0,120,52,0,124,2,0,68, + 93,44,0,92,2,0,137,0,0,125,4,0,124,3,0,106, + 0,0,135,0,0,102,1,0,100,1,0,100,2,0,134,0, + 0,124,4,0,68,131,1,0,131,1,0,1,113,13,0,87, + 124,3,0,124,0,0,95,1,0,124,1,0,112,79,0,100, + 3,0,124,0,0,95,2,0,100,6,0,124,0,0,95,3, + 0,116,4,0,131,0,0,124,0,0,95,5,0,116,4,0, + 131,0,0,124,0,0,95,6,0,100,5,0,83,41,7,122, + 154,73,110,105,116,105,97,108,105,122,101,32,119,105,116,104, + 32,116,104,101,32,112,97,116,104,32,116,111,32,115,101,97, + 114,99,104,32,111,110,32,97,110,100,32,97,32,118,97,114, + 105,97,98,108,101,32,110,117,109,98,101,114,32,111,102,10, + 32,32,32,32,32,32,32,32,50,45,116,117,112,108,101,115, + 32,99,111,110,116,97,105,110,105,110,103,32,116,104,101,32, + 108,111,97,100,101,114,32,97,110,100,32,116,104,101,32,102, + 105,108,101,32,115,117,102,102,105,120,101,115,32,116,104,101, + 32,108,111,97,100,101,114,10,32,32,32,32,32,32,32,32, + 114,101,99,111,103,110,105,122,101,115,46,99,1,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,0, + 115,27,0,0,0,124,0,0,93,17,0,125,1,0,124,1, + 0,136,0,0,102,2,0,86,1,113,3,0,100,0,0,83, + 41,1,78,114,4,0,0,0,41,2,114,22,0,0,0,114, + 60,1,0,0,41,1,114,173,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,77,0,0,0,190,7,0,0,115,2, + 0,0,0,6,0,122,38,70,105,108,101,70,105,110,100,101, + 114,46,95,95,105,110,105,116,95,95,46,60,108,111,99,97, + 108,115,62,46,60,103,101,110,101,120,112,114,62,114,117,0, + 0,0,114,29,0,0,0,78,114,145,0,0,0,41,7,114, + 199,0,0,0,218,8,95,108,111,97,100,101,114,115,114,35, + 0,0,0,218,11,95,112,97,116,104,95,109,116,105,109,101, + 218,3,115,101,116,218,11,95,112,97,116,104,95,99,97,99, + 104,101,218,19,95,114,101,108,97,120,101,100,95,112,97,116, + 104,95,99,97,99,104,101,41,5,114,71,0,0,0,114,35, + 0,0,0,218,14,108,111,97,100,101,114,95,100,101,116,97, + 105,108,115,90,7,108,111,97,100,101,114,115,114,247,0,0, + 0,114,4,0,0,0,41,1,114,173,0,0,0,114,5,0, + 0,0,114,72,0,0,0,184,7,0,0,115,16,0,0,0, + 0,4,6,1,19,1,36,1,9,2,15,1,9,1,12,1, + 122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,105, + 110,105,116,95,95,99,1,0,0,0,0,0,0,0,1,0, + 0,0,2,0,0,0,67,0,0,0,115,13,0,0,0,100, + 3,0,124,0,0,95,0,0,100,2,0,83,41,4,122,31, + 73,110,118,97,108,105,100,97,116,101,32,116,104,101,32,100, + 105,114,101,99,116,111,114,121,32,109,116,105,109,101,46,114, + 29,0,0,0,78,114,145,0,0,0,41,1,114,91,1,0, + 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,77,1,0,0,198,7,0,0, + 115,2,0,0,0,0,2,122,28,70,105,108,101,70,105,110, + 100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,99, + 97,99,104,101,115,99,2,0,0,0,0,0,0,0,3,0, + 0,0,2,0,0,0,67,0,0,0,115,59,0,0,0,124, + 0,0,106,0,0,124,1,0,131,1,0,125,2,0,124,2, + 0,100,1,0,107,8,0,114,37,0,100,1,0,103,0,0, + 102,2,0,83,124,2,0,106,1,0,124,2,0,106,2,0, + 112,55,0,103,0,0,102,2,0,83,41,2,122,197,84,114, + 121,32,116,111,32,102,105,110,100,32,97,32,108,111,97,100, + 101,114,32,102,111,114,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,32,109,111,100,117,108,101,44,32,111,114,32, + 116,104,101,32,110,97,109,101,115,112,97,99,101,10,32,32, + 32,32,32,32,32,32,112,97,99,107,97,103,101,32,112,111, + 114,116,105,111,110,115,46,32,82,101,116,117,114,110,115,32, + 40,108,111,97,100,101,114,44,32,108,105,115,116,45,111,102, + 45,112,111,114,116,105,111,110,115,41,46,10,10,32,32,32, + 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, + 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, + 32,32,32,78,41,3,114,15,1,0,0,114,173,0,0,0, + 114,224,0,0,0,41,3,114,71,0,0,0,114,164,0,0, + 0,114,180,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,171,0,0,0,204,7,0,0,115,8, + 0,0,0,0,7,15,1,12,1,10,1,122,22,70,105,108, + 101,70,105,110,100,101,114,46,102,105,110,100,95,108,111,97, + 100,101,114,99,6,0,0,0,0,0,0,0,7,0,0,0, + 7,0,0,0,67,0,0,0,115,40,0,0,0,124,1,0, + 124,2,0,124,3,0,131,2,0,125,6,0,116,0,0,124, + 2,0,124,3,0,100,1,0,124,6,0,100,2,0,124,4, + 0,131,2,2,83,41,3,78,114,173,0,0,0,114,224,0, + 0,0,41,1,114,242,0,0,0,41,7,114,71,0,0,0, + 114,246,0,0,0,114,164,0,0,0,114,35,0,0,0,114, + 232,0,0,0,114,14,1,0,0,114,173,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,88,1, + 0,0,216,7,0,0,115,6,0,0,0,0,1,15,1,18, + 1,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, + 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, + 0,14,0,0,0,15,0,0,0,67,0,0,0,115,231,1, + 0,0,100,1,0,125,3,0,124,1,0,106,0,0,100,2, + 0,131,1,0,100,3,0,25,125,4,0,121,34,0,116,1, + 0,124,0,0,106,2,0,112,49,0,116,3,0,106,4,0, + 131,0,0,131,1,0,106,5,0,125,5,0,87,110,24,0, + 4,116,6,0,107,10,0,114,85,0,1,1,1,100,10,0, + 125,5,0,89,110,1,0,88,124,5,0,124,0,0,106,7, + 0,107,3,0,114,120,0,124,0,0,106,8,0,131,0,0, + 1,124,5,0,124,0,0,95,7,0,116,9,0,131,0,0, + 114,153,0,124,0,0,106,10,0,125,6,0,124,4,0,106, + 11,0,131,0,0,125,7,0,110,15,0,124,0,0,106,12, + 0,125,6,0,124,4,0,125,7,0,124,7,0,124,6,0, + 107,6,0,114,45,1,116,13,0,124,0,0,106,2,0,124, + 4,0,131,2,0,125,8,0,120,100,0,124,0,0,106,14, + 0,68,93,77,0,92,2,0,125,9,0,125,10,0,100,5, + 0,124,9,0,23,125,11,0,116,13,0,124,8,0,124,11, + 0,131,2,0,125,12,0,116,15,0,124,12,0,131,1,0, + 114,208,0,124,0,0,106,16,0,124,10,0,124,1,0,124, + 12,0,124,8,0,103,1,0,124,2,0,131,5,0,83,113, + 208,0,87,116,17,0,124,8,0,131,1,0,125,3,0,120, + 123,0,124,0,0,106,14,0,68,93,112,0,92,2,0,125, + 9,0,125,10,0,116,13,0,124,0,0,106,2,0,124,4, + 0,124,9,0,23,131,2,0,125,12,0,116,18,0,100,6, + 0,106,19,0,124,12,0,131,1,0,100,7,0,100,3,0, + 131,1,1,1,124,7,0,124,9,0,23,124,6,0,107,6, + 0,114,55,1,116,15,0,124,12,0,131,1,0,114,55,1, + 124,0,0,106,16,0,124,10,0,124,1,0,124,12,0,100, + 8,0,124,2,0,131,5,0,83,113,55,1,87,124,3,0, + 114,227,1,116,18,0,100,9,0,106,19,0,124,8,0,131, + 1,0,131,1,0,1,116,20,0,124,1,0,100,8,0,131, + 2,0,125,13,0,124,8,0,103,1,0,124,13,0,95,21, + 0,124,13,0,83,100,8,0,83,41,11,122,125,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, + 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116, + 104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32, + 32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114, + 116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40, + 108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45, + 112,111,114,116,105,111,110,115,41,46,70,114,117,0,0,0, + 114,115,0,0,0,114,29,0,0,0,114,72,0,0,0,122, + 9,116,114,121,105,110,103,32,123,125,114,152,0,0,0,78, + 122,25,112,111,115,115,105,98,108,101,32,110,97,109,101,115, + 112,97,99,101,32,102,111,114,32,123,125,114,145,0,0,0, + 41,22,114,32,0,0,0,114,39,0,0,0,114,35,0,0, + 0,114,3,0,0,0,114,45,0,0,0,114,56,1,0,0, + 114,40,0,0,0,114,91,1,0,0,218,11,95,102,105,108, + 108,95,99,97,99,104,101,114,6,0,0,0,114,94,1,0, + 0,114,146,0,0,0,114,93,1,0,0,114,28,0,0,0, + 114,90,1,0,0,114,44,0,0,0,114,88,1,0,0,114, + 46,0,0,0,114,158,0,0,0,114,47,0,0,0,114,220, + 0,0,0,114,224,0,0,0,41,14,114,71,0,0,0,114, + 164,0,0,0,114,14,1,0,0,90,12,105,115,95,110,97, + 109,101,115,112,97,99,101,90,11,116,97,105,108,95,109,111, + 100,117,108,101,114,185,0,0,0,90,5,99,97,99,104,101, + 90,12,99,97,99,104,101,95,109,111,100,117,108,101,90,9, + 98,97,115,101,95,112,97,116,104,114,60,1,0,0,114,246, + 0,0,0,90,13,105,110,105,116,95,102,105,108,101,110,97, + 109,101,90,9,102,117,108,108,95,112,97,116,104,114,180,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,15,1,0,0,221,7,0,0,115,68,0,0,0,0, + 3,6,1,19,1,3,1,34,1,13,1,11,1,15,1,10, + 1,9,2,9,1,9,1,15,2,9,1,6,2,12,1,18, + 1,22,1,10,1,15,1,12,1,32,4,12,2,22,1,22, + 1,25,1,16,1,12,1,29,1,6,1,19,1,15,1,12, + 1,4,1,122,20,70,105,108,101,70,105,110,100,101,114,46, + 102,105,110,100,95,115,112,101,99,99,1,0,0,0,0,0, + 0,0,9,0,0,0,13,0,0,0,67,0,0,0,115,11, + 1,0,0,124,0,0,106,0,0,125,1,0,121,31,0,116, + 1,0,106,2,0,124,1,0,112,33,0,116,1,0,106,3, + 0,131,0,0,131,1,0,125,2,0,87,110,33,0,4,116, + 4,0,116,5,0,116,6,0,102,3,0,107,10,0,114,75, + 0,1,1,1,103,0,0,125,2,0,89,110,1,0,88,116, + 7,0,106,8,0,106,9,0,100,1,0,131,1,0,115,112, + 0,116,10,0,124,2,0,131,1,0,124,0,0,95,11,0, + 110,111,0,116,10,0,131,0,0,125,3,0,120,90,0,124, + 2,0,68,93,82,0,125,4,0,124,4,0,106,12,0,100, + 2,0,131,1,0,92,3,0,125,5,0,125,6,0,125,7, + 0,124,6,0,114,191,0,100,3,0,106,13,0,124,5,0, + 124,7,0,106,14,0,131,0,0,131,2,0,125,8,0,110, + 6,0,124,5,0,125,8,0,124,3,0,106,15,0,124,8, + 0,131,1,0,1,113,128,0,87,124,3,0,124,0,0,95, + 11,0,116,7,0,106,8,0,106,9,0,116,16,0,131,1, + 0,114,7,1,100,4,0,100,5,0,132,0,0,124,2,0, + 68,131,1,0,124,0,0,95,17,0,100,6,0,83,41,7, + 122,68,70,105,108,108,32,116,104,101,32,99,97,99,104,101, + 32,111,102,32,112,111,116,101,110,116,105,97,108,32,109,111, + 100,117,108,101,115,32,97,110,100,32,112,97,99,107,97,103, + 101,115,32,102,111,114,32,116,104,105,115,32,100,105,114,101, + 99,116,111,114,121,46,114,0,0,0,0,114,117,0,0,0, + 122,5,123,125,46,123,125,99,1,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,83,0,0,0,115,28,0,0, + 0,104,0,0,124,0,0,93,18,0,125,1,0,124,1,0, + 106,0,0,131,0,0,146,2,0,113,6,0,83,114,4,0, + 0,0,41,1,114,146,0,0,0,41,2,114,22,0,0,0, + 90,2,102,110,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,250,9,60,115,101,116,99,111,109,112,62,39,8, + 0,0,115,2,0,0,0,9,0,122,41,70,105,108,101,70, 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, - 101,99,1,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,7,0,0,0,115,25,0,0,0,135,0,0,135,1, - 0,102,2,0,100,1,0,100,2,0,134,0,0,125,2,0, - 124,2,0,83,41,3,97,20,1,0,0,65,32,99,108,97, - 115,115,32,109,101,116,104,111,100,32,119,104,105,99,104,32, - 114,101,116,117,114,110,115,32,97,32,99,108,111,115,117,114, - 101,32,116,111,32,117,115,101,32,111,110,32,115,121,115,46, - 112,97,116,104,95,104,111,111,107,10,32,32,32,32,32,32, - 32,32,119,104,105,99,104,32,119,105,108,108,32,114,101,116, - 117,114,110,32,97,110,32,105,110,115,116,97,110,99,101,32, - 117,115,105,110,103,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,108,111,97,100,101,114,115,32,97,110,100,32, - 116,104,101,32,112,97,116,104,10,32,32,32,32,32,32,32, - 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, - 108,111,115,117,114,101,46,10,10,32,32,32,32,32,32,32, - 32,73,102,32,116,104,101,32,112,97,116,104,32,99,97,108, - 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117, - 114,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101, - 99,116,111,114,121,44,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,115,10,32,32,32,32,32,32,32,32,114,97, - 105,115,101,100,46,10,10,32,32,32,32,32,32,32,32,99, - 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, - 19,0,0,0,115,46,0,0,0,116,0,0,124,0,0,131, - 1,0,115,33,0,116,1,0,100,1,0,100,2,0,124,0, - 0,131,1,1,130,1,0,110,0,0,136,0,0,124,0,0, - 136,1,0,140,1,0,83,41,3,122,45,80,97,116,104,32, - 104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108, - 105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108, - 101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100, - 105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115, - 117,112,112,111,114,116,101,100,114,35,0,0,0,41,2,114, - 46,0,0,0,114,154,0,0,0,41,1,114,35,0,0,0, - 41,2,114,12,1,0,0,114,93,1,0,0,114,4,0,0, - 0,114,5,0,0,0,218,24,112,97,116,104,95,104,111,111, - 107,95,102,111,114,95,70,105,108,101,70,105,110,100,101,114, - 54,8,0,0,115,6,0,0,0,0,2,12,1,21,1,122, - 54,70,105,108,101,70,105,110,100,101,114,46,112,97,116,104, - 95,104,111,111,107,46,60,108,111,99,97,108,115,62,46,112, - 97,116,104,95,104,111,111,107,95,102,111,114,95,70,105,108, - 101,70,105,110,100,101,114,114,4,0,0,0,41,3,114,12, - 1,0,0,114,93,1,0,0,114,100,1,0,0,114,4,0, - 0,0,41,2,114,12,1,0,0,114,93,1,0,0,114,5, - 0,0,0,218,9,112,97,116,104,95,104,111,111,107,44,8, - 0,0,115,4,0,0,0,0,10,21,6,122,20,70,105,108, - 101,70,105,110,100,101,114,46,112,97,116,104,95,104,111,111, - 107,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,16,0,0,0,100,1,0,106,0, - 0,124,0,0,106,1,0,131,1,0,83,41,2,78,122,16, - 70,105,108,101,70,105,110,100,101,114,40,123,33,114,125,41, - 41,2,114,47,0,0,0,114,35,0,0,0,41,1,114,71, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,101,0,0,0,62,8,0,0,115,2,0,0,0, - 0,1,122,19,70,105,108,101,70,105,110,100,101,114,46,95, - 95,114,101,112,114,95,95,41,15,114,57,0,0,0,114,56, - 0,0,0,114,58,0,0,0,114,59,0,0,0,114,72,0, - 0,0,114,75,1,0,0,114,173,0,0,0,114,15,1,0, - 0,114,166,0,0,0,114,86,1,0,0,114,14,1,0,0, - 114,94,1,0,0,114,19,1,0,0,114,101,1,0,0,114, - 101,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,87,1,0,0,178,7,0, - 0,115,20,0,0,0,12,7,6,2,12,14,12,4,6,2, - 12,12,12,5,15,45,12,31,18,18,114,87,1,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 64,0,0,0,115,46,0,0,0,101,0,0,90,1,0,100, - 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, - 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, - 90,5,0,100,6,0,83,41,7,218,18,95,73,109,112,111, - 114,116,76,111,99,107,67,111,110,116,101,120,116,122,36,67, - 111,110,116,101,120,116,32,109,97,110,97,103,101,114,32,102, - 111,114,32,116,104,101,32,105,109,112,111,114,116,32,108,111, - 99,107,46,99,1,0,0,0,0,0,0,0,1,0,0,0, - 1,0,0,0,67,0,0,0,115,14,0,0,0,116,0,0, - 106,1,0,131,0,0,1,100,1,0,83,41,2,122,24,65, - 99,113,117,105,114,101,32,116,104,101,32,105,109,112,111,114, - 116,32,108,111,99,107,46,78,41,2,114,106,0,0,0,114, - 4,1,0,0,41,1,114,71,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,75,0,0,0,72, - 8,0,0,115,2,0,0,0,0,2,122,28,95,73,109,112, - 111,114,116,76,111,99,107,67,111,110,116,101,120,116,46,95, - 95,101,110,116,101,114,95,95,99,4,0,0,0,0,0,0, - 0,4,0,0,0,1,0,0,0,67,0,0,0,115,14,0, - 0,0,116,0,0,106,1,0,131,0,0,1,100,1,0,83, - 41,2,122,60,82,101,108,101,97,115,101,32,116,104,101,32, - 105,109,112,111,114,116,32,108,111,99,107,32,114,101,103,97, - 114,100,108,101,115,115,32,111,102,32,97,110,121,32,114,97, - 105,115,101,100,32,101,120,99,101,112,116,105,111,110,115,46, - 78,41,2,114,106,0,0,0,114,107,0,0,0,41,4,114, - 71,0,0,0,90,8,101,120,99,95,116,121,112,101,90,9, - 101,120,99,95,118,97,108,117,101,90,13,101,120,99,95,116, - 114,97,99,101,98,97,99,107,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,81,0,0,0,76,8,0,0, - 115,2,0,0,0,0,2,122,27,95,73,109,112,111,114,116, - 76,111,99,107,67,111,110,116,101,120,116,46,95,95,101,120, - 105,116,95,95,78,41,6,114,57,0,0,0,114,56,0,0, - 0,114,58,0,0,0,114,59,0,0,0,114,75,0,0,0, - 114,81,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,102,1,0,0,68,8, - 0,0,115,6,0,0,0,12,2,6,2,12,4,114,102,1, - 0,0,99,3,0,0,0,0,0,0,0,5,0,0,0,4, - 0,0,0,67,0,0,0,115,91,0,0,0,124,1,0,106, - 0,0,100,1,0,124,2,0,100,2,0,24,131,2,0,125, - 3,0,116,1,0,124,3,0,131,1,0,124,2,0,107,0, - 0,114,55,0,116,2,0,100,3,0,131,1,0,130,1,0, - 110,0,0,124,3,0,100,4,0,25,125,4,0,124,0,0, - 114,87,0,100,5,0,106,3,0,124,4,0,124,0,0,131, - 2,0,83,124,4,0,83,41,6,122,50,82,101,115,111,108, - 118,101,32,97,32,114,101,108,97,116,105,118,101,32,109,111, - 100,117,108,101,32,110,97,109,101,32,116,111,32,97,110,32, - 97,98,115,111,108,117,116,101,32,111,110,101,46,114,116,0, - 0,0,114,29,0,0,0,122,50,97,116,116,101,109,112,116, - 101,100,32,114,101,108,97,116,105,118,101,32,105,109,112,111, - 114,116,32,98,101,121,111,110,100,32,116,111,112,45,108,101, - 118,101,108,32,112,97,99,107,97,103,101,114,84,0,0,0, - 122,5,123,125,46,123,125,41,4,114,34,0,0,0,114,31, - 0,0,0,114,133,0,0,0,114,47,0,0,0,41,5,114, - 67,0,0,0,218,7,112,97,99,107,97,103,101,218,5,108, - 101,118,101,108,90,4,98,105,116,115,114,128,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,13, - 95,114,101,115,111,108,118,101,95,110,97,109,101,81,8,0, - 0,115,10,0,0,0,0,2,22,1,18,1,15,1,10,1, - 114,105,1,0,0,99,3,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,67,0,0,0,115,47,0,0,0,124, - 0,0,106,0,0,124,1,0,124,2,0,131,2,0,125,3, - 0,124,3,0,100,0,0,107,8,0,114,34,0,100,0,0, - 83,116,1,0,124,1,0,124,3,0,131,2,0,83,41,1, - 78,41,2,114,15,1,0,0,114,174,0,0,0,41,4,114, - 78,1,0,0,114,67,0,0,0,114,35,0,0,0,114,170, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,17,95,102,105,110,100,95,115,112,101,99,95,108, - 101,103,97,99,121,90,8,0,0,115,8,0,0,0,0,3, - 18,1,12,1,4,1,114,106,1,0,0,99,3,0,0,0, - 0,0,0,0,9,0,0,0,26,0,0,0,67,0,0,0, - 115,34,1,0,0,116,0,0,106,1,0,115,28,0,116,2, - 0,106,3,0,100,1,0,116,4,0,131,2,0,1,110,0, - 0,124,0,0,116,0,0,106,5,0,107,6,0,125,3,0, - 120,240,0,116,0,0,106,1,0,68,93,225,0,125,4,0, - 116,6,0,131,0,0,143,93,0,1,121,13,0,124,4,0, - 106,7,0,125,5,0,87,110,54,0,4,116,8,0,107,10, - 0,114,138,0,1,1,1,116,9,0,124,4,0,124,0,0, - 124,1,0,131,3,0,125,6,0,124,6,0,100,2,0,107, - 8,0,114,134,0,119,53,0,110,0,0,89,110,19,0,88, - 124,5,0,124,0,0,124,1,0,124,2,0,131,3,0,125, - 6,0,87,100,2,0,81,88,124,6,0,100,2,0,107,9, - 0,114,53,0,124,3,0,12,114,15,1,124,0,0,116,0, - 0,106,5,0,107,6,0,114,15,1,116,0,0,106,5,0, - 124,0,0,25,125,7,0,121,13,0,124,7,0,106,10,0, - 125,8,0,87,110,22,0,4,116,8,0,107,10,0,114,247, - 0,1,1,1,124,6,0,83,89,113,19,1,88,124,8,0, - 100,2,0,107,8,0,114,8,1,124,6,0,83,124,8,0, - 83,113,22,1,124,6,0,83,113,53,0,113,53,0,87,100, - 2,0,83,100,2,0,83,41,3,122,23,70,105,110,100,32, - 97,32,109,111,100,117,108,101,39,115,32,108,111,97,100,101, - 114,46,122,22,115,121,115,46,109,101,116,97,95,112,97,116, - 104,32,105,115,32,101,109,112,116,121,78,41,11,114,7,0, - 0,0,218,9,109,101,116,97,95,112,97,116,104,114,167,0, - 0,0,114,168,0,0,0,114,169,0,0,0,114,73,0,0, - 0,114,102,1,0,0,114,14,1,0,0,114,210,0,0,0, - 114,106,1,0,0,114,209,0,0,0,41,9,114,67,0,0, - 0,114,35,0,0,0,114,13,1,0,0,90,9,105,115,95, - 114,101,108,111,97,100,114,78,1,0,0,114,14,1,0,0, - 114,178,0,0,0,114,180,0,0,0,114,209,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,10, - 95,102,105,110,100,95,115,112,101,99,99,8,0,0,115,48, - 0,0,0,0,2,9,1,19,4,15,1,16,1,10,1,3, - 1,13,1,13,1,18,1,12,1,11,2,24,1,12,2,22, - 1,13,1,3,1,13,1,13,4,9,2,12,1,4,2,7, - 2,11,2,114,108,1,0,0,99,3,0,0,0,0,0,0, - 0,4,0,0,0,4,0,0,0,67,0,0,0,115,194,0, - 0,0,116,0,0,124,0,0,116,1,0,131,2,0,115,45, - 0,116,2,0,100,1,0,106,3,0,116,4,0,124,0,0, - 131,1,0,131,1,0,131,1,0,130,1,0,110,0,0,124, - 2,0,100,2,0,107,0,0,114,72,0,116,5,0,100,3, - 0,131,1,0,130,1,0,110,0,0,124,1,0,114,156,0, - 116,0,0,124,1,0,116,1,0,131,2,0,115,108,0,116, - 2,0,100,4,0,131,1,0,130,1,0,113,156,0,124,1, - 0,116,6,0,106,7,0,107,7,0,114,156,0,100,5,0, - 125,3,0,116,8,0,124,3,0,106,3,0,124,1,0,131, - 1,0,131,1,0,130,1,0,113,156,0,110,0,0,124,0, - 0,12,114,190,0,124,2,0,100,2,0,107,2,0,114,190, - 0,116,5,0,100,6,0,131,1,0,130,1,0,110,0,0, - 100,7,0,83,41,8,122,28,86,101,114,105,102,121,32,97, - 114,103,117,109,101,110,116,115,32,97,114,101,32,34,115,97, - 110,101,34,46,122,31,109,111,100,117,108,101,32,110,97,109, - 101,32,109,117,115,116,32,98,101,32,115,116,114,44,32,110, - 111,116,32,123,125,114,84,0,0,0,122,18,108,101,118,101, - 108,32,109,117,115,116,32,98,101,32,62,61,32,48,122,31, - 95,95,112,97,99,107,97,103,101,95,95,32,110,111,116,32, - 115,101,116,32,116,111,32,97,32,115,116,114,105,110,103,122, - 61,80,97,114,101,110,116,32,109,111,100,117,108,101,32,123, - 33,114,125,32,110,111,116,32,108,111,97,100,101,100,44,32, - 99,97,110,110,111,116,32,112,101,114,102,111,114,109,32,114, - 101,108,97,116,105,118,101,32,105,109,112,111,114,116,122,17, - 69,109,112,116,121,32,109,111,100,117,108,101,32,110,97,109, - 101,78,41,9,114,193,0,0,0,114,83,1,0,0,218,9, - 84,121,112,101,69,114,114,111,114,114,47,0,0,0,114,66, - 0,0,0,114,133,0,0,0,114,7,0,0,0,114,73,0, - 0,0,218,11,83,121,115,116,101,109,69,114,114,111,114,41, - 4,114,67,0,0,0,114,103,1,0,0,114,104,1,0,0, - 114,172,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,13,95,115,97,110,105,116,121,95,99,104, - 101,99,107,139,8,0,0,115,24,0,0,0,0,2,15,1, - 30,1,12,1,15,1,6,1,15,1,15,1,15,1,6,2, - 27,1,19,1,114,111,1,0,0,122,16,78,111,32,109,111, - 100,117,108,101,32,110,97,109,101,100,32,122,4,123,33,114, - 125,99,2,0,0,0,0,0,0,0,8,0,0,0,12,0, - 0,0,67,0,0,0,115,52,1,0,0,100,0,0,125,2, - 0,124,0,0,106,0,0,100,1,0,131,1,0,100,2,0, - 25,125,3,0,124,3,0,114,178,0,124,3,0,116,1,0, - 106,2,0,107,7,0,114,62,0,116,3,0,124,1,0,124, - 3,0,131,2,0,1,110,0,0,124,0,0,116,1,0,106, - 2,0,107,6,0,114,88,0,116,1,0,106,2,0,124,0, - 0,25,83,116,1,0,106,2,0,124,3,0,25,125,4,0, - 121,13,0,124,4,0,106,4,0,125,2,0,87,113,178,0, - 4,116,5,0,107,10,0,114,174,0,1,1,1,116,6,0, - 100,3,0,23,106,7,0,124,0,0,124,3,0,131,2,0, - 125,5,0,116,8,0,124,5,0,100,4,0,124,0,0,131, - 1,1,130,1,0,89,113,178,0,88,110,0,0,116,9,0, - 124,0,0,124,2,0,131,2,0,125,6,0,124,6,0,100, - 0,0,107,8,0,114,235,0,116,8,0,116,6,0,106,7, - 0,124,0,0,131,1,0,100,4,0,124,0,0,131,1,1, - 130,1,0,110,18,0,116,10,0,124,6,0,131,1,0,106, - 11,0,131,0,0,125,7,0,124,3,0,114,48,1,116,1, - 0,106,2,0,124,3,0,25,125,4,0,116,12,0,124,4, - 0,124,0,0,106,0,0,100,1,0,131,1,0,100,5,0, - 25,124,7,0,131,3,0,1,110,0,0,124,7,0,83,41, - 6,78,114,116,0,0,0,114,84,0,0,0,122,23,59,32, - 123,33,114,125,32,105,115,32,110,111,116,32,97,32,112,97, - 99,107,97,103,101,114,67,0,0,0,114,115,0,0,0,41, - 13,114,32,0,0,0,114,7,0,0,0,114,73,0,0,0, - 114,114,0,0,0,114,247,0,0,0,114,210,0,0,0,218, - 8,95,69,82,82,95,77,83,71,114,47,0,0,0,114,154, - 0,0,0,114,108,1,0,0,114,175,0,0,0,114,7,1, - 0,0,114,61,0,0,0,41,8,114,67,0,0,0,218,7, - 105,109,112,111,114,116,95,114,35,0,0,0,114,234,0,0, - 0,90,13,112,97,114,101,110,116,95,109,111,100,117,108,101, - 114,172,0,0,0,114,178,0,0,0,114,180,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,23, - 95,102,105,110,100,95,97,110,100,95,108,111,97,100,95,117, - 110,108,111,99,107,101,100,159,8,0,0,115,42,0,0,0, - 0,1,6,1,19,1,6,1,15,1,16,2,15,1,11,1, - 13,1,3,1,13,1,13,1,22,1,26,1,15,1,12,1, - 30,2,18,1,6,2,13,1,32,1,114,114,1,0,0,99, - 2,0,0,0,0,0,0,0,2,0,0,0,10,0,0,0, - 67,0,0,0,115,36,0,0,0,116,0,0,124,0,0,131, - 1,0,143,18,0,1,116,1,0,124,0,0,124,1,0,131, - 2,0,83,87,100,1,0,81,88,100,1,0,83,41,2,122, - 54,70,105,110,100,32,97,110,100,32,108,111,97,100,32,116, - 104,101,32,109,111,100,117,108,101,44,32,97,110,100,32,114, - 101,108,101,97,115,101,32,116,104,101,32,105,109,112,111,114, - 116,32,108,111,99,107,46,78,41,2,114,103,0,0,0,114, - 114,1,0,0,41,2,114,67,0,0,0,114,113,1,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 14,95,102,105,110,100,95,97,110,100,95,108,111,97,100,186, - 8,0,0,115,4,0,0,0,0,2,13,1,114,115,1,0, - 0,99,3,0,0,0,0,0,0,0,5,0,0,0,4,0, - 0,0,67,0,0,0,115,172,0,0,0,116,0,0,124,0, - 0,124,1,0,124,2,0,131,3,0,1,124,2,0,100,1, - 0,107,4,0,114,49,0,116,1,0,124,0,0,124,1,0, - 124,2,0,131,3,0,125,0,0,110,0,0,116,2,0,106, - 3,0,131,0,0,1,124,0,0,116,4,0,106,5,0,107, - 7,0,114,87,0,116,6,0,124,0,0,116,7,0,131,2, - 0,83,116,4,0,106,5,0,124,0,0,25,125,3,0,124, - 3,0,100,2,0,107,8,0,114,158,0,116,2,0,106,8, - 0,131,0,0,1,100,3,0,106,9,0,124,0,0,131,1, - 0,125,4,0,116,10,0,124,4,0,100,4,0,124,0,0, - 131,1,1,130,1,0,110,0,0,116,11,0,124,0,0,131, - 1,0,1,124,3,0,83,41,5,97,50,1,0,0,73,109, - 112,111,114,116,32,97,110,100,32,114,101,116,117,114,110,32, - 116,104,101,32,109,111,100,117,108,101,32,98,97,115,101,100, - 32,111,110,32,105,116,115,32,110,97,109,101,44,32,116,104, - 101,32,112,97,99,107,97,103,101,32,116,104,101,32,99,97, - 108,108,32,105,115,10,32,32,32,32,98,101,105,110,103,32, - 109,97,100,101,32,102,114,111,109,44,32,97,110,100,32,116, - 104,101,32,108,101,118,101,108,32,97,100,106,117,115,116,109, - 101,110,116,46,10,10,32,32,32,32,84,104,105,115,32,102, - 117,110,99,116,105,111,110,32,114,101,112,114,101,115,101,110, - 116,115,32,116,104,101,32,103,114,101,97,116,101,115,116,32, - 99,111,109,109,111,110,32,100,101,110,111,109,105,110,97,116, - 111,114,32,111,102,32,102,117,110,99,116,105,111,110,97,108, - 105,116,121,10,32,32,32,32,98,101,116,119,101,101,110,32, - 105,109,112,111,114,116,95,109,111,100,117,108,101,32,97,110, - 100,32,95,95,105,109,112,111,114,116,95,95,46,32,84,104, - 105,115,32,105,110,99,108,117,100,101,115,32,115,101,116,116, - 105,110,103,32,95,95,112,97,99,107,97,103,101,95,95,32, - 105,102,10,32,32,32,32,116,104,101,32,108,111,97,100,101, - 114,32,100,105,100,32,110,111,116,46,10,10,32,32,32,32, - 114,84,0,0,0,78,122,40,105,109,112,111,114,116,32,111, - 102,32,123,125,32,104,97,108,116,101,100,59,32,78,111,110, - 101,32,105,110,32,115,121,115,46,109,111,100,117,108,101,115, - 114,67,0,0,0,41,12,114,111,1,0,0,114,105,1,0, - 0,114,106,0,0,0,114,4,1,0,0,114,7,0,0,0, - 114,73,0,0,0,114,115,1,0,0,218,11,95,103,99,100, - 95,105,109,112,111,114,116,114,107,0,0,0,114,47,0,0, - 0,114,154,0,0,0,114,112,0,0,0,41,5,114,67,0, - 0,0,114,103,1,0,0,114,104,1,0,0,114,180,0,0, - 0,114,152,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,116,1,0,0,192,8,0,0,115,28, - 0,0,0,0,9,16,1,12,1,21,1,10,1,15,1,13, - 1,13,1,12,1,10,1,6,1,9,1,21,1,10,1,114, - 116,1,0,0,99,3,0,0,0,0,0,0,0,6,0,0, - 0,17,0,0,0,67,0,0,0,115,1,1,0,0,116,0, - 0,124,0,0,100,1,0,131,2,0,114,253,0,100,2,0, - 124,1,0,107,6,0,114,89,0,116,1,0,124,1,0,131, - 1,0,125,1,0,124,1,0,106,2,0,100,2,0,131,1, - 0,1,116,0,0,124,0,0,100,3,0,131,2,0,114,89, - 0,124,1,0,106,3,0,124,0,0,106,4,0,131,1,0, - 1,113,89,0,110,0,0,120,161,0,124,1,0,68,93,150, + 101,46,60,108,111,99,97,108,115,62,46,60,115,101,116,99, + 111,109,112,62,78,41,18,114,35,0,0,0,114,3,0,0, + 0,90,7,108,105,115,116,100,105,114,114,45,0,0,0,114, + 83,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, + 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, + 116,111,114,121,69,114,114,111,114,114,7,0,0,0,114,8, + 0,0,0,114,9,0,0,0,114,92,1,0,0,114,93,1, + 0,0,114,141,0,0,0,114,47,0,0,0,114,146,0,0, + 0,218,3,97,100,100,114,10,0,0,0,114,94,1,0,0, + 41,9,114,71,0,0,0,114,35,0,0,0,90,8,99,111, + 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, + 102,102,105,120,95,99,111,110,116,101,110,116,115,114,74,1, + 0,0,114,67,0,0,0,114,68,1,0,0,114,60,1,0, + 0,90,8,110,101,119,95,110,97,109,101,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,96,1,0,0,10, + 8,0,0,115,34,0,0,0,0,2,9,1,3,1,31,1, + 22,3,11,3,18,1,18,7,9,1,13,1,24,1,6,1, + 27,2,6,1,17,1,9,1,18,1,122,22,70,105,108,101, + 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99, + 104,101,99,1,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,7,0,0,0,115,25,0,0,0,135,0,0,135, + 1,0,102,2,0,100,1,0,100,2,0,134,0,0,125,2, + 0,124,2,0,83,41,3,97,20,1,0,0,65,32,99,108, + 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, + 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, + 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, + 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, + 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, + 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, + 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, + 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, + 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, + 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, + 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, + 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, + 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, + 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, + 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, + 0,19,0,0,0,115,43,0,0,0,116,0,0,124,0,0, + 131,1,0,115,30,0,116,1,0,100,1,0,100,2,0,124, + 0,0,131,1,1,130,1,0,136,0,0,124,0,0,136,1, + 0,140,1,0,83,41,3,122,45,80,97,116,104,32,104,111, + 111,107,32,102,111,114,32,105,109,112,111,114,116,108,105,98, + 46,109,97,99,104,105,110,101,114,121,46,70,105,108,101,70, + 105,110,100,101,114,46,122,30,111,110,108,121,32,100,105,114, + 101,99,116,111,114,105,101,115,32,97,114,101,32,115,117,112, + 112,111,114,116,101,100,114,35,0,0,0,41,2,114,46,0, + 0,0,114,159,0,0,0,41,1,114,35,0,0,0,41,2, + 114,13,1,0,0,114,95,1,0,0,114,4,0,0,0,114, + 5,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95, + 102,111,114,95,70,105,108,101,70,105,110,100,101,114,51,8, + 0,0,115,6,0,0,0,0,2,12,1,18,1,122,54,70, + 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, + 111,111,107,46,60,108,111,99,97,108,115,62,46,112,97,116, + 104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70, + 105,110,100,101,114,114,4,0,0,0,41,3,114,13,1,0, + 0,114,95,1,0,0,114,101,1,0,0,114,4,0,0,0, + 41,2,114,13,1,0,0,114,95,1,0,0,114,5,0,0, + 0,218,9,112,97,116,104,95,104,111,111,107,41,8,0,0, + 115,4,0,0,0,0,10,21,6,122,20,70,105,108,101,70, + 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,99, + 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, + 67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,124, + 0,0,106,1,0,131,1,0,83,41,2,78,122,16,70,105, + 108,101,70,105,110,100,101,114,40,123,33,114,125,41,41,2, + 114,47,0,0,0,114,35,0,0,0,41,1,114,71,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,101,0,0,0,59,8,0,0,115,2,0,0,0,0,1, + 122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,114, + 101,112,114,95,95,41,15,114,57,0,0,0,114,56,0,0, + 0,114,58,0,0,0,114,59,0,0,0,114,72,0,0,0, + 114,77,1,0,0,114,176,0,0,0,114,16,1,0,0,114, + 171,0,0,0,114,88,1,0,0,114,15,1,0,0,114,96, + 1,0,0,114,20,1,0,0,114,102,1,0,0,114,101,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,89,1,0,0,175,7,0,0,115, + 20,0,0,0,12,7,6,2,12,14,12,4,6,2,12,12, + 12,5,15,45,12,31,18,18,114,89,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, + 0,0,115,46,0,0,0,101,0,0,90,1,0,100,0,0, + 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, + 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, + 0,100,6,0,83,41,7,218,18,95,73,109,112,111,114,116, + 76,111,99,107,67,111,110,116,101,120,116,122,36,67,111,110, + 116,101,120,116,32,109,97,110,97,103,101,114,32,102,111,114, + 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, + 46,99,1,0,0,0,0,0,0,0,1,0,0,0,1,0, + 0,0,67,0,0,0,115,14,0,0,0,116,0,0,106,1, + 0,131,0,0,1,100,1,0,83,41,2,122,24,65,99,113, + 117,105,114,101,32,116,104,101,32,105,109,112,111,114,116,32, + 108,111,99,107,46,78,41,2,114,106,0,0,0,114,5,1, + 0,0,41,1,114,71,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,75,0,0,0,69,8,0, + 0,115,2,0,0,0,0,2,122,28,95,73,109,112,111,114, + 116,76,111,99,107,67,111,110,116,101,120,116,46,95,95,101, + 110,116,101,114,95,95,99,4,0,0,0,0,0,0,0,4, + 0,0,0,1,0,0,0,67,0,0,0,115,14,0,0,0, + 116,0,0,106,1,0,131,0,0,1,100,1,0,83,41,2, + 122,60,82,101,108,101,97,115,101,32,116,104,101,32,105,109, + 112,111,114,116,32,108,111,99,107,32,114,101,103,97,114,100, + 108,101,115,115,32,111,102,32,97,110,121,32,114,97,105,115, + 101,100,32,101,120,99,101,112,116,105,111,110,115,46,78,41, + 2,114,106,0,0,0,114,107,0,0,0,41,4,114,71,0, + 0,0,90,8,101,120,99,95,116,121,112,101,90,9,101,120, + 99,95,118,97,108,117,101,90,13,101,120,99,95,116,114,97, + 99,101,98,97,99,107,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,81,0,0,0,73,8,0,0,115,2, + 0,0,0,0,2,122,27,95,73,109,112,111,114,116,76,111, + 99,107,67,111,110,116,101,120,116,46,95,95,101,120,105,116, + 95,95,78,41,6,114,57,0,0,0,114,56,0,0,0,114, + 58,0,0,0,114,59,0,0,0,114,75,0,0,0,114,81, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,103,1,0,0,65,8,0,0, + 115,6,0,0,0,12,2,6,2,12,4,114,103,1,0,0, + 99,3,0,0,0,0,0,0,0,5,0,0,0,4,0,0, + 0,67,0,0,0,115,88,0,0,0,124,1,0,106,0,0, + 100,1,0,124,2,0,100,2,0,24,131,2,0,125,3,0, + 116,1,0,124,3,0,131,1,0,124,2,0,107,0,0,114, + 52,0,116,2,0,100,3,0,131,1,0,130,1,0,124,3, + 0,100,4,0,25,125,4,0,124,0,0,114,84,0,100,5, + 0,106,3,0,124,4,0,124,0,0,131,2,0,83,124,4, + 0,83,41,6,122,50,82,101,115,111,108,118,101,32,97,32, + 114,101,108,97,116,105,118,101,32,109,111,100,117,108,101,32, + 110,97,109,101,32,116,111,32,97,110,32,97,98,115,111,108, + 117,116,101,32,111,110,101,46,114,117,0,0,0,114,29,0, + 0,0,122,50,97,116,116,101,109,112,116,101,100,32,114,101, + 108,97,116,105,118,101,32,105,109,112,111,114,116,32,98,101, + 121,111,110,100,32,116,111,112,45,108,101,118,101,108,32,112, + 97,99,107,97,103,101,114,84,0,0,0,122,5,123,125,46, + 123,125,41,4,114,34,0,0,0,114,31,0,0,0,114,129, + 0,0,0,114,47,0,0,0,41,5,114,67,0,0,0,218, + 7,112,97,99,107,97,103,101,218,5,108,101,118,101,108,90, + 4,98,105,116,115,114,135,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,13,95,114,101,115,111, + 108,118,101,95,110,97,109,101,78,8,0,0,115,10,0,0, + 0,0,2,22,1,18,1,12,1,10,1,114,106,1,0,0, + 99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,67,0,0,0,115,47,0,0,0,124,0,0,106,0,0, + 124,1,0,124,2,0,131,2,0,125,3,0,124,3,0,100, + 0,0,107,8,0,114,34,0,100,0,0,83,116,1,0,124, + 1,0,124,3,0,131,2,0,83,41,1,78,41,2,114,16, + 1,0,0,114,177,0,0,0,41,4,114,80,1,0,0,114, + 67,0,0,0,114,35,0,0,0,114,173,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,95, + 102,105,110,100,95,115,112,101,99,95,108,101,103,97,99,121, + 87,8,0,0,115,8,0,0,0,0,3,18,1,12,1,4, + 1,114,107,1,0,0,99,3,0,0,0,0,0,0,0,9, + 0,0,0,26,0,0,0,67,0,0,0,115,41,1,0,0, + 116,0,0,106,1,0,100,1,0,107,9,0,114,41,0,116, + 0,0,106,1,0,12,114,41,0,116,2,0,106,3,0,100, + 2,0,116,4,0,131,2,0,1,124,0,0,116,0,0,106, + 5,0,107,6,0,125,3,0,120,234,0,116,0,0,106,1, + 0,68,93,219,0,125,4,0,116,6,0,131,0,0,143,90, + 0,1,121,13,0,124,4,0,106,7,0,125,5,0,87,110, + 51,0,4,116,8,0,107,10,0,114,148,0,1,1,1,116, + 9,0,124,4,0,124,0,0,124,1,0,131,3,0,125,6, + 0,124,6,0,100,1,0,107,8,0,114,144,0,119,66,0, + 89,110,19,0,88,124,5,0,124,0,0,124,1,0,124,2, + 0,131,3,0,125,6,0,87,100,1,0,81,88,124,6,0, + 100,1,0,107,9,0,114,66,0,124,3,0,12,114,25,1, + 124,0,0,116,0,0,106,5,0,107,6,0,114,25,1,116, + 0,0,106,5,0,124,0,0,25,125,7,0,121,13,0,124, + 7,0,106,10,0,125,8,0,87,110,22,0,4,116,8,0, + 107,10,0,114,1,1,1,1,1,124,6,0,83,89,113,29, + 1,88,124,8,0,100,1,0,107,8,0,114,18,1,124,6, + 0,83,124,8,0,83,113,66,0,124,6,0,83,113,66,0, + 87,100,1,0,83,100,1,0,83,41,3,122,23,70,105,110, + 100,32,97,32,109,111,100,117,108,101,39,115,32,108,111,97, + 100,101,114,46,78,122,22,115,121,115,46,109,101,116,97,95, + 112,97,116,104,32,105,115,32,101,109,112,116,121,41,11,114, + 7,0,0,0,218,9,109,101,116,97,95,112,97,116,104,114, + 118,0,0,0,114,119,0,0,0,114,172,0,0,0,114,73, + 0,0,0,114,103,1,0,0,114,15,1,0,0,114,211,0, + 0,0,114,107,1,0,0,114,210,0,0,0,41,9,114,67, + 0,0,0,114,35,0,0,0,114,14,1,0,0,90,9,105, + 115,95,114,101,108,111,97,100,114,80,1,0,0,114,15,1, + 0,0,114,180,0,0,0,114,181,0,0,0,114,210,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,10,95,102,105,110,100,95,115,112,101,99,96,8,0,0, + 115,48,0,0,0,0,2,25,1,16,4,15,1,16,1,10, + 1,3,1,13,1,13,1,18,1,12,1,8,2,24,1,12, + 2,22,1,13,1,3,1,13,1,13,4,9,2,12,1,4, + 2,7,2,8,2,114,109,1,0,0,99,3,0,0,0,0, + 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, + 179,0,0,0,116,0,0,124,0,0,116,1,0,131,2,0, + 115,42,0,116,2,0,100,1,0,106,3,0,116,4,0,124, + 0,0,131,1,0,131,1,0,131,1,0,130,1,0,124,2, + 0,100,2,0,107,0,0,114,66,0,116,5,0,100,3,0, + 131,1,0,130,1,0,124,1,0,114,144,0,116,0,0,124, + 1,0,116,1,0,131,2,0,115,102,0,116,2,0,100,4, + 0,131,1,0,130,1,0,110,42,0,124,1,0,116,6,0, + 106,7,0,107,7,0,114,144,0,100,5,0,125,3,0,116, + 8,0,124,3,0,106,3,0,124,1,0,131,1,0,131,1, + 0,130,1,0,124,0,0,12,114,175,0,124,2,0,100,2, + 0,107,2,0,114,175,0,116,5,0,100,6,0,131,1,0, + 130,1,0,100,7,0,83,41,8,122,28,86,101,114,105,102, + 121,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32, + 34,115,97,110,101,34,46,122,31,109,111,100,117,108,101,32, + 110,97,109,101,32,109,117,115,116,32,98,101,32,115,116,114, + 44,32,110,111,116,32,123,125,114,84,0,0,0,122,18,108, + 101,118,101,108,32,109,117,115,116,32,98,101,32,62,61,32, + 48,122,31,95,95,112,97,99,107,97,103,101,95,95,32,110, + 111,116,32,115,101,116,32,116,111,32,97,32,115,116,114,105, + 110,103,122,61,80,97,114,101,110,116,32,109,111,100,117,108, + 101,32,123,33,114,125,32,110,111,116,32,108,111,97,100,101, + 100,44,32,99,97,110,110,111,116,32,112,101,114,102,111,114, + 109,32,114,101,108,97,116,105,118,101,32,105,109,112,111,114, + 116,122,17,69,109,112,116,121,32,109,111,100,117,108,101,32, + 110,97,109,101,78,41,9,114,194,0,0,0,114,127,0,0, + 0,114,121,0,0,0,114,47,0,0,0,114,66,0,0,0, + 114,129,0,0,0,114,7,0,0,0,114,73,0,0,0,218, + 11,83,121,115,116,101,109,69,114,114,111,114,41,4,114,67, + 0,0,0,114,104,1,0,0,114,105,1,0,0,114,175,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,13,95,115,97,110,105,116,121,95,99,104,101,99,107, + 136,8,0,0,115,24,0,0,0,0,2,15,1,27,1,12, + 1,12,1,6,1,15,1,15,1,15,1,6,2,21,1,19, + 1,114,111,1,0,0,122,16,78,111,32,109,111,100,117,108, + 101,32,110,97,109,101,100,32,122,4,123,33,114,125,99,2, + 0,0,0,0,0,0,0,8,0,0,0,12,0,0,0,67, + 0,0,0,115,40,1,0,0,100,0,0,125,2,0,124,0, + 0,106,0,0,100,1,0,131,1,0,100,2,0,25,125,3, + 0,124,3,0,114,175,0,124,3,0,116,1,0,106,2,0, + 107,7,0,114,59,0,116,3,0,124,1,0,124,3,0,131, + 2,0,1,124,0,0,116,1,0,106,2,0,107,6,0,114, + 85,0,116,1,0,106,2,0,124,0,0,25,83,116,1,0, + 106,2,0,124,3,0,25,125,4,0,121,13,0,124,4,0, + 106,4,0,125,2,0,87,110,61,0,4,116,5,0,107,10, + 0,114,174,0,1,1,1,116,6,0,100,3,0,23,106,7, + 0,124,0,0,124,3,0,131,2,0,125,5,0,116,8,0, + 124,5,0,100,4,0,124,0,0,131,1,1,100,0,0,130, + 2,0,89,110,1,0,88,116,9,0,124,0,0,124,2,0, + 131,2,0,125,6,0,124,6,0,100,0,0,107,8,0,114, + 232,0,116,8,0,116,6,0,106,7,0,124,0,0,131,1, + 0,100,4,0,124,0,0,131,1,1,130,1,0,110,12,0, + 116,10,0,124,6,0,131,1,0,125,7,0,124,3,0,114, + 36,1,116,1,0,106,2,0,124,3,0,25,125,4,0,116, + 11,0,124,4,0,124,0,0,106,0,0,100,1,0,131,1, + 0,100,5,0,25,124,7,0,131,3,0,1,124,7,0,83, + 41,6,78,114,117,0,0,0,114,84,0,0,0,122,23,59, + 32,123,33,114,125,32,105,115,32,110,111,116,32,97,32,112, + 97,99,107,97,103,101,114,67,0,0,0,114,115,0,0,0, + 41,12,114,32,0,0,0,114,7,0,0,0,114,73,0,0, + 0,114,114,0,0,0,114,250,0,0,0,114,211,0,0,0, + 218,8,95,69,82,82,95,77,83,71,114,47,0,0,0,114, + 159,0,0,0,114,109,1,0,0,114,8,1,0,0,114,61, + 0,0,0,41,8,114,67,0,0,0,218,7,105,109,112,111, + 114,116,95,114,35,0,0,0,114,236,0,0,0,90,13,112, + 97,114,101,110,116,95,109,111,100,117,108,101,114,175,0,0, + 0,114,180,0,0,0,114,181,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,23,95,102,105,110, + 100,95,97,110,100,95,108,111,97,100,95,117,110,108,111,99, + 107,101,100,156,8,0,0,115,42,0,0,0,0,1,6,1, + 19,1,6,1,15,1,13,2,15,1,11,1,13,1,3,1, + 13,1,13,1,22,1,26,1,15,1,12,1,30,2,12,1, + 6,2,13,1,29,1,114,114,1,0,0,99,2,0,0,0, + 0,0,0,0,2,0,0,0,10,0,0,0,67,0,0,0, + 115,36,0,0,0,116,0,0,124,0,0,131,1,0,143,18, + 0,1,116,1,0,124,0,0,124,1,0,131,2,0,83,87, + 100,1,0,81,88,100,1,0,83,41,2,122,54,70,105,110, + 100,32,97,110,100,32,108,111,97,100,32,116,104,101,32,109, + 111,100,117,108,101,44,32,97,110,100,32,114,101,108,101,97, + 115,101,32,116,104,101,32,105,109,112,111,114,116,32,108,111, + 99,107,46,78,41,2,114,103,0,0,0,114,114,1,0,0, + 41,2,114,67,0,0,0,114,113,1,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,14,95,102,105, + 110,100,95,97,110,100,95,108,111,97,100,183,8,0,0,115, + 4,0,0,0,0,2,13,1,114,115,1,0,0,99,3,0, + 0,0,0,0,0,0,5,0,0,0,4,0,0,0,67,0, + 0,0,115,166,0,0,0,116,0,0,124,0,0,124,1,0, + 124,2,0,131,3,0,1,124,2,0,100,1,0,107,4,0, + 114,46,0,116,1,0,124,0,0,124,1,0,124,2,0,131, + 3,0,125,0,0,116,2,0,106,3,0,131,0,0,1,124, + 0,0,116,4,0,106,5,0,107,7,0,114,84,0,116,6, + 0,124,0,0,116,7,0,131,2,0,83,116,4,0,106,5, + 0,124,0,0,25,125,3,0,124,3,0,100,2,0,107,8, + 0,114,152,0,116,2,0,106,8,0,131,0,0,1,100,3, + 0,106,9,0,124,0,0,131,1,0,125,4,0,116,10,0, + 124,4,0,100,4,0,124,0,0,131,1,1,130,1,0,116, + 11,0,124,0,0,131,1,0,1,124,3,0,83,41,5,97, + 50,1,0,0,73,109,112,111,114,116,32,97,110,100,32,114, + 101,116,117,114,110,32,116,104,101,32,109,111,100,117,108,101, + 32,98,97,115,101,100,32,111,110,32,105,116,115,32,110,97, + 109,101,44,32,116,104,101,32,112,97,99,107,97,103,101,32, + 116,104,101,32,99,97,108,108,32,105,115,10,32,32,32,32, + 98,101,105,110,103,32,109,97,100,101,32,102,114,111,109,44, + 32,97,110,100,32,116,104,101,32,108,101,118,101,108,32,97, + 100,106,117,115,116,109,101,110,116,46,10,10,32,32,32,32, + 84,104,105,115,32,102,117,110,99,116,105,111,110,32,114,101, + 112,114,101,115,101,110,116,115,32,116,104,101,32,103,114,101, + 97,116,101,115,116,32,99,111,109,109,111,110,32,100,101,110, + 111,109,105,110,97,116,111,114,32,111,102,32,102,117,110,99, + 116,105,111,110,97,108,105,116,121,10,32,32,32,32,98,101, + 116,119,101,101,110,32,105,109,112,111,114,116,95,109,111,100, + 117,108,101,32,97,110,100,32,95,95,105,109,112,111,114,116, + 95,95,46,32,84,104,105,115,32,105,110,99,108,117,100,101, + 115,32,115,101,116,116,105,110,103,32,95,95,112,97,99,107, + 97,103,101,95,95,32,105,102,10,32,32,32,32,116,104,101, + 32,108,111,97,100,101,114,32,100,105,100,32,110,111,116,46, + 10,10,32,32,32,32,114,84,0,0,0,78,122,40,105,109, + 112,111,114,116,32,111,102,32,123,125,32,104,97,108,116,101, + 100,59,32,78,111,110,101,32,105,110,32,115,121,115,46,109, + 111,100,117,108,101,115,114,67,0,0,0,41,12,114,111,1, + 0,0,114,106,1,0,0,114,106,0,0,0,114,5,1,0, + 0,114,7,0,0,0,114,73,0,0,0,114,115,1,0,0, + 218,11,95,103,99,100,95,105,109,112,111,114,116,114,107,0, + 0,0,114,47,0,0,0,114,159,0,0,0,114,112,0,0, + 0,41,5,114,67,0,0,0,114,104,1,0,0,114,105,1, + 0,0,114,181,0,0,0,114,133,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,116,1,0,0, + 189,8,0,0,115,28,0,0,0,0,9,16,1,12,1,18, + 1,10,1,15,1,13,1,13,1,12,1,10,1,6,1,9, + 1,18,1,10,1,114,116,1,0,0,99,3,0,0,0,0, + 0,0,0,6,0,0,0,17,0,0,0,67,0,0,0,115, + 239,0,0,0,116,0,0,124,0,0,100,1,0,131,2,0, + 114,235,0,100,2,0,124,1,0,107,6,0,114,83,0,116, + 1,0,124,1,0,131,1,0,125,1,0,124,1,0,106,2, + 0,100,2,0,131,1,0,1,116,0,0,124,0,0,100,3, + 0,131,2,0,114,83,0,124,1,0,106,3,0,124,0,0, + 106,4,0,131,1,0,1,120,149,0,124,1,0,68,93,141, 0,125,3,0,116,0,0,124,0,0,124,3,0,131,2,0, - 115,96,0,100,4,0,106,5,0,124,0,0,106,6,0,124, + 115,90,0,100,4,0,106,5,0,124,0,0,106,6,0,124, 3,0,131,2,0,125,4,0,121,17,0,116,7,0,124,2, - 0,124,4,0,131,2,0,1,87,113,246,0,4,116,8,0, - 107,10,0,114,242,0,1,125,5,0,1,122,53,0,116,9, + 0,124,4,0,131,2,0,1,87,113,90,0,4,116,8,0, + 107,10,0,114,230,0,1,125,5,0,1,122,47,0,116,9, 0,124,5,0,131,1,0,106,10,0,116,11,0,131,1,0, - 114,221,0,124,5,0,106,12,0,124,4,0,107,2,0,114, - 221,0,119,96,0,113,221,0,110,0,0,130,0,0,87,89, - 100,5,0,100,5,0,125,5,0,126,5,0,88,113,246,0, - 88,113,96,0,113,96,0,87,110,0,0,124,0,0,83,41, - 6,122,238,70,105,103,117,114,101,32,111,117,116,32,119,104, - 97,116,32,95,95,105,109,112,111,114,116,95,95,32,115,104, - 111,117,108,100,32,114,101,116,117,114,110,46,10,10,32,32, - 32,32,84,104,101,32,105,109,112,111,114,116,95,32,112,97, - 114,97,109,101,116,101,114,32,105,115,32,97,32,99,97,108, - 108,97,98,108,101,32,119,104,105,99,104,32,116,97,107,101, - 115,32,116,104,101,32,110,97,109,101,32,111,102,32,109,111, - 100,117,108,101,32,116,111,10,32,32,32,32,105,109,112,111, - 114,116,46,32,73,116,32,105,115,32,114,101,113,117,105,114, - 101,100,32,116,111,32,100,101,99,111,117,112,108,101,32,116, - 104,101,32,102,117,110,99,116,105,111,110,32,102,114,111,109, - 32,97,115,115,117,109,105,110,103,32,105,109,112,111,114,116, - 108,105,98,39,115,10,32,32,32,32,105,109,112,111,114,116, - 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, - 105,115,32,100,101,115,105,114,101,100,46,10,10,32,32,32, - 32,114,247,0,0,0,250,1,42,218,7,95,95,97,108,108, - 95,95,122,5,123,125,46,123,125,78,41,13,114,60,0,0, - 0,114,246,0,0,0,218,6,114,101,109,111,118,101,114,198, - 0,0,0,114,118,1,0,0,114,47,0,0,0,114,57,0, - 0,0,114,114,0,0,0,114,154,0,0,0,114,83,1,0, - 0,114,9,0,0,0,218,15,95,69,82,82,95,77,83,71, - 95,80,82,69,70,73,88,114,67,0,0,0,41,6,114,180, - 0,0,0,218,8,102,114,111,109,108,105,115,116,114,113,1, - 0,0,114,16,0,0,0,90,9,102,114,111,109,95,110,97, - 109,101,114,41,1,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,16,95,104,97,110,100,108,101,95, - 102,114,111,109,108,105,115,116,216,8,0,0,115,34,0,0, - 0,0,10,15,1,12,1,12,1,13,1,15,1,22,1,13, - 1,15,1,21,1,3,1,17,1,18,4,21,1,15,1,9, - 1,32,1,114,122,1,0,0,99,1,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,78,0, - 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,1, - 0,124,1,0,100,2,0,107,8,0,114,74,0,124,0,0, - 100,3,0,25,125,1,0,100,4,0,124,0,0,107,7,0, - 114,74,0,124,1,0,106,1,0,100,5,0,131,1,0,100, - 6,0,25,125,1,0,113,74,0,110,0,0,124,1,0,83, - 41,7,122,167,67,97,108,99,117,108,97,116,101,32,119,104, - 97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115, - 104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95, - 95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111, - 116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32, - 98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111, - 117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111, - 110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115, - 101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111, - 112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107, - 110,111,119,110,46,10,10,32,32,32,32,114,251,0,0,0, - 78,114,57,0,0,0,114,247,0,0,0,114,116,0,0,0, - 114,84,0,0,0,41,2,114,93,0,0,0,114,32,0,0, - 0,41,2,218,7,103,108,111,98,97,108,115,114,103,1,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, - 101,95,95,248,8,0,0,115,12,0,0,0,0,7,15,1, - 12,1,10,1,12,1,25,1,114,124,1,0,0,99,0,0, - 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, - 0,0,115,55,0,0,0,116,0,0,116,1,0,106,2,0, - 131,0,0,102,2,0,125,0,0,116,3,0,116,4,0,102, - 2,0,125,1,0,116,5,0,116,6,0,102,2,0,125,2, - 0,124,0,0,124,1,0,124,2,0,103,3,0,83,41,1, - 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, - 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, - 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, - 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, - 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, - 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, - 32,41,7,114,57,1,0,0,114,106,0,0,0,218,18,101, - 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, - 115,114,9,1,0,0,114,135,0,0,0,114,8,1,0,0, - 114,233,0,0,0,41,3,90,10,101,120,116,101,110,115,105, - 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116, - 101,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,241,0,0,0,7,9,0,0,115,8,0, - 0,0,0,5,18,1,12,1,12,1,114,241,0,0,0,99, - 5,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, - 67,0,0,0,115,227,0,0,0,124,4,0,100,1,0,107, - 2,0,114,27,0,116,0,0,124,0,0,131,1,0,125,5, - 0,110,54,0,124,1,0,100,2,0,107,9,0,114,45,0, - 124,1,0,110,3,0,105,0,0,125,6,0,116,1,0,124, - 6,0,131,1,0,125,7,0,116,0,0,124,0,0,124,7, - 0,124,4,0,131,3,0,125,5,0,124,3,0,115,207,0, - 124,4,0,100,1,0,107,2,0,114,122,0,116,0,0,124, - 0,0,106,2,0,100,3,0,131,1,0,100,1,0,25,131, - 1,0,83,124,0,0,115,132,0,124,5,0,83,116,3,0, - 124,0,0,131,1,0,116,3,0,124,0,0,106,2,0,100, - 3,0,131,1,0,100,1,0,25,131,1,0,24,125,8,0, - 116,4,0,106,5,0,124,5,0,106,6,0,100,2,0,116, - 3,0,124,5,0,106,6,0,131,1,0,124,8,0,24,133, - 2,0,25,25,83,110,16,0,116,7,0,124,5,0,124,3, - 0,116,0,0,131,3,0,83,100,2,0,83,41,4,97,214, - 1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,108, - 111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,32, - 105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,114, - 32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,114, - 116,32,105,115,32,111,99,99,117,114,105,110,103,32,102,114, - 111,109,10,32,32,32,32,116,111,32,104,97,110,100,108,101, - 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, - 115,46,32,84,104,101,32,39,108,111,99,97,108,115,39,32, - 97,114,103,117,109,101,110,116,32,105,115,32,105,103,110,111, - 114,101,100,46,32,84,104,101,10,32,32,32,32,39,102,114, - 111,109,108,105,115,116,39,32,97,114,103,117,109,101,110,116, - 32,115,112,101,99,105,102,105,101,115,32,119,104,97,116,32, - 115,104,111,117,108,100,32,101,120,105,115,116,32,97,115,32, - 97,116,116,114,105,98,117,116,101,115,32,111,110,32,116,104, - 101,32,109,111,100,117,108,101,10,32,32,32,32,98,101,105, - 110,103,32,105,109,112,111,114,116,101,100,32,40,101,46,103, - 46,32,96,96,102,114,111,109,32,109,111,100,117,108,101,32, - 105,109,112,111,114,116,32,60,102,114,111,109,108,105,115,116, - 62,96,96,41,46,32,32,84,104,101,32,39,108,101,118,101, - 108,39,10,32,32,32,32,97,114,103,117,109,101,110,116,32, - 114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,112, - 97,99,107,97,103,101,32,108,111,99,97,116,105,111,110,32, - 116,111,32,105,109,112,111,114,116,32,102,114,111,109,32,105, - 110,32,97,32,114,101,108,97,116,105,118,101,10,32,32,32, - 32,105,109,112,111,114,116,32,40,101,46,103,46,32,96,96, - 102,114,111,109,32,46,46,112,107,103,32,105,109,112,111,114, - 116,32,109,111,100,96,96,32,119,111,117,108,100,32,104,97, - 118,101,32,97,32,39,108,101,118,101,108,39,32,111,102,32, - 50,41,46,10,10,32,32,32,32,114,84,0,0,0,78,114, - 116,0,0,0,41,8,114,116,1,0,0,114,124,1,0,0, - 114,134,0,0,0,114,31,0,0,0,114,7,0,0,0,114, - 73,0,0,0,114,57,0,0,0,114,122,1,0,0,41,9, - 114,67,0,0,0,114,123,1,0,0,218,6,108,111,99,97, - 108,115,114,121,1,0,0,114,104,1,0,0,114,180,0,0, - 0,90,8,103,108,111,98,97,108,115,95,114,103,1,0,0, - 90,7,99,117,116,95,111,102,102,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,10,95,95,105,109,112,111, - 114,116,95,95,18,9,0,0,115,26,0,0,0,0,11,12, - 1,15,2,24,1,12,1,18,1,6,3,12,1,23,1,6, - 1,4,4,35,3,40,2,114,127,1,0,0,99,1,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, - 0,115,68,0,0,0,116,0,0,106,1,0,124,0,0,131, - 1,0,125,1,0,124,1,0,100,0,0,107,8,0,114,46, - 0,116,2,0,100,1,0,124,0,0,23,131,1,0,130,1, - 0,110,0,0,116,3,0,124,1,0,131,1,0,125,2,0, - 124,2,0,106,4,0,131,0,0,83,41,2,78,122,25,110, - 111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, - 101,32,110,97,109,101,100,32,41,5,114,11,1,0,0,114, - 14,1,0,0,114,154,0,0,0,114,175,0,0,0,114,7, - 1,0,0,41,3,114,67,0,0,0,114,178,0,0,0,114, - 179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,18,95,98,117,105,108,116,105,110,95,102,114, - 111,109,95,110,97,109,101,53,9,0,0,115,10,0,0,0, - 0,1,15,1,12,1,19,1,12,1,114,128,1,0,0,99, - 2,0,0,0,0,0,0,0,19,0,0,0,12,0,0,0, - 67,0,0,0,115,232,2,0,0,124,1,0,97,0,0,124, - 0,0,97,1,0,116,1,0,106,2,0,106,3,0,114,33, - 0,116,4,0,97,5,0,110,6,0,116,6,0,97,5,0, - 116,7,0,116,1,0,131,1,0,125,2,0,120,138,0,116, - 1,0,106,8,0,106,9,0,131,0,0,68,93,121,0,92, - 2,0,125,3,0,125,4,0,116,10,0,124,4,0,124,2, - 0,131,2,0,114,67,0,124,3,0,116,1,0,106,11,0, - 107,6,0,114,118,0,116,12,0,125,5,0,110,27,0,116, - 0,0,106,13,0,124,3,0,131,1,0,114,67,0,116,14, - 0,125,5,0,110,3,0,113,67,0,116,15,0,124,4,0, - 124,5,0,131,2,0,125,6,0,116,16,0,124,6,0,131, - 1,0,125,7,0,124,7,0,106,17,0,124,4,0,131,1, - 0,1,113,67,0,113,67,0,87,116,1,0,106,8,0,116, - 18,0,25,125,8,0,120,73,0,100,26,0,68,93,65,0, - 125,9,0,124,9,0,116,1,0,106,8,0,107,7,0,114, - 248,0,116,19,0,124,9,0,131,1,0,125,10,0,110,13, - 0,116,1,0,106,8,0,124,9,0,25,125,10,0,116,20, - 0,124,8,0,124,9,0,124,10,0,131,3,0,1,113,212, - 0,87,100,5,0,100,6,0,103,1,0,102,2,0,100,7, - 0,100,8,0,100,6,0,103,2,0,102,2,0,102,2,0, - 125,11,0,120,146,0,124,11,0,68,93,126,0,92,2,0, - 125,12,0,125,13,0,116,21,0,100,9,0,100,10,0,132, - 0,0,124,13,0,68,131,1,0,131,1,0,115,108,1,116, - 22,0,130,1,0,124,13,0,100,11,0,25,125,14,0,124, - 12,0,116,1,0,106,8,0,107,6,0,114,150,1,116,1, - 0,106,8,0,124,12,0,25,125,15,0,80,113,65,1,121, - 17,0,116,19,0,124,12,0,131,1,0,125,15,0,80,87, - 113,65,1,4,116,23,0,107,10,0,114,190,1,1,1,1, - 119,65,1,89,113,65,1,88,113,65,1,87,116,23,0,100, - 12,0,131,1,0,130,1,0,116,20,0,124,8,0,100,13, - 0,124,15,0,131,3,0,1,116,20,0,124,8,0,100,14, - 0,124,14,0,131,3,0,1,116,20,0,124,8,0,100,15, - 0,100,16,0,106,24,0,124,13,0,131,1,0,131,3,0, - 1,121,16,0,116,19,0,100,17,0,131,1,0,125,16,0, - 87,110,24,0,4,116,23,0,107,10,0,114,50,2,1,1, - 1,100,18,0,125,16,0,89,110,1,0,88,116,20,0,124, - 8,0,100,17,0,124,16,0,131,3,0,1,116,19,0,100, - 19,0,131,1,0,125,17,0,116,20,0,124,8,0,100,19, - 0,124,17,0,131,3,0,1,124,12,0,100,7,0,107,2, - 0,114,138,2,116,19,0,100,20,0,131,1,0,125,18,0, - 116,20,0,124,8,0,100,21,0,124,18,0,131,3,0,1, - 110,0,0,116,20,0,124,8,0,100,22,0,116,25,0,131, - 0,0,131,3,0,1,116,26,0,106,27,0,116,0,0,106, - 28,0,131,0,0,131,1,0,1,124,12,0,100,7,0,107, - 2,0,114,228,2,116,29,0,106,30,0,100,23,0,131,1, - 0,1,100,24,0,116,26,0,107,6,0,114,228,2,100,25, - 0,116,31,0,95,32,0,113,228,2,110,0,0,100,18,0, + 114,209,0,124,5,0,106,12,0,124,4,0,107,2,0,114, + 209,0,119,90,0,130,0,0,87,89,100,5,0,100,5,0, + 125,5,0,126,5,0,88,113,90,0,88,113,90,0,87,124, + 0,0,83,41,6,122,238,70,105,103,117,114,101,32,111,117, + 116,32,119,104,97,116,32,95,95,105,109,112,111,114,116,95, + 95,32,115,104,111,117,108,100,32,114,101,116,117,114,110,46, + 10,10,32,32,32,32,84,104,101,32,105,109,112,111,114,116, + 95,32,112,97,114,97,109,101,116,101,114,32,105,115,32,97, + 32,99,97,108,108,97,98,108,101,32,119,104,105,99,104,32, + 116,97,107,101,115,32,116,104,101,32,110,97,109,101,32,111, + 102,32,109,111,100,117,108,101,32,116,111,10,32,32,32,32, + 105,109,112,111,114,116,46,32,73,116,32,105,115,32,114,101, + 113,117,105,114,101,100,32,116,111,32,100,101,99,111,117,112, + 108,101,32,116,104,101,32,102,117,110,99,116,105,111,110,32, + 102,114,111,109,32,97,115,115,117,109,105,110,103,32,105,109, + 112,111,114,116,108,105,98,39,115,10,32,32,32,32,105,109, + 112,111,114,116,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,105,115,32,100,101,115,105,114,101,100,46,10, + 10,32,32,32,32,114,250,0,0,0,250,1,42,218,7,95, + 95,97,108,108,95,95,122,5,123,125,46,123,125,78,41,13, + 114,60,0,0,0,114,249,0,0,0,218,6,114,101,109,111, + 118,101,114,199,0,0,0,114,118,1,0,0,114,47,0,0, + 0,114,57,0,0,0,114,114,0,0,0,114,159,0,0,0, + 114,127,0,0,0,114,9,0,0,0,218,15,95,69,82,82, + 95,77,83,71,95,80,82,69,70,73,88,114,67,0,0,0, + 41,6,114,181,0,0,0,218,8,102,114,111,109,108,105,115, + 116,114,113,1,0,0,114,16,0,0,0,90,9,102,114,111, + 109,95,110,97,109,101,114,43,1,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,16,95,104,97,110, + 100,108,101,95,102,114,111,109,108,105,115,116,213,8,0,0, + 115,34,0,0,0,0,10,15,1,12,1,12,1,13,1,15, + 1,16,1,13,1,15,1,21,1,3,1,17,1,18,4,21, + 1,15,1,3,1,26,1,114,122,1,0,0,99,1,0,0, + 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, + 0,115,72,0,0,0,124,0,0,106,0,0,100,1,0,131, + 1,0,125,1,0,124,1,0,100,2,0,107,8,0,114,68, + 0,124,0,0,100,3,0,25,125,1,0,100,4,0,124,0, + 0,107,7,0,114,68,0,124,1,0,106,1,0,100,5,0, + 131,1,0,100,6,0,25,125,1,0,124,1,0,83,41,7, + 122,167,67,97,108,99,117,108,97,116,101,32,119,104,97,116, + 32,95,95,112,97,99,107,97,103,101,95,95,32,115,104,111, + 117,108,100,32,98,101,46,10,10,32,32,32,32,95,95,112, + 97,99,107,97,103,101,95,95,32,105,115,32,110,111,116,32, + 103,117,97,114,97,110,116,101,101,100,32,116,111,32,98,101, + 32,100,101,102,105,110,101,100,32,111,114,32,99,111,117,108, + 100,32,98,101,32,115,101,116,32,116,111,32,78,111,110,101, + 10,32,32,32,32,116,111,32,114,101,112,114,101,115,101,110, + 116,32,116,104,97,116,32,105,116,115,32,112,114,111,112,101, + 114,32,118,97,108,117,101,32,105,115,32,117,110,107,110,111, + 119,110,46,10,10,32,32,32,32,114,253,0,0,0,78,114, + 57,0,0,0,114,250,0,0,0,114,117,0,0,0,114,84, + 0,0,0,41,2,114,93,0,0,0,114,32,0,0,0,41, + 2,218,7,103,108,111,98,97,108,115,114,104,1,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, + 95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,95, + 95,245,8,0,0,115,12,0,0,0,0,7,15,1,12,1, + 10,1,12,1,19,1,114,124,1,0,0,99,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,55,0,0,0,116,0,0,116,1,0,106,2,0,131,0, + 0,102,2,0,125,0,0,116,3,0,116,4,0,102,2,0, + 125,1,0,116,5,0,116,6,0,102,2,0,125,2,0,124, + 0,0,124,1,0,124,2,0,103,3,0,83,41,1,122,95, + 82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111, + 102,32,102,105,108,101,45,98,97,115,101,100,32,109,111,100, + 117,108,101,32,108,111,97,100,101,114,115,46,10,10,32,32, + 32,32,69,97,99,104,32,105,116,101,109,32,105,115,32,97, + 32,116,117,112,108,101,32,40,108,111,97,100,101,114,44,32, + 115,117,102,102,105,120,101,115,41,46,10,32,32,32,32,41, + 7,114,59,1,0,0,114,106,0,0,0,218,18,101,120,116, + 101,110,115,105,111,110,95,115,117,102,102,105,120,101,115,114, + 10,1,0,0,114,142,0,0,0,114,9,1,0,0,114,132, + 0,0,0,41,3,90,10,101,120,116,101,110,115,105,111,110, + 115,90,6,115,111,117,114,99,101,90,8,98,121,116,101,99, + 111,100,101,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,243,0,0,0,4,9,0,0,115,8,0,0,0, + 0,5,18,1,12,1,12,1,114,243,0,0,0,99,5,0, + 0,0,0,0,0,0,9,0,0,0,5,0,0,0,67,0, + 0,0,115,227,0,0,0,124,4,0,100,1,0,107,2,0, + 114,27,0,116,0,0,124,0,0,131,1,0,125,5,0,110, + 54,0,124,1,0,100,2,0,107,9,0,114,45,0,124,1, + 0,110,3,0,105,0,0,125,6,0,116,1,0,124,6,0, + 131,1,0,125,7,0,116,0,0,124,0,0,124,7,0,124, + 4,0,131,3,0,125,5,0,124,3,0,115,207,0,124,4, + 0,100,1,0,107,2,0,114,122,0,116,0,0,124,0,0, + 106,2,0,100,3,0,131,1,0,100,1,0,25,131,1,0, + 83,124,0,0,115,132,0,124,5,0,83,116,3,0,124,0, + 0,131,1,0,116,3,0,124,0,0,106,2,0,100,3,0, + 131,1,0,100,1,0,25,131,1,0,24,125,8,0,116,4, + 0,106,5,0,124,5,0,106,6,0,100,2,0,116,3,0, + 124,5,0,106,6,0,131,1,0,124,8,0,24,133,2,0, + 25,25,83,110,16,0,116,7,0,124,5,0,124,3,0,116, + 0,0,131,3,0,83,100,2,0,83,41,4,97,214,1,0, + 0,73,109,112,111,114,116,32,97,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,84,104,101,32,39,103,108,111,98, + 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, + 32,117,115,101,100,32,116,111,32,105,110,102,101,114,32,119, + 104,101,114,101,32,116,104,101,32,105,109,112,111,114,116,32, + 105,115,32,111,99,99,117,114,105,110,103,32,102,114,111,109, + 10,32,32,32,32,116,111,32,104,97,110,100,108,101,32,114, + 101,108,97,116,105,118,101,32,105,109,112,111,114,116,115,46, + 32,84,104,101,32,39,108,111,99,97,108,115,39,32,97,114, + 103,117,109,101,110,116,32,105,115,32,105,103,110,111,114,101, + 100,46,32,84,104,101,10,32,32,32,32,39,102,114,111,109, + 108,105,115,116,39,32,97,114,103,117,109,101,110,116,32,115, + 112,101,99,105,102,105,101,115,32,119,104,97,116,32,115,104, + 111,117,108,100,32,101,120,105,115,116,32,97,115,32,97,116, + 116,114,105,98,117,116,101,115,32,111,110,32,116,104,101,32, + 109,111,100,117,108,101,10,32,32,32,32,98,101,105,110,103, + 32,105,109,112,111,114,116,101,100,32,40,101,46,103,46,32, + 96,96,102,114,111,109,32,109,111,100,117,108,101,32,105,109, + 112,111,114,116,32,60,102,114,111,109,108,105,115,116,62,96, + 96,41,46,32,32,84,104,101,32,39,108,101,118,101,108,39, + 10,32,32,32,32,97,114,103,117,109,101,110,116,32,114,101, + 112,114,101,115,101,110,116,115,32,116,104,101,32,112,97,99, + 107,97,103,101,32,108,111,99,97,116,105,111,110,32,116,111, + 32,105,109,112,111,114,116,32,102,114,111,109,32,105,110,32, + 97,32,114,101,108,97,116,105,118,101,10,32,32,32,32,105, + 109,112,111,114,116,32,40,101,46,103,46,32,96,96,102,114, + 111,109,32,46,46,112,107,103,32,105,109,112,111,114,116,32, + 109,111,100,96,96,32,119,111,117,108,100,32,104,97,118,101, + 32,97,32,39,108,101,118,101,108,39,32,111,102,32,50,41, + 46,10,10,32,32,32,32,114,84,0,0,0,78,114,117,0, + 0,0,41,8,114,116,1,0,0,114,124,1,0,0,114,141, + 0,0,0,114,31,0,0,0,114,7,0,0,0,114,73,0, + 0,0,114,57,0,0,0,114,122,1,0,0,41,9,114,67, + 0,0,0,114,123,1,0,0,218,6,108,111,99,97,108,115, + 114,121,1,0,0,114,105,1,0,0,114,181,0,0,0,90, + 8,103,108,111,98,97,108,115,95,114,104,1,0,0,90,7, + 99,117,116,95,111,102,102,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,10,95,95,105,109,112,111,114,116, + 95,95,15,9,0,0,115,26,0,0,0,0,11,12,1,15, + 2,24,1,12,1,18,1,6,3,12,1,23,1,6,1,4, + 4,35,3,40,2,114,127,1,0,0,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 53,0,0,0,116,0,0,106,1,0,124,0,0,131,1,0, + 125,1,0,124,1,0,100,0,0,107,8,0,114,43,0,116, + 2,0,100,1,0,124,0,0,23,131,1,0,130,1,0,116, + 3,0,124,1,0,131,1,0,83,41,2,78,122,25,110,111, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 32,110,97,109,101,100,32,41,4,114,12,1,0,0,114,15, + 1,0,0,114,159,0,0,0,114,8,1,0,0,41,2,114, + 67,0,0,0,114,180,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,18,95,98,117,105,108,116, + 105,110,95,102,114,111,109,95,110,97,109,101,50,9,0,0, + 115,8,0,0,0,0,1,15,1,12,1,16,1,114,128,1, + 0,0,99,2,0,0,0,0,0,0,0,18,0,0,0,12, + 0,0,0,67,0,0,0,115,181,2,0,0,124,1,0,97, + 0,0,124,0,0,97,1,0,116,2,0,116,1,0,131,1, + 0,125,2,0,120,123,0,116,1,0,106,3,0,106,4,0, + 131,0,0,68,93,106,0,92,2,0,125,3,0,125,4,0, + 116,5,0,124,4,0,124,2,0,131,2,0,114,40,0,124, + 3,0,116,1,0,106,6,0,107,6,0,114,91,0,116,7, + 0,125,5,0,110,27,0,116,0,0,106,8,0,124,3,0, + 131,1,0,114,40,0,116,9,0,125,5,0,110,3,0,113, + 40,0,116,10,0,124,4,0,124,5,0,131,2,0,125,6, + 0,116,11,0,124,6,0,124,4,0,131,2,0,1,113,40, + 0,87,116,1,0,106,3,0,116,12,0,25,125,7,0,120, + 73,0,100,26,0,68,93,65,0,125,8,0,124,8,0,116, + 1,0,106,3,0,107,7,0,114,206,0,116,13,0,124,8, + 0,131,1,0,125,9,0,110,13,0,116,1,0,106,3,0, + 124,8,0,25,125,9,0,116,14,0,124,7,0,124,8,0, + 124,9,0,131,3,0,1,113,170,0,87,100,5,0,100,6, + 0,103,1,0,102,2,0,100,7,0,100,8,0,100,6,0, + 103,2,0,102,2,0,102,2,0,125,10,0,120,146,0,124, + 10,0,68,93,126,0,92,2,0,125,11,0,125,12,0,116, + 15,0,100,9,0,100,10,0,132,0,0,124,12,0,68,131, + 1,0,131,1,0,115,66,1,116,16,0,130,1,0,124,12, + 0,100,11,0,25,125,13,0,124,11,0,116,1,0,106,3, + 0,107,6,0,114,108,1,116,1,0,106,3,0,124,11,0, + 25,125,14,0,80,113,23,1,121,17,0,116,13,0,124,11, + 0,131,1,0,125,14,0,80,87,113,23,1,4,116,17,0, + 107,10,0,114,148,1,1,1,1,119,23,1,89,113,23,1, + 88,113,23,1,87,116,17,0,100,12,0,131,1,0,130,1, + 0,116,14,0,124,7,0,100,13,0,124,14,0,131,3,0, + 1,116,14,0,124,7,0,100,14,0,124,13,0,131,3,0, + 1,116,14,0,124,7,0,100,15,0,100,16,0,106,18,0, + 124,12,0,131,1,0,131,3,0,1,121,16,0,116,13,0, + 100,17,0,131,1,0,125,15,0,87,110,24,0,4,116,17, + 0,107,10,0,114,8,2,1,1,1,100,18,0,125,15,0, + 89,110,1,0,88,116,14,0,124,7,0,100,17,0,124,15, + 0,131,3,0,1,116,13,0,100,19,0,131,1,0,125,16, + 0,116,14,0,124,7,0,100,19,0,124,16,0,131,3,0, + 1,124,11,0,100,7,0,107,2,0,114,93,2,116,13,0, + 100,20,0,131,1,0,125,17,0,116,14,0,124,7,0,100, + 21,0,124,17,0,131,3,0,1,116,14,0,124,7,0,100, + 22,0,116,19,0,131,0,0,131,3,0,1,116,20,0,106, + 21,0,116,0,0,106,22,0,131,0,0,131,1,0,1,124, + 11,0,100,7,0,107,2,0,114,177,2,116,23,0,106,24, + 0,100,23,0,131,1,0,1,100,24,0,116,20,0,107,6, + 0,114,177,2,100,25,0,116,25,0,95,26,0,100,18,0, 83,41,27,122,250,83,101,116,117,112,32,105,109,112,111,114, 116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,110, 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105, @@ -4252,125 +4228,128 @@ const unsigned char _Py_M__importlib[] = { 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116, 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112, 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,114, - 49,0,0,0,114,167,0,0,0,218,8,98,117,105,108,116, - 105,110,115,114,192,0,0,0,90,5,112,111,115,105,120,250, + 49,0,0,0,114,118,0,0,0,218,8,98,117,105,108,116, + 105,110,115,114,193,0,0,0,90,5,112,111,115,105,120,250, 1,47,218,2,110,116,250,1,92,99,1,0,0,0,0,0, 0,0,2,0,0,0,3,0,0,0,115,0,0,0,115,33, 0,0,0,124,0,0,93,23,0,125,1,0,116,0,0,124, 1,0,131,1,0,100,0,0,107,2,0,86,1,113,3,0, 100,1,0,83,41,2,114,29,0,0,0,78,41,1,114,31, - 0,0,0,41,2,114,22,0,0,0,114,129,0,0,0,114, + 0,0,0,41,2,114,22,0,0,0,114,136,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,77, - 0,0,0,105,9,0,0,115,2,0,0,0,6,0,122,25, + 0,0,0,95,9,0,0,115,2,0,0,0,6,0,122,25, 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46, 60,103,101,110,101,120,112,114,62,114,84,0,0,0,122,30, 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114, 101,115,32,112,111,115,105,120,32,111,114,32,110,116,114,3, 0,0,0,114,25,0,0,0,114,21,0,0,0,114,30,0, 0,0,114,85,0,0,0,78,114,111,0,0,0,90,6,119, - 105,110,114,101,103,114,24,1,0,0,114,6,0,0,0,122, + 105,110,114,101,103,114,26,1,0,0,114,6,0,0,0,122, 4,46,112,121,119,122,6,95,100,46,112,121,100,84,41,4, 122,3,95,105,111,122,9,95,119,97,114,110,105,110,103,115, 122,8,98,117,105,108,116,105,110,115,122,7,109,97,114,115, - 104,97,108,41,33,114,106,0,0,0,114,7,0,0,0,114, - 117,0,0,0,114,118,0,0,0,114,120,0,0,0,114,233, - 0,0,0,114,119,0,0,0,114,66,0,0,0,114,73,0, - 0,0,218,5,105,116,101,109,115,114,193,0,0,0,114,158, - 0,0,0,114,11,1,0,0,114,163,0,0,0,114,20,1, - 0,0,114,248,0,0,0,114,175,0,0,0,114,255,0,0, - 0,114,57,0,0,0,114,128,1,0,0,114,61,0,0,0, - 218,3,97,108,108,114,100,0,0,0,114,154,0,0,0,114, - 26,0,0,0,114,11,0,0,0,114,60,1,0,0,114,198, - 0,0,0,114,125,1,0,0,114,135,0,0,0,114,224,0, - 0,0,114,23,1,0,0,114,27,1,0,0,41,19,218,10, - 115,121,115,95,109,111,100,117,108,101,218,11,95,105,109,112, - 95,109,111,100,117,108,101,90,11,109,111,100,117,108,101,95, - 116,121,112,101,114,67,0,0,0,114,180,0,0,0,114,170, - 0,0,0,114,178,0,0,0,114,179,0,0,0,90,11,115, - 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, - 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, - 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, - 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, - 114,21,0,0,0,114,25,0,0,0,90,9,111,115,95,109, - 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, - 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, - 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, - 117,108,101,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,6,95,115,101,116,117,112,61,9,0,0,115,108, - 0,0,0,0,9,6,1,6,2,12,1,9,2,6,3,12, - 1,28,1,15,1,15,1,9,1,15,1,9,2,3,1,15, - 1,12,1,20,3,13,1,13,1,15,1,15,2,13,1,20, - 3,33,1,19,2,31,1,10,1,15,1,13,1,4,2,3, - 1,12,1,5,1,13,1,12,2,12,1,16,1,16,1,25, - 3,3,1,16,1,13,2,11,1,16,3,12,1,16,3,12, - 1,12,1,19,3,19,1,19,1,12,1,13,1,12,1,114, - 137,1,0,0,99,2,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,136,0,0,0,116,0, - 0,124,0,0,124,1,0,131,2,0,1,116,1,0,131,0, - 0,125,2,0,116,2,0,106,3,0,106,4,0,116,5,0, - 106,6,0,124,2,0,140,0,0,103,1,0,131,1,0,1, - 116,2,0,106,7,0,106,8,0,116,9,0,131,1,0,1, - 116,2,0,106,7,0,106,8,0,116,10,0,131,1,0,1, - 116,11,0,106,12,0,100,1,0,107,2,0,114,116,0,116, - 2,0,106,7,0,106,8,0,116,13,0,131,1,0,1,110, - 0,0,116,2,0,106,7,0,106,8,0,116,14,0,131,1, - 0,1,100,2,0,83,41,3,122,50,73,110,115,116,97,108, - 108,32,105,109,112,111,114,116,108,105,98,32,97,115,32,116, - 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,111,102,32,105,109,112,111,114,116,46,114,131,1,0, - 0,78,41,15,114,137,1,0,0,114,241,0,0,0,114,7, - 0,0,0,114,79,1,0,0,114,198,0,0,0,114,87,1, - 0,0,114,101,1,0,0,114,107,1,0,0,114,224,0,0, - 0,114,11,1,0,0,114,20,1,0,0,114,3,0,0,0, - 114,57,0,0,0,114,23,1,0,0,114,74,1,0,0,41, - 3,114,135,1,0,0,114,136,1,0,0,90,17,115,117,112, - 112,111,114,116,101,100,95,108,111,97,100,101,114,115,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,95, - 105,110,115,116,97,108,108,148,9,0,0,115,16,0,0,0, - 0,2,13,1,9,1,28,1,16,1,16,1,15,1,19,1, - 114,138,1,0,0,41,3,122,3,119,105,110,114,1,0,0, - 0,114,2,0,0,0,41,92,114,59,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,17,0,0,0,114,19,0,0, - 0,114,28,0,0,0,114,38,0,0,0,114,39,0,0,0, - 114,43,0,0,0,114,44,0,0,0,114,46,0,0,0,114, - 55,0,0,0,114,65,0,0,0,114,68,0,0,0,114,66, - 0,0,0,218,8,95,95,99,111,100,101,95,95,114,194,0, - 0,0,114,69,0,0,0,114,109,0,0,0,114,92,0,0, - 0,114,99,0,0,0,114,82,0,0,0,114,83,0,0,0, - 114,102,0,0,0,114,103,0,0,0,114,105,0,0,0,114, - 112,0,0,0,114,114,0,0,0,114,15,0,0,0,114,186, - 0,0,0,114,14,0,0,0,114,18,0,0,0,90,17,95, - 82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82, - 114,124,0,0,0,114,135,0,0,0,114,119,0,0,0,114, - 120,0,0,0,114,132,0,0,0,114,136,0,0,0,114,143, - 0,0,0,114,145,0,0,0,114,153,0,0,0,114,157,0, - 0,0,114,162,0,0,0,114,165,0,0,0,114,173,0,0, - 0,114,181,0,0,0,114,191,0,0,0,114,196,0,0,0, - 114,199,0,0,0,114,204,0,0,0,114,212,0,0,0,114, - 213,0,0,0,114,217,0,0,0,114,174,0,0,0,218,6, - 111,98,106,101,99,116,114,242,0,0,0,114,240,0,0,0, - 114,248,0,0,0,114,175,0,0,0,114,10,1,0,0,114, - 11,1,0,0,114,20,1,0,0,114,23,1,0,0,114,33, - 1,0,0,114,34,1,0,0,114,49,1,0,0,114,9,1, - 0,0,114,8,1,0,0,114,60,1,0,0,114,57,1,0, - 0,114,61,1,0,0,114,252,0,0,0,114,74,1,0,0, - 114,87,1,0,0,114,102,1,0,0,114,105,1,0,0,114, - 106,1,0,0,114,108,1,0,0,114,111,1,0,0,114,120, - 1,0,0,114,112,1,0,0,114,114,1,0,0,114,115,1, - 0,0,114,116,1,0,0,114,122,1,0,0,114,124,1,0, - 0,114,241,0,0,0,114,127,1,0,0,114,128,1,0,0, - 114,137,1,0,0,114,138,1,0,0,114,4,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8, - 60,109,111,100,117,108,101,62,8,0,0,0,115,170,0,0, - 0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12, - 10,12,9,12,5,12,7,15,22,12,8,12,4,15,4,19, - 20,6,2,6,3,22,4,19,68,19,21,19,19,12,19,12, - 20,12,114,22,1,18,2,6,2,9,2,9,1,9,2,15, - 27,12,23,12,19,12,12,18,8,12,18,12,11,12,11,12, - 17,12,16,21,55,21,12,18,10,12,14,12,36,19,27,19, - 106,24,22,9,3,12,1,15,63,18,45,19,230,15,25,19, - 70,19,71,19,63,19,24,22,110,19,41,25,43,25,16,6, - 3,19,57,19,57,19,38,19,129,19,146,19,13,12,9,12, - 9,15,40,12,17,6,1,10,2,12,27,12,6,18,24,12, - 32,12,15,12,11,24,35,12,8,12,87, + 104,97,108,41,27,114,106,0,0,0,114,7,0,0,0,114, + 66,0,0,0,114,73,0,0,0,218,5,105,116,101,109,115, + 114,194,0,0,0,114,163,0,0,0,114,12,1,0,0,114, + 168,0,0,0,114,21,1,0,0,114,251,0,0,0,114,1, + 1,0,0,114,57,0,0,0,114,128,1,0,0,114,61,0, + 0,0,218,3,97,108,108,114,100,0,0,0,114,159,0,0, + 0,114,26,0,0,0,114,11,0,0,0,114,62,1,0,0, + 114,199,0,0,0,114,125,1,0,0,114,142,0,0,0,114, + 227,0,0,0,114,25,1,0,0,114,29,1,0,0,41,18, + 218,10,115,121,115,95,109,111,100,117,108,101,218,11,95,105, + 109,112,95,109,111,100,117,108,101,90,11,109,111,100,117,108, + 101,95,116,121,112,101,114,67,0,0,0,114,181,0,0,0, + 114,173,0,0,0,114,180,0,0,0,90,11,115,101,108,102, + 95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110, + 95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109, + 111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,108, + 115,90,10,98,117,105,108,116,105,110,95,111,115,114,21,0, + 0,0,114,25,0,0,0,90,9,111,115,95,109,111,100,117, + 108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,108, + 101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,108, + 101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 6,95,115,101,116,117,112,57,9,0,0,115,100,0,0,0, + 0,9,6,1,6,3,12,1,28,1,15,1,15,1,9,1, + 15,1,9,2,3,1,15,1,17,3,13,1,13,1,15,1, + 15,2,13,1,20,3,33,1,19,2,31,1,10,1,15,1, + 13,1,4,2,3,1,12,1,5,1,13,1,12,2,12,1, + 16,1,16,1,25,3,3,1,16,1,13,2,11,1,16,3, + 12,1,16,3,12,1,12,1,16,3,19,1,19,1,12,1, + 13,1,12,1,114,137,1,0,0,99,2,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,133, + 0,0,0,116,0,0,124,0,0,124,1,0,131,2,0,1, + 116,1,0,131,0,0,125,2,0,116,2,0,106,3,0,106, + 4,0,116,5,0,106,6,0,124,2,0,140,0,0,103,1, + 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,9, + 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,10, + 0,131,1,0,1,116,11,0,106,12,0,100,1,0,107,2, + 0,114,113,0,116,2,0,106,7,0,106,8,0,116,13,0, + 131,1,0,1,116,2,0,106,7,0,106,8,0,116,14,0, + 131,1,0,1,100,2,0,83,41,3,122,50,73,110,115,116, + 97,108,108,32,105,109,112,111,114,116,108,105,98,32,97,115, + 32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,105,109,112,111,114,116,46,114,131, + 1,0,0,78,41,15,114,137,1,0,0,114,243,0,0,0, + 114,7,0,0,0,114,81,1,0,0,114,199,0,0,0,114, + 89,1,0,0,114,102,1,0,0,114,108,1,0,0,114,227, + 0,0,0,114,12,1,0,0,114,21,1,0,0,114,3,0, + 0,0,114,57,0,0,0,114,25,1,0,0,114,76,1,0, + 0,41,3,114,135,1,0,0,114,136,1,0,0,90,17,115, + 117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 8,95,105,110,115,116,97,108,108,138,9,0,0,115,16,0, + 0,0,0,2,13,1,9,1,28,1,16,1,16,1,15,1, + 16,1,114,138,1,0,0,41,3,122,3,119,105,110,114,1, + 0,0,0,114,2,0,0,0,41,100,114,59,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,17,0,0,0,114,19, + 0,0,0,114,28,0,0,0,114,38,0,0,0,114,39,0, + 0,0,114,43,0,0,0,114,44,0,0,0,114,46,0,0, + 0,114,55,0,0,0,114,65,0,0,0,114,68,0,0,0, + 114,66,0,0,0,218,8,95,95,99,111,100,101,95,95,114, + 195,0,0,0,114,69,0,0,0,114,109,0,0,0,114,92, + 0,0,0,114,99,0,0,0,114,82,0,0,0,114,83,0, + 0,0,114,102,0,0,0,114,103,0,0,0,114,105,0,0, + 0,114,112,0,0,0,114,114,0,0,0,114,15,0,0,0, + 114,187,0,0,0,114,14,0,0,0,114,18,0,0,0,90, + 17,95,82,65,87,95,77,65,71,73,67,95,78,85,77,66, + 69,82,114,131,0,0,0,114,130,0,0,0,114,142,0,0, + 0,114,132,0,0,0,90,23,68,69,66,85,71,95,66,89, + 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,90, + 27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67, + 79,68,69,95,83,85,70,70,73,88,69,83,114,138,0,0, + 0,114,143,0,0,0,114,149,0,0,0,114,151,0,0,0, + 114,158,0,0,0,114,162,0,0,0,114,167,0,0,0,114, + 170,0,0,0,114,176,0,0,0,114,182,0,0,0,114,192, + 0,0,0,114,197,0,0,0,114,200,0,0,0,114,205,0, + 0,0,114,215,0,0,0,114,216,0,0,0,114,220,0,0, + 0,114,177,0,0,0,218,6,111,98,106,101,99,116,114,244, + 0,0,0,114,242,0,0,0,114,251,0,0,0,114,1,1, + 0,0,114,4,1,0,0,114,212,0,0,0,114,178,0,0, + 0,114,7,1,0,0,114,8,1,0,0,114,179,0,0,0, + 114,11,1,0,0,114,12,1,0,0,114,21,1,0,0,114, + 25,1,0,0,114,35,1,0,0,114,36,1,0,0,114,51, + 1,0,0,114,10,1,0,0,114,9,1,0,0,114,62,1, + 0,0,114,59,1,0,0,114,63,1,0,0,114,254,0,0, + 0,114,76,1,0,0,114,89,1,0,0,114,103,1,0,0, + 114,106,1,0,0,114,107,1,0,0,114,109,1,0,0,114, + 111,1,0,0,114,120,1,0,0,114,112,1,0,0,114,114, + 1,0,0,114,115,1,0,0,114,116,1,0,0,114,122,1, + 0,0,114,124,1,0,0,114,243,0,0,0,114,127,1,0, + 0,114,128,1,0,0,114,137,1,0,0,114,138,1,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,8,60,109,111,100,117,108,101,62,8,0, + 0,0,115,184,0,0,0,6,17,6,3,12,12,12,5,12, + 5,12,6,12,12,12,10,12,9,12,5,12,7,15,22,12, + 8,12,4,15,4,19,20,6,2,6,3,22,4,19,68,19, + 21,19,19,12,19,12,20,12,115,22,1,18,2,6,1,6, + 2,9,2,9,2,10,2,21,44,12,33,12,19,12,12,18, + 8,12,18,12,11,12,11,12,18,12,15,21,55,21,12,18, + 10,12,14,12,36,19,27,19,106,24,22,9,3,12,1,15, + 63,18,45,18,56,12,18,12,17,12,25,12,29,12,23,12, + 14,15,25,19,70,19,75,19,63,19,27,22,110,19,41,25, + 43,25,16,6,3,19,57,19,57,19,41,19,134,19,146,19, + 13,12,9,12,9,15,40,12,17,6,1,10,2,12,27,12, + 6,18,24,12,32,12,15,12,11,24,35,12,7,12,81, }; diff --git a/Python/marshal.c b/Python/marshal.c index 6f0ee5e..f89cd04 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -12,8 +12,7 @@ #include "longintrepr.h" #include "code.h" #include "marshal.h" - -#define ABS(x) ((x) < 0 ? -(x) : (x)) +#include "../Modules/hashtable.h" /* High water mark to determine when the marshalled object is dangerously deep * and risks coring the interpreter. When the object stack gets this deep, @@ -21,7 +20,7 @@ * On Windows debug builds, reduce this value. */ #if defined(MS_WINDOWS) && defined(_DEBUG) -#define MAX_MARSHAL_STACK_DEPTH 1500 +#define MAX_MARSHAL_STACK_DEPTH 1000 #else #define MAX_MARSHAL_STACK_DEPTH 2000 #endif @@ -66,54 +65,83 @@ typedef struct { FILE *fp; int error; /* see WFERR_* values */ int depth; - /* If fp == NULL, the following are valid: */ - PyObject *readable; /* Stream-like object being read from */ PyObject *str; - PyObject *current_filename; char *ptr; char *end; char *buf; - Py_ssize_t buf_size; - PyObject *refs; /* dict on marshal, list on unmarshal */ + _Py_hashtable_t *hashtable; int version; } WFILE; -#define w_byte(c, p) if (((p)->fp)) putc((c), (p)->fp); \ - else if ((p)->ptr != (p)->end) *(p)->ptr++ = (c); \ - else w_more((c), p) +#define w_byte(c, p) do { \ + if ((p)->ptr != (p)->end || w_reserve((p), 1)) \ + *(p)->ptr++ = (c); \ + } while(0) static void -w_more(char c, WFILE *p) +w_flush(WFILE *p) +{ + assert(p->fp != NULL); + fwrite(p->buf, 1, p->ptr - p->buf, p->fp); + p->ptr = p->buf; +} + +static int +w_reserve(WFILE *p, Py_ssize_t needed) { - Py_ssize_t size, newsize; - if (p->str == NULL) - return; /* An error already occurred */ + Py_ssize_t pos, size, delta; + if (p->ptr == NULL) + return 0; /* An error already occurred */ + if (p->fp != NULL) { + w_flush(p); + return needed <= p->end - p->ptr; + } + assert(p->str != NULL); + pos = p->ptr - p->buf; size = PyBytes_Size(p->str); - newsize = size + size + 1024; - if (newsize > 32*1024*1024) { - newsize = size + (size >> 3); /* 12.5% overallocation */ + if (size > 16*1024*1024) + delta = (size >> 3); /* 12.5% overallocation */ + else + delta = size + 1024; + delta = Py_MAX(delta, needed); + if (delta > PY_SSIZE_T_MAX - size) { + p->error = WFERR_NOMEMORY; + return 0; } - if (_PyBytes_Resize(&p->str, newsize) != 0) { - p->ptr = p->end = NULL; + size += delta; + if (_PyBytes_Resize(&p->str, size) != 0) { + p->ptr = p->buf = p->end = NULL; + return 0; } else { - p->ptr = PyBytes_AS_STRING((PyBytesObject *)p->str) + size; - p->end = - PyBytes_AS_STRING((PyBytesObject *)p->str) + newsize; - *p->ptr++ = c; + p->buf = PyBytes_AS_STRING(p->str); + p->ptr = p->buf + pos; + p->end = p->buf + size; + return 1; } } static void w_string(const char *s, Py_ssize_t n, WFILE *p) { + Py_ssize_t m; + if (!n || p->ptr == NULL) + return; + m = p->end - p->ptr; if (p->fp != NULL) { - fwrite(s, 1, n, p->fp); + if (n <= m) { + Py_MEMCPY(p->ptr, s, n); + p->ptr += n; + } + else { + w_flush(p); + fwrite(s, 1, n, p->fp); + } } else { - while (--n >= 0) { - w_byte(*s, p); - s++; + if (n <= m || w_reserve(p, n - m)) { + Py_MEMCPY(p->ptr, s, n); + p->ptr += n; } } } @@ -192,7 +220,7 @@ w_PyLong(const PyLongObject *ob, char flag, WFILE *p) } /* set l to number of base PyLong_MARSHAL_BASE digits */ - n = ABS(Py_SIZE(ob)); + n = Py_ABS(Py_SIZE(ob)); l = (n-1) * PyLong_MARSHAL_RATIO; d = ob->ob_digit[n-1]; assert(d != 0); /* a PyLong is always normalized */ @@ -225,46 +253,38 @@ w_PyLong(const PyLongObject *ob, char flag, WFILE *p) static int w_ref(PyObject *v, char *flag, WFILE *p) { - PyObject *id; - PyObject *idx; + _Py_hashtable_entry_t *entry; + int w; - if (p->version < 3 || p->refs == NULL) + if (p->version < 3 || p->hashtable == NULL) return 0; /* not writing object references */ /* if it has only one reference, it definitely isn't shared */ if (Py_REFCNT(v) == 1) return 0; - id = PyLong_FromVoidPtr((void*)v); - if (id == NULL) - goto err; - idx = PyDict_GetItem(p->refs, id); - if (idx != NULL) { + entry = _Py_hashtable_get_entry(p->hashtable, v); + if (entry != NULL) { /* write the reference index to the stream */ - long w = PyLong_AsLong(idx); - Py_DECREF(id); - if (w == -1 && PyErr_Occurred()) { - goto err; - } + _Py_HASHTABLE_ENTRY_READ_DATA(p->hashtable, &w, sizeof(w), entry); /* we don't store "long" indices in the dict */ assert(0 <= w && w <= 0x7fffffff); w_byte(TYPE_REF, p); w_long(w, p); return 1; } else { - int ok; - Py_ssize_t s = PyDict_Size(p->refs); + size_t s = p->hashtable->entries; /* we don't support long indices */ if (s >= 0x7fffffff) { PyErr_SetString(PyExc_ValueError, "too many objects"); goto err; } - idx = PyLong_FromSsize_t(s); - ok = idx && PyDict_SetItem(p->refs, id, idx) == 0; - Py_DECREF(id); - Py_XDECREF(idx); - if (!ok) + w = (int)s; + Py_INCREF(v); + if (_Py_HASHTABLE_SET(p->hashtable, v, w) < 0) { + Py_DECREF(v); goto err; + } *flag |= FLAG_REF; return 0; } @@ -547,37 +567,81 @@ w_complex_object(PyObject *v, char flag, WFILE *p) } } +static int +w_init_refs(WFILE *wf, int version) +{ + if (version >= 3) { + wf->hashtable = _Py_hashtable_new(sizeof(int), _Py_hashtable_hash_ptr, + _Py_hashtable_compare_direct); + if (wf->hashtable == NULL) { + PyErr_NoMemory(); + return -1; + } + } + return 0; +} + +static int +w_decref_entry(_Py_hashtable_entry_t *entry, void *Py_UNUSED(data)) +{ + Py_XDECREF(entry->key); + return 0; +} + +static void +w_clear_refs(WFILE *wf) +{ + if (wf->hashtable != NULL) { + _Py_hashtable_foreach(wf->hashtable, w_decref_entry, NULL); + _Py_hashtable_destroy(wf->hashtable); + } +} + /* version currently has no effect for writing ints. */ void PyMarshal_WriteLongToFile(long x, FILE *fp, int version) { + char buf[4]; WFILE wf; + memset(&wf, 0, sizeof(wf)); wf.fp = fp; + wf.ptr = wf.buf = buf; + wf.end = wf.ptr + sizeof(buf); wf.error = WFERR_OK; - wf.depth = 0; - wf.refs = NULL; wf.version = version; w_long(x, &wf); + w_flush(&wf); } void PyMarshal_WriteObjectToFile(PyObject *x, FILE *fp, int version) { + char buf[BUFSIZ]; WFILE wf; + memset(&wf, 0, sizeof(wf)); wf.fp = fp; + wf.ptr = wf.buf = buf; + wf.end = wf.ptr + sizeof(buf); wf.error = WFERR_OK; - wf.depth = 0; - if (version >= 3) { - if ((wf.refs = PyDict_New()) == NULL) - return; /* caller mush check PyErr_Occurred() */ - } else - wf.refs = NULL; wf.version = version; + if (w_init_refs(&wf, version)) + return; /* caller mush check PyErr_Occurred() */ w_object(x, &wf); - Py_XDECREF(wf.refs); + w_clear_refs(&wf); + w_flush(&wf); } -typedef WFILE RFILE; /* Same struct with different invariants */ +typedef struct { + FILE *fp; + int depth; + PyObject *readable; /* Stream-like object being read from */ + PyObject *current_filename; + char *ptr; + char *end; + char *buf; + Py_ssize_t buf_size; + PyObject *refs; /* a list */ +} RFILE; static char * r_string(Py_ssize_t n, RFILE *p) @@ -727,8 +791,8 @@ r_PyLong(RFILE *p) return NULL; } - size = 1 + (ABS(n) - 1) / PyLong_MARSHAL_RATIO; - shorts_in_top_digit = 1 + (ABS(n) - 1) % PyLong_MARSHAL_RATIO; + size = 1 + (Py_ABS(n) - 1) / PyLong_MARSHAL_RATIO; + shorts_in_top_digit = 1 + (Py_ABS(n) - 1) % PyLong_MARSHAL_RATIO; ob = _PyLong_New(size); if (ob == NULL) return NULL; @@ -1417,18 +1481,20 @@ PyMarshal_ReadLongFromFile(FILE *fp) return res; } -#ifdef HAVE_FSTAT -/* Return size of file in bytes; < 0 if unknown. */ +/* Return size of file in bytes; < 0 if unknown or INT_MAX if too big */ static off_t getfilesize(FILE *fp) { - struct stat st; - if (fstat(fileno(fp), &st) != 0) + struct _Py_stat_struct st; + if (_Py_fstat_noraise(fileno(fp), &st) != 0) return -1; +#if SIZEOF_OFF_T == 4 + else if (st.st_size >= INT_MAX) + return (off_t)INT_MAX; +#endif else - return st.st_size; + return (off_t)st.st_size; } -#endif /* If we can get the size of the file up-front, and it's reasonably small, * read it in one gulp and delegate to ...FromString() instead. Much quicker @@ -1441,7 +1507,6 @@ PyMarshal_ReadLastObjectFromFile(FILE *fp) { /* REASONABLE_FILE_LIMIT is by defn something big enough for Tkinter.pyc. */ #define REASONABLE_FILE_LIMIT (1L << 18) -#ifdef HAVE_FSTAT off_t filesize; filesize = getfilesize(fp); if (filesize > 0 && filesize <= REASONABLE_FILE_LIMIT) { @@ -1454,7 +1519,6 @@ PyMarshal_ReadLastObjectFromFile(FILE *fp) } } -#endif /* We don't have fstat, or we do but the file is larger than * REASONABLE_FILE_LIMIT or malloc failed -- read a byte at a time. */ @@ -1511,25 +1575,20 @@ PyMarshal_WriteObjectToString(PyObject *x, int version) { WFILE wf; - wf.fp = NULL; - wf.readable = NULL; + memset(&wf, 0, sizeof(wf)); wf.str = PyBytes_FromStringAndSize((char *)NULL, 50); if (wf.str == NULL) return NULL; - wf.ptr = PyBytes_AS_STRING((PyBytesObject *)wf.str); + wf.ptr = wf.buf = PyBytes_AS_STRING((PyBytesObject *)wf.str); wf.end = wf.ptr + PyBytes_Size(wf.str); wf.error = WFERR_OK; - wf.depth = 0; wf.version = version; - if (version >= 3) { - if ((wf.refs = PyDict_New()) == NULL) { - Py_DECREF(wf.str); - return NULL; - } - } else - wf.refs = NULL; + if (w_init_refs(&wf, version)) { + Py_DECREF(wf.str); + return NULL; + } w_object(x, &wf); - Py_XDECREF(wf.refs); + w_clear_refs(&wf); if (wf.str != NULL) { char *base = PyBytes_AS_STRING((PyBytesObject *)wf.str); if (wf.ptr - base > PY_SSIZE_T_MAX) { diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index f90a17a..1553a7a 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -15,8 +15,8 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&_unknown_opcode, &&TARGET_UNARY_INVERT, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_BINARY_MATRIX_MULTIPLY, + &&TARGET_INPLACE_MATRIX_MULTIPLY, &&_unknown_opcode, &&TARGET_BINARY_POWER, &&TARGET_BINARY_MULTIPLY, diff --git a/Python/peephole.c b/Python/peephole.c index c56c8fc..2f8f0e5 100644 --- a/Python/peephole.c +++ b/Python/peephole.c @@ -18,7 +18,11 @@ || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP) #define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP) #define GETJUMPTGT(arr, i) (GETARG(arr,i) + (ABSOLUTE_JUMP(arr[i]) ? 0 : i+3)) -#define SETARG(arr, i, val) arr[i+2] = val>>8; arr[i+1] = val & 255 +#define SETARG(arr, i, val) do { \ + assert(0 <= val && val <= 0xffff); \ + arr[i+2] = (unsigned char)(((unsigned int)val)>>8); \ + arr[i+1] = (unsigned char)(((unsigned int)val) & 255); \ +} while(0) #define CODESIZE(op) (HAS_ARG(op) ? 3 : 1) #define ISBASICBLOCK(blocks, start, bytes) \ (blocks[start]==blocks[start+bytes-1]) @@ -355,7 +359,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, unsigned char *codestr = NULL; unsigned char *lineno; int *addrmap = NULL; - int new_line, cum_orig_line, last_line, tabsiz; + int new_line, cum_orig_line, last_line; + Py_ssize_t tabsiz; PyObject **const_stack = NULL; Py_ssize_t *load_const_stack = NULL; Py_ssize_t const_stack_top = -1; @@ -660,7 +665,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Fixup linenotab */ for (i=0, nops=0 ; i<codelen ; i += CODESIZE(codestr[i])) { - addrmap[i] = i - nops; + assert(i - nops <= INT_MAX); + addrmap[i] = (int)(i - nops); if (codestr[i] == NOP) nops++; } diff --git a/Python/pyfpe.c b/Python/pyfpe.c index 4b7f5ba..ab0ef83 100644 --- a/Python/pyfpe.c +++ b/Python/pyfpe.c @@ -1,6 +1,6 @@ #include "pyconfig.h" #include "pyfpe.h" -/* +/* * The signal handler for SIGFPE is actually declared in an external * module fpectl, or as preferred by the user. These variable * definitions are required in order to compile Python without @@ -13,7 +13,7 @@ jmp_buf PyFPE_jbuf; int PyFPE_counter = 0; #endif -/* Have this outside the above #ifdef, since some picky ANSI compilers issue a +/* Have this outside the above #ifdef, since some picky ANSI compilers issue a warning when compiling an empty file. */ double diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c new file mode 100644 index 0000000..a17adf7 --- /dev/null +++ b/Python/pylifecycle.c @@ -0,0 +1,1586 @@ + +/* Python interpreter top-level routines, including init/exit */ + +#include "Python.h" + +#include "Python-ast.h" +#undef Yield /* undefine macro conflicting with winbase.h */ +#include "grammar.h" +#include "node.h" +#include "token.h" +#include "parsetok.h" +#include "errcode.h" +#include "code.h" +#include "symtable.h" +#include "ast.h" +#include "marshal.h" +#include "osdefs.h" +#include <locale.h> + +#ifdef HAVE_SIGNAL_H +#include <signal.h> +#endif + +#ifdef MS_WINDOWS +#include "malloc.h" /* for alloca */ +#endif + +#ifdef HAVE_LANGINFO_H +#include <langinfo.h> +#endif + +#ifdef MS_WINDOWS +#undef BYTE +#include "windows.h" +#endif + +_Py_IDENTIFIER(flush); +_Py_IDENTIFIER(name); +_Py_IDENTIFIER(stdin); +_Py_IDENTIFIER(stdout); +_Py_IDENTIFIER(stderr); + +#ifdef __cplusplus +extern "C" { +#endif + +extern wchar_t *Py_GetPath(void); + +extern grammar _PyParser_Grammar; /* From graminit.c */ + +/* Forward */ +static void initmain(PyInterpreterState *interp); +static int initfsencoding(PyInterpreterState *interp); +static void initsite(void); +static int initstdio(void); +static void initsigs(void); +static void call_py_exitfuncs(void); +static void wait_for_thread_shutdown(void); +static void call_ll_exitfuncs(void); +extern int _PyUnicode_Init(void); +extern int _PyStructSequence_Init(void); +extern void _PyUnicode_Fini(void); +extern int _PyLong_Init(void); +extern void PyLong_Fini(void); +extern int _PyFaulthandler_Init(void); +extern void _PyFaulthandler_Fini(void); +extern void _PyHash_Fini(void); +extern int _PyTraceMalloc_Init(void); +extern int _PyTraceMalloc_Fini(void); + +#ifdef WITH_THREAD +extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *); +extern void _PyGILState_Fini(void); +#endif /* WITH_THREAD */ + +/* Global configuration variable declarations are in pydebug.h */ +/* XXX (ncoghlan): move those declarations to pylifecycle.h? */ +int Py_DebugFlag; /* Needed by parser.c */ +int Py_VerboseFlag; /* Needed by import.c */ +int Py_QuietFlag; /* Needed by sysmodule.c */ +int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */ +int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */ +int Py_OptimizeFlag = 0; /* Needed by compile.c */ +int Py_NoSiteFlag; /* Suppress 'import site' */ +int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */ +int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */ +int Py_FrozenFlag; /* Needed by getpath.c */ +int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */ +int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */ +int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ +int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */ +int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */ +int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */ + +PyThreadState *_Py_Finalizing = NULL; + +/* Hack to force loading of object files */ +int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \ + PyOS_mystrnicmp; /* Python/pystrcmp.o */ + +/* PyModule_GetWarningsModule is no longer necessary as of 2.6 +since _warnings is builtin. This API should not be used. */ +PyObject * +PyModule_GetWarningsModule(void) +{ + return PyImport_ImportModule("warnings"); +} + +static int initialized = 0; + +/* API to access the initialized flag -- useful for esoteric use */ + +int +Py_IsInitialized(void) +{ + return initialized; +} + +/* Helper to allow an embedding application to override the normal + * mechanism that attempts to figure out an appropriate IO encoding + */ + +static char *_Py_StandardStreamEncoding = NULL; +static char *_Py_StandardStreamErrors = NULL; + +int +Py_SetStandardStreamEncoding(const char *encoding, const char *errors) +{ + if (Py_IsInitialized()) { + /* This is too late to have any effect */ + return -1; + } + /* Can't call PyErr_NoMemory() on errors, as Python hasn't been + * initialised yet. + * + * However, the raw memory allocators are initialised appropriately + * as C static variables, so _PyMem_RawStrdup is OK even though + * Py_Initialize hasn't been called yet. + */ + if (encoding) { + _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding); + if (!_Py_StandardStreamEncoding) { + return -2; + } + } + if (errors) { + _Py_StandardStreamErrors = _PyMem_RawStrdup(errors); + if (!_Py_StandardStreamErrors) { + if (_Py_StandardStreamEncoding) { + PyMem_RawFree(_Py_StandardStreamEncoding); + } + return -3; + } + } + return 0; +} + +/* Global initializations. Can be undone by Py_Finalize(). Don't + call this twice without an intervening Py_Finalize() call. When + initializations fail, a fatal error is issued and the function does + not return. On return, the first thread and interpreter state have + been created. + + Locking: you must hold the interpreter lock while calling this. + (If the lock has not yet been initialized, that's equivalent to + having the lock, but you cannot use multiple threads.) + +*/ + +static int +add_flag(int flag, const char *envs) +{ + int env = atoi(envs); + if (flag < env) + flag = env; + if (flag < 1) + flag = 1; + return flag; +} + +static char* +get_codec_name(const char *encoding) +{ + char *name_utf8, *name_str; + PyObject *codec, *name = NULL; + + codec = _PyCodec_Lookup(encoding); + if (!codec) + goto error; + + name = _PyObject_GetAttrId(codec, &PyId_name); + Py_CLEAR(codec); + if (!name) + goto error; + + name_utf8 = _PyUnicode_AsString(name); + if (name_utf8 == NULL) + goto error; + name_str = _PyMem_RawStrdup(name_utf8); + Py_DECREF(name); + if (name_str == NULL) { + PyErr_NoMemory(); + return NULL; + } + return name_str; + +error: + Py_XDECREF(codec); + Py_XDECREF(name); + return NULL; +} + +static char* +get_locale_encoding(void) +{ +#ifdef MS_WINDOWS + char codepage[100]; + PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP()); + return get_codec_name(codepage); +#elif defined(HAVE_LANGINFO_H) && defined(CODESET) + char* codeset = nl_langinfo(CODESET); + if (!codeset || codeset[0] == '\0') { + PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty"); + return NULL; + } + return get_codec_name(codeset); +#else + PyErr_SetNone(PyExc_NotImplementedError); + return NULL; +#endif +} + +static void +import_init(PyInterpreterState *interp, PyObject *sysmod) +{ + PyObject *importlib; + PyObject *impmod; + PyObject *sys_modules; + PyObject *value; + + /* Import _importlib through its frozen version, _frozen_importlib. */ + if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) { + Py_FatalError("Py_Initialize: can't import _frozen_importlib"); + } + else if (Py_VerboseFlag) { + PySys_FormatStderr("import _frozen_importlib # frozen\n"); + } + importlib = PyImport_AddModule("_frozen_importlib"); + if (importlib == NULL) { + Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from " + "sys.modules"); + } + interp->importlib = importlib; + Py_INCREF(interp->importlib); + + /* Install _importlib as __import__ */ + impmod = PyInit_imp(); + if (impmod == NULL) { + Py_FatalError("Py_Initialize: can't import imp"); + } + else if (Py_VerboseFlag) { + PySys_FormatStderr("import imp # builtin\n"); + } + sys_modules = PyImport_GetModuleDict(); + if (Py_VerboseFlag) { + PySys_FormatStderr("import sys # builtin\n"); + } + if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) { + Py_FatalError("Py_Initialize: can't save _imp to sys.modules"); + } + + value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod); + if (value == NULL) { + PyErr_Print(); + Py_FatalError("Py_Initialize: importlib install failed"); + } + Py_DECREF(value); + Py_DECREF(impmod); + + _PyImportZip_Init(); +} + + +void +_Py_InitializeEx_Private(int install_sigs, int install_importlib) +{ + PyInterpreterState *interp; + PyThreadState *tstate; + PyObject *bimod, *sysmod, *pstderr; + char *p; + extern void _Py_ReadyTypes(void); + + if (initialized) + return; + initialized = 1; + _Py_Finalizing = NULL; + +#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE) + /* Set up the LC_CTYPE locale, so we can obtain + the locale's charset without having to switch + locales. */ + setlocale(LC_CTYPE, ""); +#endif + + if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0') + Py_DebugFlag = add_flag(Py_DebugFlag, p); + if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0') + Py_VerboseFlag = add_flag(Py_VerboseFlag, p); + if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') + Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p); + if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0') + Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p); + /* The variable is only tested for existence here; _PyRandom_Init will + check its value further. */ + if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0') + Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p); + + _PyRandom_Init(); + + interp = PyInterpreterState_New(); + if (interp == NULL) + Py_FatalError("Py_Initialize: can't make first interpreter"); + + tstate = PyThreadState_New(interp); + if (tstate == NULL) + Py_FatalError("Py_Initialize: can't make first thread"); + (void) PyThreadState_Swap(tstate); + +#ifdef WITH_THREAD + /* We can't call _PyEval_FiniThreads() in Py_Finalize because + destroying the GIL might fail when it is being referenced from + another running thread (see issue #9901). + Instead we destroy the previously created GIL here, which ensures + that we can call Py_Initialize / Py_Finalize multiple times. */ + _PyEval_FiniThreads(); + + /* Auto-thread-state API */ + _PyGILState_Init(interp, tstate); +#endif /* WITH_THREAD */ + + _Py_ReadyTypes(); + + if (!_PyFrame_Init()) + Py_FatalError("Py_Initialize: can't init frames"); + + if (!_PyLong_Init()) + Py_FatalError("Py_Initialize: can't init longs"); + + if (!PyByteArray_Init()) + Py_FatalError("Py_Initialize: can't init bytearray"); + + if (!_PyFloat_Init()) + Py_FatalError("Py_Initialize: can't init float"); + + interp->modules = PyDict_New(); + if (interp->modules == NULL) + Py_FatalError("Py_Initialize: can't make modules dictionary"); + + /* Init Unicode implementation; relies on the codec registry */ + if (_PyUnicode_Init() < 0) + Py_FatalError("Py_Initialize: can't initialize unicode"); + if (_PyStructSequence_Init() < 0) + Py_FatalError("Py_Initialize: can't initialize structseq"); + + bimod = _PyBuiltin_Init(); + if (bimod == NULL) + Py_FatalError("Py_Initialize: can't initialize builtins modules"); + _PyImport_FixupBuiltin(bimod, "builtins"); + interp->builtins = PyModule_GetDict(bimod); + if (interp->builtins == NULL) + Py_FatalError("Py_Initialize: can't initialize builtins dict"); + Py_INCREF(interp->builtins); + + /* initialize builtin exceptions */ + _PyExc_Init(bimod); + + sysmod = _PySys_Init(); + if (sysmod == NULL) + Py_FatalError("Py_Initialize: can't initialize sys"); + interp->sysdict = PyModule_GetDict(sysmod); + if (interp->sysdict == NULL) + Py_FatalError("Py_Initialize: can't initialize sys dict"); + Py_INCREF(interp->sysdict); + _PyImport_FixupBuiltin(sysmod, "sys"); + PySys_SetPath(Py_GetPath()); + PyDict_SetItemString(interp->sysdict, "modules", + interp->modules); + + /* Set up a preliminary stderr printer until we have enough + infrastructure for the io module in place. */ + pstderr = PyFile_NewStdPrinter(fileno(stderr)); + if (pstderr == NULL) + Py_FatalError("Py_Initialize: can't set preliminary stderr"); + _PySys_SetObjectId(&PyId_stderr, pstderr); + PySys_SetObject("__stderr__", pstderr); + Py_DECREF(pstderr); + + _PyImport_Init(); + + _PyImportHooks_Init(); + + /* Initialize _warnings. */ + _PyWarnings_Init(); + + if (!install_importlib) + return; + + if (_PyTime_Init() < 0) + Py_FatalError("Py_Initialize: can't initialize time"); + + import_init(interp, sysmod); + + /* initialize the faulthandler module */ + if (_PyFaulthandler_Init()) + Py_FatalError("Py_Initialize: can't initialize faulthandler"); + + if (initfsencoding(interp) < 0) + Py_FatalError("Py_Initialize: unable to load the file system codec"); + + if (install_sigs) + initsigs(); /* Signal handling stuff, including initintr() */ + + if (_PyTraceMalloc_Init() < 0) + Py_FatalError("Py_Initialize: can't initialize tracemalloc"); + + initmain(interp); /* Module __main__ */ + if (initstdio() < 0) + Py_FatalError( + "Py_Initialize: can't initialize sys standard streams"); + + /* Initialize warnings. */ + if (PySys_HasWarnOptions()) { + PyObject *warnings_module = PyImport_ImportModule("warnings"); + if (warnings_module == NULL) { + fprintf(stderr, "'import warnings' failed; traceback:\n"); + PyErr_Print(); + } + Py_XDECREF(warnings_module); + } + + if (!Py_NoSiteFlag) + initsite(); /* Module site */ +} + +void +Py_InitializeEx(int install_sigs) +{ + _Py_InitializeEx_Private(install_sigs, 1); +} + +void +Py_Initialize(void) +{ + Py_InitializeEx(1); +} + + +#ifdef COUNT_ALLOCS +extern void dump_counts(FILE*); +#endif + +/* Flush stdout and stderr */ + +static int +file_is_closed(PyObject *fobj) +{ + int r; + PyObject *tmp = PyObject_GetAttrString(fobj, "closed"); + if (tmp == NULL) { + PyErr_Clear(); + return 0; + } + r = PyObject_IsTrue(tmp); + Py_DECREF(tmp); + if (r < 0) + PyErr_Clear(); + return r > 0; +} + +static void +flush_std_files(void) +{ + PyObject *fout = _PySys_GetObjectId(&PyId_stdout); + PyObject *ferr = _PySys_GetObjectId(&PyId_stderr); + PyObject *tmp; + + if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { + tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); + if (tmp == NULL) + PyErr_WriteUnraisable(fout); + else + Py_DECREF(tmp); + } + + if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) { + tmp = _PyObject_CallMethodId(ferr, &PyId_flush, ""); + if (tmp == NULL) + PyErr_Clear(); + else + Py_DECREF(tmp); + } +} + +/* Undo the effect of Py_Initialize(). + + Beware: if multiple interpreter and/or thread states exist, these + are not wiped out; only the current thread and interpreter state + are deleted. But since everything else is deleted, those other + interpreter and thread states should no longer be used. + + (XXX We should do better, e.g. wipe out all interpreters and + threads.) + + Locking: as above. + +*/ + +void +Py_Finalize(void) +{ + PyInterpreterState *interp; + PyThreadState *tstate; + + if (!initialized) + return; + + wait_for_thread_shutdown(); + + /* The interpreter is still entirely intact at this point, and the + * exit funcs may be relying on that. In particular, if some thread + * or exit func is still waiting to do an import, the import machinery + * expects Py_IsInitialized() to return true. So don't say the + * interpreter is uninitialized until after the exit funcs have run. + * Note that Threading.py uses an exit func to do a join on all the + * threads created thru it, so this also protects pending imports in + * the threads created via Threading. + */ + call_py_exitfuncs(); + + /* Get current thread state and interpreter pointer */ + tstate = PyThreadState_GET(); + interp = tstate->interp; + + /* Remaining threads (e.g. daemon threads) will automatically exit + after taking the GIL (in PyEval_RestoreThread()). */ + _Py_Finalizing = tstate; + initialized = 0; + + /* Flush sys.stdout and sys.stderr */ + flush_std_files(); + + /* Disable signal handling */ + PyOS_FiniInterrupts(); + + /* Collect garbage. This may call finalizers; it's nice to call these + * before all modules are destroyed. + * XXX If a __del__ or weakref callback is triggered here, and tries to + * XXX import a module, bad things can happen, because Python no + * XXX longer believes it's initialized. + * XXX Fatal Python error: Interpreter not initialized (version mismatch?) + * XXX is easy to provoke that way. I've also seen, e.g., + * XXX Exception exceptions.ImportError: 'No module named sha' + * XXX in <function callback at 0x008F5718> ignored + * XXX but I'm unclear on exactly how that one happens. In any case, + * XXX I haven't seen a real-life report of either of these. + */ + PyGC_Collect(); +#ifdef COUNT_ALLOCS + /* With COUNT_ALLOCS, it helps to run GC multiple times: + each collection might release some types from the type + list, so they become garbage. */ + while (PyGC_Collect() > 0) + /* nothing */; +#endif + /* Destroy all modules */ + PyImport_Cleanup(); + + /* Flush sys.stdout and sys.stderr (again, in case more was printed) */ + flush_std_files(); + + /* Collect final garbage. This disposes of cycles created by + * class definitions, for example. + * XXX This is disabled because it caused too many problems. If + * XXX a __del__ or weakref callback triggers here, Python code has + * XXX a hard time running, because even the sys module has been + * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc). + * XXX One symptom is a sequence of information-free messages + * XXX coming from threads (if a __del__ or callback is invoked, + * XXX other threads can execute too, and any exception they encounter + * XXX triggers a comedy of errors as subsystem after subsystem + * XXX fails to find what it *expects* to find in sys to help report + * XXX the exception and consequent unexpected failures). I've also + * XXX seen segfaults then, after adding print statements to the + * XXX Python code getting called. + */ +#if 0 + PyGC_Collect(); +#endif + + /* Disable tracemalloc after all Python objects have been destroyed, + so it is possible to use tracemalloc in objects destructor. */ + _PyTraceMalloc_Fini(); + + /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ + _PyImport_Fini(); + + /* Cleanup typeobject.c's internal caches. */ + _PyType_Fini(); + + /* unload faulthandler module */ + _PyFaulthandler_Fini(); + + /* Debugging stuff */ +#ifdef COUNT_ALLOCS + dump_counts(stdout); +#endif + /* dump hash stats */ + _PyHash_Fini(); + + _PY_DEBUG_PRINT_TOTAL_REFS(); + +#ifdef Py_TRACE_REFS + /* Display all objects still alive -- this can invoke arbitrary + * __repr__ overrides, so requires a mostly-intact interpreter. + * Alas, a lot of stuff may still be alive now that will be cleaned + * up later. + */ + if (Py_GETENV("PYTHONDUMPREFS")) + _Py_PrintReferences(stderr); +#endif /* Py_TRACE_REFS */ + + /* Clear interpreter state and all thread states. */ + PyInterpreterState_Clear(interp); + + /* Now we decref the exception classes. After this point nothing + can raise an exception. That's okay, because each Fini() method + below has been checked to make sure no exceptions are ever + raised. + */ + + _PyExc_Fini(); + + /* Sundry finalizers */ + PyMethod_Fini(); + PyFrame_Fini(); + PyCFunction_Fini(); + PyTuple_Fini(); + PyList_Fini(); + PySet_Fini(); + PyBytes_Fini(); + PyByteArray_Fini(); + PyLong_Fini(); + PyFloat_Fini(); + PyDict_Fini(); + PySlice_Fini(); + _PyGC_Fini(); + _PyRandom_Fini(); + + /* Cleanup Unicode implementation */ + _PyUnicode_Fini(); + + /* reset file system default encoding */ + if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) { + PyMem_RawFree((char*)Py_FileSystemDefaultEncoding); + Py_FileSystemDefaultEncoding = NULL; + } + + /* XXX Still allocated: + - various static ad-hoc pointers to interned strings + - int and float free list blocks + - whatever various modules and libraries allocate + */ + + PyGrammar_RemoveAccelerators(&_PyParser_Grammar); + + /* Cleanup auto-thread-state */ +#ifdef WITH_THREAD + _PyGILState_Fini(); +#endif /* WITH_THREAD */ + + /* Delete current thread. After this, many C API calls become crashy. */ + PyThreadState_Swap(NULL); + PyInterpreterState_Delete(interp); + +#ifdef Py_TRACE_REFS + /* Display addresses (& refcnts) of all objects still alive. + * An address can be used to find the repr of the object, printed + * above by _Py_PrintReferences. + */ + if (Py_GETENV("PYTHONDUMPREFS")) + _Py_PrintReferenceAddresses(stderr); +#endif /* Py_TRACE_REFS */ +#ifdef PYMALLOC_DEBUG + if (Py_GETENV("PYTHONMALLOCSTATS")) + _PyObject_DebugMallocStats(stderr); +#endif + + call_ll_exitfuncs(); +} + +/* Create and initialize a new interpreter and thread, and return the + new thread. This requires that Py_Initialize() has been called + first. + + Unsuccessful initialization yields a NULL pointer. Note that *no* + exception information is available even in this case -- the + exception information is held in the thread, and there is no + thread. + + Locking: as above. + +*/ + +PyThreadState * +Py_NewInterpreter(void) +{ + PyInterpreterState *interp; + PyThreadState *tstate, *save_tstate; + PyObject *bimod, *sysmod; + + if (!initialized) + Py_FatalError("Py_NewInterpreter: call Py_Initialize first"); + + interp = PyInterpreterState_New(); + if (interp == NULL) + return NULL; + + tstate = PyThreadState_New(interp); + if (tstate == NULL) { + PyInterpreterState_Delete(interp); + return NULL; + } + + save_tstate = PyThreadState_Swap(tstate); + + /* XXX The following is lax in error checking */ + + interp->modules = PyDict_New(); + + bimod = _PyImport_FindBuiltin("builtins"); + if (bimod != NULL) { + interp->builtins = PyModule_GetDict(bimod); + if (interp->builtins == NULL) + goto handle_error; + Py_INCREF(interp->builtins); + } + + /* initialize builtin exceptions */ + _PyExc_Init(bimod); + + sysmod = _PyImport_FindBuiltin("sys"); + if (bimod != NULL && sysmod != NULL) { + PyObject *pstderr; + + interp->sysdict = PyModule_GetDict(sysmod); + if (interp->sysdict == NULL) + goto handle_error; + Py_INCREF(interp->sysdict); + PySys_SetPath(Py_GetPath()); + PyDict_SetItemString(interp->sysdict, "modules", + interp->modules); + /* Set up a preliminary stderr printer until we have enough + infrastructure for the io module in place. */ + pstderr = PyFile_NewStdPrinter(fileno(stderr)); + if (pstderr == NULL) + Py_FatalError("Py_Initialize: can't set preliminary stderr"); + _PySys_SetObjectId(&PyId_stderr, pstderr); + PySys_SetObject("__stderr__", pstderr); + Py_DECREF(pstderr); + + _PyImportHooks_Init(); + + import_init(interp, sysmod); + + if (initfsencoding(interp) < 0) + goto handle_error; + + if (initstdio() < 0) + Py_FatalError( + "Py_Initialize: can't initialize sys standard streams"); + initmain(interp); + if (!Py_NoSiteFlag) + initsite(); + } + + if (!PyErr_Occurred()) + return tstate; + +handle_error: + /* Oops, it didn't work. Undo it all. */ + + PyErr_PrintEx(0); + PyThreadState_Clear(tstate); + PyThreadState_Swap(save_tstate); + PyThreadState_Delete(tstate); + PyInterpreterState_Delete(interp); + + return NULL; +} + +/* Delete an interpreter and its last thread. This requires that the + given thread state is current, that the thread has no remaining + frames, and that it is its interpreter's only remaining thread. + It is a fatal error to violate these constraints. + + (Py_Finalize() doesn't have these constraints -- it zaps + everything, regardless.) + + Locking: as above. + +*/ + +void +Py_EndInterpreter(PyThreadState *tstate) +{ + PyInterpreterState *interp = tstate->interp; + + if (tstate != PyThreadState_GET()) + Py_FatalError("Py_EndInterpreter: thread is not current"); + if (tstate->frame != NULL) + Py_FatalError("Py_EndInterpreter: thread still has a frame"); + + wait_for_thread_shutdown(); + + if (tstate != interp->tstate_head || tstate->next != NULL) + Py_FatalError("Py_EndInterpreter: not the last thread"); + + PyImport_Cleanup(); + PyInterpreterState_Clear(interp); + PyThreadState_Swap(NULL); + PyInterpreterState_Delete(interp); +} + +#ifdef MS_WINDOWS +static wchar_t *progname = L"python"; +#else +static wchar_t *progname = L"python3"; +#endif + +void +Py_SetProgramName(wchar_t *pn) +{ + if (pn && *pn) + progname = pn; +} + +wchar_t * +Py_GetProgramName(void) +{ + return progname; +} + +static wchar_t *default_home = NULL; +static wchar_t env_home[MAXPATHLEN+1]; + +void +Py_SetPythonHome(wchar_t *home) +{ + default_home = home; +} + +wchar_t * +Py_GetPythonHome(void) +{ + wchar_t *home = default_home; + if (home == NULL && !Py_IgnoreEnvironmentFlag) { + char* chome = Py_GETENV("PYTHONHOME"); + if (chome) { + size_t size = Py_ARRAY_LENGTH(env_home); + size_t r = mbstowcs(env_home, chome, size); + if (r != (size_t)-1 && r < size) + home = env_home; + } + + } + return home; +} + +/* Create __main__ module */ + +static void +initmain(PyInterpreterState *interp) +{ + PyObject *m, *d, *loader; + m = PyImport_AddModule("__main__"); + if (m == NULL) + Py_FatalError("can't create __main__ module"); + d = PyModule_GetDict(m); + if (PyDict_GetItemString(d, "__builtins__") == NULL) { + PyObject *bimod = PyImport_ImportModule("builtins"); + if (bimod == NULL) { + Py_FatalError("Failed to retrieve builtins module"); + } + if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) { + Py_FatalError("Failed to initialize __main__.__builtins__"); + } + Py_DECREF(bimod); + } + /* Main is a little special - imp.is_builtin("__main__") will return + * False, but BuiltinImporter is still the most appropriate initial + * setting for its __loader__ attribute. A more suitable value will + * be set if __main__ gets further initialized later in the startup + * process. + */ + loader = PyDict_GetItemString(d, "__loader__"); + if (loader == NULL || loader == Py_None) { + PyObject *loader = PyObject_GetAttrString(interp->importlib, + "BuiltinImporter"); + if (loader == NULL) { + Py_FatalError("Failed to retrieve BuiltinImporter"); + } + if (PyDict_SetItemString(d, "__loader__", loader) < 0) { + Py_FatalError("Failed to initialize __main__.__loader__"); + } + Py_DECREF(loader); + } +} + +static int +initfsencoding(PyInterpreterState *interp) +{ + PyObject *codec; + + if (Py_FileSystemDefaultEncoding == NULL) + { + Py_FileSystemDefaultEncoding = get_locale_encoding(); + if (Py_FileSystemDefaultEncoding == NULL) + Py_FatalError("Py_Initialize: Unable to get the locale encoding"); + + Py_HasFileSystemDefaultEncoding = 0; + interp->fscodec_initialized = 1; + return 0; + } + + /* the encoding is mbcs, utf-8 or ascii */ + codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding); + if (!codec) { + /* Such error can only occurs in critical situations: no more + * memory, import a module of the standard library failed, + * etc. */ + return -1; + } + Py_DECREF(codec); + interp->fscodec_initialized = 1; + return 0; +} + +/* Import the site module (not into __main__ though) */ + +static void +initsite(void) +{ + PyObject *m; + m = PyImport_ImportModule("site"); + if (m == NULL) { + fprintf(stderr, "Failed to import the site module\n"); + PyErr_Print(); + Py_Finalize(); + exit(1); + } + else { + Py_DECREF(m); + } +} + +static PyObject* +create_stdio(PyObject* io, + int fd, int write_mode, char* name, + char* encoding, char* errors) +{ + PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res; + const char* mode; + const char* newline; + PyObject *line_buffering; + int buffering, isatty; + _Py_IDENTIFIER(open); + _Py_IDENTIFIER(isatty); + _Py_IDENTIFIER(TextIOWrapper); + _Py_IDENTIFIER(mode); + + /* stdin is always opened in buffered mode, first because it shouldn't + make a difference in common use cases, second because TextIOWrapper + depends on the presence of a read1() method which only exists on + buffered streams. + */ + if (Py_UnbufferedStdioFlag && write_mode) + buffering = 0; + else + buffering = -1; + if (write_mode) + mode = "wb"; + else + mode = "rb"; + buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi", + fd, mode, buffering, + Py_None, Py_None, Py_None, 0); + if (buf == NULL) + goto error; + + if (buffering) { + _Py_IDENTIFIER(raw); + raw = _PyObject_GetAttrId(buf, &PyId_raw); + if (raw == NULL) + goto error; + } + else { + raw = buf; + Py_INCREF(raw); + } + + text = PyUnicode_FromString(name); + if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0) + goto error; + res = _PyObject_CallMethodId(raw, &PyId_isatty, ""); + if (res == NULL) + goto error; + isatty = PyObject_IsTrue(res); + Py_DECREF(res); + if (isatty == -1) + goto error; + if (isatty || Py_UnbufferedStdioFlag) + line_buffering = Py_True; + else + line_buffering = Py_False; + + Py_CLEAR(raw); + Py_CLEAR(text); + +#ifdef MS_WINDOWS + /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r" + newlines to "\n". + sys.stdout and sys.stderr: translate "\n" to "\r\n". */ + newline = NULL; +#else + /* sys.stdin: split lines at "\n". + sys.stdout and sys.stderr: don't translate newlines (use "\n"). */ + newline = "\n"; +#endif + + stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO", + buf, encoding, errors, + newline, line_buffering); + Py_CLEAR(buf); + if (stream == NULL) + goto error; + + if (write_mode) + mode = "w"; + else + mode = "r"; + text = PyUnicode_FromString(mode); + if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0) + goto error; + Py_CLEAR(text); + return stream; + +error: + Py_XDECREF(buf); + Py_XDECREF(stream); + Py_XDECREF(text); + Py_XDECREF(raw); + return NULL; +} + +static int +is_valid_fd(int fd) +{ + int dummy_fd; + if (fd < 0 || !_PyVerify_fd(fd)) + return 0; + _Py_BEGIN_SUPPRESS_IPH + dummy_fd = dup(fd); + if (dummy_fd >= 0) + close(dummy_fd); + _Py_END_SUPPRESS_IPH + return dummy_fd >= 0; +} + +/* Initialize sys.stdin, stdout, stderr and builtins.open */ +static int +initstdio(void) +{ + PyObject *iomod = NULL, *wrapper; + PyObject *bimod = NULL; + PyObject *m; + PyObject *std = NULL; + int status = 0, fd; + PyObject * encoding_attr; + char *pythonioencoding = NULL, *encoding, *errors; + + /* Hack to avoid a nasty recursion issue when Python is invoked + in verbose mode: pre-import the Latin-1 and UTF-8 codecs */ + if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) { + goto error; + } + Py_DECREF(m); + + if (!(m = PyImport_ImportModule("encodings.latin_1"))) { + goto error; + } + Py_DECREF(m); + + if (!(bimod = PyImport_ImportModule("builtins"))) { + goto error; + } + + if (!(iomod = PyImport_ImportModule("io"))) { + goto error; + } + if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) { + goto error; + } + + /* Set builtins.open */ + if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) { + Py_DECREF(wrapper); + goto error; + } + Py_DECREF(wrapper); + + encoding = _Py_StandardStreamEncoding; + errors = _Py_StandardStreamErrors; + if (!encoding || !errors) { + if (!errors) { + /* When the LC_CTYPE locale is the POSIX locale ("C locale"), + stdin and stdout use the surrogateescape error handler by + default, instead of the strict error handler. */ + char *loc = setlocale(LC_CTYPE, NULL); + if (loc != NULL && strcmp(loc, "C") == 0) + errors = "surrogateescape"; + } + + pythonioencoding = Py_GETENV("PYTHONIOENCODING"); + if (pythonioencoding) { + char *err; + pythonioencoding = _PyMem_Strdup(pythonioencoding); + if (pythonioencoding == NULL) { + PyErr_NoMemory(); + goto error; + } + err = strchr(pythonioencoding, ':'); + if (err) { + *err = '\0'; + err++; + if (*err && !_Py_StandardStreamErrors) { + errors = err; + } + } + if (*pythonioencoding && !encoding) { + encoding = pythonioencoding; + } + } + } + + /* Set sys.stdin */ + fd = fileno(stdin); + /* Under some conditions stdin, stdout and stderr may not be connected + * and fileno() may point to an invalid file descriptor. For example + * GUI apps don't have valid standard streams by default. + */ + if (!is_valid_fd(fd)) { + std = Py_None; + Py_INCREF(std); + } + else { + std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors); + if (std == NULL) + goto error; + } /* if (fd < 0) */ + PySys_SetObject("__stdin__", std); + _PySys_SetObjectId(&PyId_stdin, std); + Py_DECREF(std); + + /* Set sys.stdout */ + fd = fileno(stdout); + if (!is_valid_fd(fd)) { + std = Py_None; + Py_INCREF(std); + } + else { + std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors); + if (std == NULL) + goto error; + } /* if (fd < 0) */ + PySys_SetObject("__stdout__", std); + _PySys_SetObjectId(&PyId_stdout, std); + Py_DECREF(std); + +#if 1 /* Disable this if you have trouble debugging bootstrap stuff */ + /* Set sys.stderr, replaces the preliminary stderr */ + fd = fileno(stderr); + if (!is_valid_fd(fd)) { + std = Py_None; + Py_INCREF(std); + } + else { + std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace"); + if (std == NULL) + goto error; + } /* if (fd < 0) */ + + /* Same as hack above, pre-import stderr's codec to avoid recursion + when import.c tries to write to stderr in verbose mode. */ + encoding_attr = PyObject_GetAttrString(std, "encoding"); + if (encoding_attr != NULL) { + const char * std_encoding; + std_encoding = _PyUnicode_AsString(encoding_attr); + if (std_encoding != NULL) { + PyObject *codec_info = _PyCodec_Lookup(std_encoding); + Py_XDECREF(codec_info); + } + Py_DECREF(encoding_attr); + } + PyErr_Clear(); /* Not a fatal error if codec isn't available */ + + if (PySys_SetObject("__stderr__", std) < 0) { + Py_DECREF(std); + goto error; + } + if (_PySys_SetObjectId(&PyId_stderr, std) < 0) { + Py_DECREF(std); + goto error; + } + Py_DECREF(std); +#endif + + if (0) { + error: + status = -1; + } + + /* We won't need them anymore. */ + if (_Py_StandardStreamEncoding) { + PyMem_RawFree(_Py_StandardStreamEncoding); + _Py_StandardStreamEncoding = NULL; + } + if (_Py_StandardStreamErrors) { + PyMem_RawFree(_Py_StandardStreamErrors); + _Py_StandardStreamErrors = NULL; + } + PyMem_Free(pythonioencoding); + Py_XDECREF(bimod); + Py_XDECREF(iomod); + return status; +} + + +/* Print the current exception (if an exception is set) with its traceback, + * or display the current Python stack. + * + * Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is + * called on catastrophic cases. */ + +static void +_Py_PrintFatalError(int fd) +{ + PyObject *ferr, *res; + PyObject *exception, *v, *tb; + int has_tb; + PyThreadState *tstate; + + PyErr_Fetch(&exception, &v, &tb); + if (exception == NULL) { + /* No current exception */ + goto display_stack; + } + + ferr = _PySys_GetObjectId(&PyId_stderr); + if (ferr == NULL || ferr == Py_None) { + /* sys.stderr is not set yet or set to None, + no need to try to display the exception */ + goto display_stack; + } + + PyErr_NormalizeException(&exception, &v, &tb); + if (tb == NULL) { + tb = Py_None; + Py_INCREF(tb); + } + PyException_SetTraceback(v, tb); + if (exception == NULL) { + /* PyErr_NormalizeException() failed */ + goto display_stack; + } + + has_tb = (tb != Py_None); + PyErr_Display(exception, v, tb); + Py_XDECREF(exception); + Py_XDECREF(v); + Py_XDECREF(tb); + + /* sys.stderr may be buffered: call sys.stderr.flush() */ + res = _PyObject_CallMethodId(ferr, &PyId_flush, ""); + if (res == NULL) + PyErr_Clear(); + else + Py_DECREF(res); + + if (has_tb) + return; + +display_stack: +#ifdef WITH_THREAD + /* PyGILState_GetThisThreadState() works even if the GIL was released */ + tstate = PyGILState_GetThisThreadState(); +#else + tstate = PyThreadState_GET(); +#endif + if (tstate == NULL) { + /* _Py_DumpTracebackThreads() requires the thread state to display + * frames */ + return; + } + + fputc('\n', stderr); + fflush(stderr); + + /* display the current Python stack */ + _Py_DumpTracebackThreads(fd, tstate->interp, tstate); +} +/* Print fatal error message and abort */ + +void +Py_FatalError(const char *msg) +{ + const int fd = fileno(stderr); + static int reentrant = 0; +#ifdef MS_WINDOWS + size_t len; + WCHAR* buffer; + size_t i; +#endif + + if (reentrant) { + /* Py_FatalError() caused a second fatal error. + Example: flush_std_files() raises a recursion error. */ + goto exit; + } + reentrant = 1; + + fprintf(stderr, "Fatal Python error: %s\n", msg); + fflush(stderr); /* it helps in Windows debug build */ + + /* Print the exception (if an exception is set) with its traceback, + * or display the current Python stack. */ + _Py_PrintFatalError(fd); + + /* Flush sys.stdout and sys.stderr */ + flush_std_files(); + + /* The main purpose of faulthandler is to display the traceback. We already + * did our best to display it. So faulthandler can now be disabled. + * (Don't trigger it on abort().) */ + _PyFaulthandler_Fini(); + +#ifdef MS_WINDOWS + len = strlen(msg); + + /* Convert the message to wchar_t. This uses a simple one-to-one + conversion, assuming that the this error message actually uses ASCII + only. If this ceases to be true, we will have to convert. */ + buffer = alloca( (len+1) * (sizeof *buffer)); + for( i=0; i<=len; ++i) + buffer[i] = msg[i]; + OutputDebugStringW(L"Fatal Python error: "); + OutputDebugStringW(buffer); + OutputDebugStringW(L"\n"); +#endif /* MS_WINDOWS */ + +exit: +#if defined(MS_WINDOWS) && defined(_DEBUG) + DebugBreak(); +#endif + abort(); +} + +/* Clean up and exit */ + +#ifdef WITH_THREAD +#include "pythread.h" +#endif + +static void (*pyexitfunc)(void) = NULL; +/* For the atexit module. */ +void _Py_PyAtExit(void (*func)(void)) +{ + pyexitfunc = func; +} + +static void +call_py_exitfuncs(void) +{ + if (pyexitfunc == NULL) + return; + + (*pyexitfunc)(); + PyErr_Clear(); +} + +/* Wait until threading._shutdown completes, provided + the threading module was imported in the first place. + The shutdown routine will wait until all non-daemon + "threading" threads have completed. */ +static void +wait_for_thread_shutdown(void) +{ +#ifdef WITH_THREAD + _Py_IDENTIFIER(_shutdown); + PyObject *result; + PyThreadState *tstate = PyThreadState_GET(); + PyObject *threading = PyMapping_GetItemString(tstate->interp->modules, + "threading"); + if (threading == NULL) { + /* threading not imported */ + PyErr_Clear(); + return; + } + result = _PyObject_CallMethodId(threading, &PyId__shutdown, ""); + if (result == NULL) { + PyErr_WriteUnraisable(threading); + } + else { + Py_DECREF(result); + } + Py_DECREF(threading); +#endif +} + +#define NEXITFUNCS 32 +static void (*exitfuncs[NEXITFUNCS])(void); +static int nexitfuncs = 0; + +int Py_AtExit(void (*func)(void)) +{ + if (nexitfuncs >= NEXITFUNCS) + return -1; + exitfuncs[nexitfuncs++] = func; + return 0; +} + +static void +call_ll_exitfuncs(void) +{ + while (nexitfuncs > 0) + (*exitfuncs[--nexitfuncs])(); + + fflush(stdout); + fflush(stderr); +} + +void +Py_Exit(int sts) +{ + Py_Finalize(); + + exit(sts); +} + +static void +initsigs(void) +{ +#ifdef SIGPIPE + PyOS_setsig(SIGPIPE, SIG_IGN); +#endif +#ifdef SIGXFZ + PyOS_setsig(SIGXFZ, SIG_IGN); +#endif +#ifdef SIGXFSZ + PyOS_setsig(SIGXFSZ, SIG_IGN); +#endif + PyOS_InitInterrupts(); /* May imply initsignal() */ + if (PyErr_Occurred()) { + Py_FatalError("Py_Initialize: can't import signal"); + } +} + + +/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. + * + * All of the code in this function must only use async-signal-safe functions, + * listed at `man 7 signal` or + * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. + */ +void +_Py_RestoreSignals(void) +{ +#ifdef SIGPIPE + PyOS_setsig(SIGPIPE, SIG_DFL); +#endif +#ifdef SIGXFZ + PyOS_setsig(SIGXFZ, SIG_DFL); +#endif +#ifdef SIGXFSZ + PyOS_setsig(SIGXFSZ, SIG_DFL); +#endif +} + + +/* + * The file descriptor fd is considered ``interactive'' if either + * a) isatty(fd) is TRUE, or + * b) the -i flag was given, and the filename associated with + * the descriptor is NULL or "<stdin>" or "???". + */ +int +Py_FdIsInteractive(FILE *fp, const char *filename) +{ + if (isatty((int)fileno(fp))) + return 1; + if (!Py_InteractiveFlag) + return 0; + return (filename == NULL) || + (strcmp(filename, "<stdin>") == 0) || + (strcmp(filename, "???") == 0); +} + + +/* Wrappers around sigaction() or signal(). */ + +PyOS_sighandler_t +PyOS_getsig(int sig) +{ +#ifdef HAVE_SIGACTION + struct sigaction context; + if (sigaction(sig, NULL, &context) == -1) + return SIG_ERR; + return context.sa_handler; +#else + PyOS_sighandler_t handler; +/* Special signal handling for the secure CRT in Visual Studio 2005 */ +#if defined(_MSC_VER) && _MSC_VER >= 1400 + switch (sig) { + /* Only these signals are valid */ + case SIGINT: + case SIGILL: + case SIGFPE: + case SIGSEGV: + case SIGTERM: + case SIGBREAK: + case SIGABRT: + break; + /* Don't call signal() with other values or it will assert */ + default: + return SIG_ERR; + } +#endif /* _MSC_VER && _MSC_VER >= 1400 */ + handler = signal(sig, SIG_IGN); + if (handler != SIG_ERR) + signal(sig, handler); + return handler; +#endif +} + +/* + * All of the code in this function must only use async-signal-safe functions, + * listed at `man 7 signal` or + * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. + */ +PyOS_sighandler_t +PyOS_setsig(int sig, PyOS_sighandler_t handler) +{ +#ifdef HAVE_SIGACTION + /* Some code in Modules/signalmodule.c depends on sigaction() being + * used here if HAVE_SIGACTION is defined. Fix that if this code + * changes to invalidate that assumption. + */ + struct sigaction context, ocontext; + context.sa_handler = handler; + sigemptyset(&context.sa_mask); + context.sa_flags = 0; + if (sigaction(sig, &context, &ocontext) == -1) + return SIG_ERR; + return ocontext.sa_handler; +#else + PyOS_sighandler_t oldhandler; + oldhandler = signal(sig, handler); +#ifdef HAVE_SIGINTERRUPT + siginterrupt(sig, 1); +#endif + return oldhandler; +#endif +} + +#ifdef __cplusplus +} +#endif diff --git a/Python/pystate.c b/Python/pystate.c index 2ac2fd5..32a635c 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -403,7 +403,7 @@ tstate_delete_common(PyThreadState *tstate) void PyThreadState_Delete(PyThreadState *tstate) { - if (tstate == _Py_atomic_load_relaxed(&_PyThreadState_Current)) + if (tstate == (PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)) Py_FatalError("PyThreadState_Delete: tstate is still current"); #ifdef WITH_THREAD if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate) @@ -662,7 +662,7 @@ PyThreadState_IsCurrent(PyThreadState *tstate) { /* Must be the tstate for this thread */ assert(PyGILState_GetThisThreadState()==tstate); - return tstate == _Py_atomic_load_relaxed(&_PyThreadState_Current); + return tstate == (PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current); } /* Internal initialization/finalization functions called by diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 9b2405f..952316e 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -15,6 +15,7 @@ #include "ast.h" #include "marshal.h" #include "osdefs.h" +#include <locale.h> #ifdef HAVE_SIGNAL_H #include <signal.h> @@ -25,18 +26,12 @@ #endif #ifdef HAVE_LANGINFO_H -#include <locale.h> #include <langinfo.h> #endif #ifdef MS_WINDOWS #undef BYTE #include "windows.h" -#define PATH_MAX MAXPATHLEN -#endif - -#ifdef __gnu_hurd__ -#define PATH_MAX MAXPATHLEN #endif _Py_IDENTIFIER(builtins); @@ -45,7 +40,6 @@ _Py_IDENTIFIER(flush); _Py_IDENTIFIER(last_traceback); _Py_IDENTIFIER(last_type); _Py_IDENTIFIER(last_value); -_Py_IDENTIFIER(name); _Py_IDENTIFIER(ps1); _Py_IDENTIFIER(ps2); _Py_IDENTIFIER(stdin); @@ -53,43 +47,13 @@ _Py_IDENTIFIER(stdout); _Py_IDENTIFIER(stderr); _Py_static_string(PyId_string, "<string>"); -#ifdef Py_REF_DEBUG -static -void _print_total_refs(void) { - PyObject *xoptions, *value; - _Py_IDENTIFIER(showrefcount); - - xoptions = PySys_GetXOptions(); - if (xoptions == NULL) - return; - value = _PyDict_GetItemId(xoptions, &PyId_showrefcount); - if (value == Py_True) - fprintf(stderr, - "[%" PY_FORMAT_SIZE_T "d refs, " - "%" PY_FORMAT_SIZE_T "d blocks]\n", - _Py_GetRefTotal(), _Py_GetAllocatedBlocks()); -} -#endif - -#ifndef Py_REF_DEBUG -#define PRINT_TOTAL_REFS() -#else /* Py_REF_DEBUG */ -#define PRINT_TOTAL_REFS() _print_total_refs() -#endif - #ifdef __cplusplus extern "C" { #endif -extern wchar_t *Py_GetPath(void); - extern grammar _PyParser_Grammar; /* From graminit.c */ /* Forward */ -static void initmain(PyInterpreterState *interp); -static int initfsencoding(PyInterpreterState *interp); -static void initsite(void); -static int initstdio(void); static void flush_io(void); static PyObject *run_mod(mod_ty, PyObject *, PyObject *, PyObject *, PyCompilerFlags *, PyArena *); @@ -97,1182 +61,6 @@ static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *, PyCompilerFlags *); static void err_input(perrdetail *); static void err_free(perrdetail *); -static void initsigs(void); -static void call_py_exitfuncs(void); -static void wait_for_thread_shutdown(void); -static void call_ll_exitfuncs(void); -extern int _PyUnicode_Init(void); -extern int _PyStructSequence_Init(void); -extern void _PyUnicode_Fini(void); -extern int _PyLong_Init(void); -extern void PyLong_Fini(void); -extern int _PyFaulthandler_Init(void); -extern void _PyFaulthandler_Fini(void); -extern void _PyHash_Fini(void); -extern int _PyTraceMalloc_Init(void); -extern int _PyTraceMalloc_Fini(void); - -#ifdef WITH_THREAD -extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *); -extern void _PyGILState_Fini(void); -#endif /* WITH_THREAD */ - -int Py_DebugFlag; /* Needed by parser.c */ -int Py_VerboseFlag; /* Needed by import.c */ -int Py_QuietFlag; /* Needed by sysmodule.c */ -int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */ -int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */ -int Py_NoSiteFlag; /* Suppress 'import site' */ -int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */ -int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */ -int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */ -int Py_FrozenFlag; /* Needed by getpath.c */ -int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */ -int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ -int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */ -int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */ -int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */ - -PyThreadState *_Py_Finalizing = NULL; - -/* Hack to force loading of object files */ -int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \ - PyOS_mystrnicmp; /* Python/pystrcmp.o */ - -/* PyModule_GetWarningsModule is no longer necessary as of 2.6 -since _warnings is builtin. This API should not be used. */ -PyObject * -PyModule_GetWarningsModule(void) -{ - return PyImport_ImportModule("warnings"); -} - -static int initialized = 0; - -/* API to access the initialized flag -- useful for esoteric use */ - -int -Py_IsInitialized(void) -{ - return initialized; -} - -/* Helper to allow an embedding application to override the normal - * mechanism that attempts to figure out an appropriate IO encoding - */ - -static char *_Py_StandardStreamEncoding = NULL; -static char *_Py_StandardStreamErrors = NULL; - -int -Py_SetStandardStreamEncoding(const char *encoding, const char *errors) -{ - if (Py_IsInitialized()) { - /* This is too late to have any effect */ - return -1; - } - /* Can't call PyErr_NoMemory() on errors, as Python hasn't been - * initialised yet. - * - * However, the raw memory allocators are initialised appropriately - * as C static variables, so _PyMem_RawStrdup is OK even though - * Py_Initialize hasn't been called yet. - */ - if (encoding) { - _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding); - if (!_Py_StandardStreamEncoding) { - return -2; - } - } - if (errors) { - _Py_StandardStreamErrors = _PyMem_RawStrdup(errors); - if (!_Py_StandardStreamErrors) { - if (_Py_StandardStreamEncoding) { - PyMem_RawFree(_Py_StandardStreamEncoding); - } - return -3; - } - } - return 0; -} - -/* Global initializations. Can be undone by Py_Finalize(). Don't - call this twice without an intervening Py_Finalize() call. When - initializations fail, a fatal error is issued and the function does - not return. On return, the first thread and interpreter state have - been created. - - Locking: you must hold the interpreter lock while calling this. - (If the lock has not yet been initialized, that's equivalent to - having the lock, but you cannot use multiple threads.) - -*/ - -static int -add_flag(int flag, const char *envs) -{ - int env = atoi(envs); - if (flag < env) - flag = env; - if (flag < 1) - flag = 1; - return flag; -} - -static char* -get_codec_name(const char *encoding) -{ - char *name_utf8, *name_str; - PyObject *codec, *name = NULL; - - codec = _PyCodec_Lookup(encoding); - if (!codec) - goto error; - - name = _PyObject_GetAttrId(codec, &PyId_name); - Py_CLEAR(codec); - if (!name) - goto error; - - name_utf8 = _PyUnicode_AsString(name); - if (name_utf8 == NULL) - goto error; - name_str = _PyMem_RawStrdup(name_utf8); - Py_DECREF(name); - if (name_str == NULL) { - PyErr_NoMemory(); - return NULL; - } - return name_str; - -error: - Py_XDECREF(codec); - Py_XDECREF(name); - return NULL; -} - -static char* -get_locale_encoding(void) -{ -#ifdef MS_WINDOWS - char codepage[100]; - PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP()); - return get_codec_name(codepage); -#elif defined(HAVE_LANGINFO_H) && defined(CODESET) - char* codeset = nl_langinfo(CODESET); - if (!codeset || codeset[0] == '\0') { - PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty"); - return NULL; - } - return get_codec_name(codeset); -#else - PyErr_SetNone(PyExc_NotImplementedError); - return NULL; -#endif -} - -static void -import_init(PyInterpreterState *interp, PyObject *sysmod) -{ - PyObject *importlib; - PyObject *impmod; - PyObject *sys_modules; - PyObject *value; - - /* Import _importlib through its frozen version, _frozen_importlib. */ - if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) { - Py_FatalError("Py_Initialize: can't import _frozen_importlib"); - } - else if (Py_VerboseFlag) { - PySys_FormatStderr("import _frozen_importlib # frozen\n"); - } - importlib = PyImport_AddModule("_frozen_importlib"); - if (importlib == NULL) { - Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from " - "sys.modules"); - } - interp->importlib = importlib; - Py_INCREF(interp->importlib); - - /* Install _importlib as __import__ */ - impmod = PyInit_imp(); - if (impmod == NULL) { - Py_FatalError("Py_Initialize: can't import imp"); - } - else if (Py_VerboseFlag) { - PySys_FormatStderr("import imp # builtin\n"); - } - sys_modules = PyImport_GetModuleDict(); - if (Py_VerboseFlag) { - PySys_FormatStderr("import sys # builtin\n"); - } - if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) { - Py_FatalError("Py_Initialize: can't save _imp to sys.modules"); - } - - value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod); - if (value == NULL) { - PyErr_Print(); - Py_FatalError("Py_Initialize: importlib install failed"); - } - Py_DECREF(value); - Py_DECREF(impmod); - - _PyImportZip_Init(); -} - - -void -_Py_InitializeEx_Private(int install_sigs, int install_importlib) -{ - PyInterpreterState *interp; - PyThreadState *tstate; - PyObject *bimod, *sysmod, *pstderr; - char *p; - extern void _Py_ReadyTypes(void); - - if (initialized) - return; - initialized = 1; - _Py_Finalizing = NULL; - -#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE) - /* Set up the LC_CTYPE locale, so we can obtain - the locale's charset without having to switch - locales. */ - setlocale(LC_CTYPE, ""); -#endif - - if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0') - Py_DebugFlag = add_flag(Py_DebugFlag, p); - if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0') - Py_VerboseFlag = add_flag(Py_VerboseFlag, p); - if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') - Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p); - if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0') - Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p); - /* The variable is only tested for existence here; _PyRandom_Init will - check its value further. */ - if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0') - Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p); - - _PyRandom_Init(); - - interp = PyInterpreterState_New(); - if (interp == NULL) - Py_FatalError("Py_Initialize: can't make first interpreter"); - - tstate = PyThreadState_New(interp); - if (tstate == NULL) - Py_FatalError("Py_Initialize: can't make first thread"); - (void) PyThreadState_Swap(tstate); - -#ifdef WITH_THREAD - /* We can't call _PyEval_FiniThreads() in Py_Finalize because - destroying the GIL might fail when it is being referenced from - another running thread (see issue #9901). - Instead we destroy the previously created GIL here, which ensures - that we can call Py_Initialize / Py_Finalize multiple times. */ - _PyEval_FiniThreads(); - - /* Auto-thread-state API */ - _PyGILState_Init(interp, tstate); -#endif /* WITH_THREAD */ - - _Py_ReadyTypes(); - - if (!_PyFrame_Init()) - Py_FatalError("Py_Initialize: can't init frames"); - - if (!_PyLong_Init()) - Py_FatalError("Py_Initialize: can't init longs"); - - if (!PyByteArray_Init()) - Py_FatalError("Py_Initialize: can't init bytearray"); - - if (!_PyFloat_Init()) - Py_FatalError("Py_Initialize: can't init float"); - - interp->modules = PyDict_New(); - if (interp->modules == NULL) - Py_FatalError("Py_Initialize: can't make modules dictionary"); - - /* Init Unicode implementation; relies on the codec registry */ - if (_PyUnicode_Init() < 0) - Py_FatalError("Py_Initialize: can't initialize unicode"); - if (_PyStructSequence_Init() < 0) - Py_FatalError("Py_Initialize: can't initialize structseq"); - - bimod = _PyBuiltin_Init(); - if (bimod == NULL) - Py_FatalError("Py_Initialize: can't initialize builtins modules"); - _PyImport_FixupBuiltin(bimod, "builtins"); - interp->builtins = PyModule_GetDict(bimod); - if (interp->builtins == NULL) - Py_FatalError("Py_Initialize: can't initialize builtins dict"); - Py_INCREF(interp->builtins); - - /* initialize builtin exceptions */ - _PyExc_Init(bimod); - - sysmod = _PySys_Init(); - if (sysmod == NULL) - Py_FatalError("Py_Initialize: can't initialize sys"); - interp->sysdict = PyModule_GetDict(sysmod); - if (interp->sysdict == NULL) - Py_FatalError("Py_Initialize: can't initialize sys dict"); - Py_INCREF(interp->sysdict); - _PyImport_FixupBuiltin(sysmod, "sys"); - PySys_SetPath(Py_GetPath()); - PyDict_SetItemString(interp->sysdict, "modules", - interp->modules); - - /* Set up a preliminary stderr printer until we have enough - infrastructure for the io module in place. */ - pstderr = PyFile_NewStdPrinter(fileno(stderr)); - if (pstderr == NULL) - Py_FatalError("Py_Initialize: can't set preliminary stderr"); - _PySys_SetObjectId(&PyId_stderr, pstderr); - PySys_SetObject("__stderr__", pstderr); - Py_DECREF(pstderr); - - _PyImport_Init(); - - _PyImportHooks_Init(); - - /* Initialize _warnings. */ - _PyWarnings_Init(); - - if (!install_importlib) - return; - - import_init(interp, sysmod); - - /* initialize the faulthandler module */ - if (_PyFaulthandler_Init()) - Py_FatalError("Py_Initialize: can't initialize faulthandler"); - - _PyTime_Init(); - - if (initfsencoding(interp) < 0) - Py_FatalError("Py_Initialize: unable to load the file system codec"); - - if (install_sigs) - initsigs(); /* Signal handling stuff, including initintr() */ - - if (_PyTraceMalloc_Init() < 0) - Py_FatalError("Py_Initialize: can't initialize tracemalloc"); - - initmain(interp); /* Module __main__ */ - if (initstdio() < 0) - Py_FatalError( - "Py_Initialize: can't initialize sys standard streams"); - - /* Initialize warnings. */ - if (PySys_HasWarnOptions()) { - PyObject *warnings_module = PyImport_ImportModule("warnings"); - if (warnings_module == NULL) { - fprintf(stderr, "'import warnings' failed; traceback:\n"); - PyErr_Print(); - } - Py_XDECREF(warnings_module); - } - - if (!Py_NoSiteFlag) - initsite(); /* Module site */ -} - -void -Py_InitializeEx(int install_sigs) -{ - _Py_InitializeEx_Private(install_sigs, 1); -} - -void -Py_Initialize(void) -{ - Py_InitializeEx(1); -} - - -#ifdef COUNT_ALLOCS -extern void dump_counts(FILE*); -#endif - -/* Flush stdout and stderr */ - -static int -file_is_closed(PyObject *fobj) -{ - int r; - PyObject *tmp = PyObject_GetAttrString(fobj, "closed"); - if (tmp == NULL) { - PyErr_Clear(); - return 0; - } - r = PyObject_IsTrue(tmp); - Py_DECREF(tmp); - if (r < 0) - PyErr_Clear(); - return r > 0; -} - -static void -flush_std_files(void) -{ - PyObject *fout = _PySys_GetObjectId(&PyId_stdout); - PyObject *ferr = _PySys_GetObjectId(&PyId_stderr); - PyObject *tmp; - - if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { - tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); - if (tmp == NULL) - PyErr_WriteUnraisable(fout); - else - Py_DECREF(tmp); - } - - if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) { - tmp = _PyObject_CallMethodId(ferr, &PyId_flush, ""); - if (tmp == NULL) - PyErr_Clear(); - else - Py_DECREF(tmp); - } -} - -/* Undo the effect of Py_Initialize(). - - Beware: if multiple interpreter and/or thread states exist, these - are not wiped out; only the current thread and interpreter state - are deleted. But since everything else is deleted, those other - interpreter and thread states should no longer be used. - - (XXX We should do better, e.g. wipe out all interpreters and - threads.) - - Locking: as above. - -*/ - -void -Py_Finalize(void) -{ - PyInterpreterState *interp; - PyThreadState *tstate; - - if (!initialized) - return; - - wait_for_thread_shutdown(); - - /* The interpreter is still entirely intact at this point, and the - * exit funcs may be relying on that. In particular, if some thread - * or exit func is still waiting to do an import, the import machinery - * expects Py_IsInitialized() to return true. So don't say the - * interpreter is uninitialized until after the exit funcs have run. - * Note that Threading.py uses an exit func to do a join on all the - * threads created thru it, so this also protects pending imports in - * the threads created via Threading. - */ - call_py_exitfuncs(); - - /* Get current thread state and interpreter pointer */ - tstate = PyThreadState_GET(); - interp = tstate->interp; - - /* Remaining threads (e.g. daemon threads) will automatically exit - after taking the GIL (in PyEval_RestoreThread()). */ - _Py_Finalizing = tstate; - initialized = 0; - - /* Flush sys.stdout and sys.stderr */ - flush_std_files(); - - /* Disable signal handling */ - PyOS_FiniInterrupts(); - - /* Collect garbage. This may call finalizers; it's nice to call these - * before all modules are destroyed. - * XXX If a __del__ or weakref callback is triggered here, and tries to - * XXX import a module, bad things can happen, because Python no - * XXX longer believes it's initialized. - * XXX Fatal Python error: Interpreter not initialized (version mismatch?) - * XXX is easy to provoke that way. I've also seen, e.g., - * XXX Exception exceptions.ImportError: 'No module named sha' - * XXX in <function callback at 0x008F5718> ignored - * XXX but I'm unclear on exactly how that one happens. In any case, - * XXX I haven't seen a real-life report of either of these. - */ - PyGC_Collect(); -#ifdef COUNT_ALLOCS - /* With COUNT_ALLOCS, it helps to run GC multiple times: - each collection might release some types from the type - list, so they become garbage. */ - while (PyGC_Collect() > 0) - /* nothing */; -#endif - /* Destroy all modules */ - PyImport_Cleanup(); - - /* Flush sys.stdout and sys.stderr (again, in case more was printed) */ - flush_std_files(); - - /* Collect final garbage. This disposes of cycles created by - * class definitions, for example. - * XXX This is disabled because it caused too many problems. If - * XXX a __del__ or weakref callback triggers here, Python code has - * XXX a hard time running, because even the sys module has been - * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc). - * XXX One symptom is a sequence of information-free messages - * XXX coming from threads (if a __del__ or callback is invoked, - * XXX other threads can execute too, and any exception they encounter - * XXX triggers a comedy of errors as subsystem after subsystem - * XXX fails to find what it *expects* to find in sys to help report - * XXX the exception and consequent unexpected failures). I've also - * XXX seen segfaults then, after adding print statements to the - * XXX Python code getting called. - */ -#if 0 - PyGC_Collect(); -#endif - - /* Disable tracemalloc after all Python objects have been destroyed, - so it is possible to use tracemalloc in objects destructor. */ - _PyTraceMalloc_Fini(); - - /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ - _PyImport_Fini(); - - /* Cleanup typeobject.c's internal caches. */ - _PyType_Fini(); - - /* unload faulthandler module */ - _PyFaulthandler_Fini(); - - /* Debugging stuff */ -#ifdef COUNT_ALLOCS - dump_counts(stdout); -#endif - /* dump hash stats */ - _PyHash_Fini(); - - PRINT_TOTAL_REFS(); - -#ifdef Py_TRACE_REFS - /* Display all objects still alive -- this can invoke arbitrary - * __repr__ overrides, so requires a mostly-intact interpreter. - * Alas, a lot of stuff may still be alive now that will be cleaned - * up later. - */ - if (Py_GETENV("PYTHONDUMPREFS")) - _Py_PrintReferences(stderr); -#endif /* Py_TRACE_REFS */ - - /* Clear interpreter state and all thread states. */ - PyInterpreterState_Clear(interp); - - /* Now we decref the exception classes. After this point nothing - can raise an exception. That's okay, because each Fini() method - below has been checked to make sure no exceptions are ever - raised. - */ - - _PyExc_Fini(); - - /* Sundry finalizers */ - PyMethod_Fini(); - PyFrame_Fini(); - PyCFunction_Fini(); - PyTuple_Fini(); - PyList_Fini(); - PySet_Fini(); - PyBytes_Fini(); - PyByteArray_Fini(); - PyLong_Fini(); - PyFloat_Fini(); - PyDict_Fini(); - PySlice_Fini(); - _PyGC_Fini(); - _PyRandom_Fini(); - - /* Cleanup Unicode implementation */ - _PyUnicode_Fini(); - - /* reset file system default encoding */ - if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) { - PyMem_RawFree((char*)Py_FileSystemDefaultEncoding); - Py_FileSystemDefaultEncoding = NULL; - } - - /* XXX Still allocated: - - various static ad-hoc pointers to interned strings - - int and float free list blocks - - whatever various modules and libraries allocate - */ - - PyGrammar_RemoveAccelerators(&_PyParser_Grammar); - - /* Cleanup auto-thread-state */ -#ifdef WITH_THREAD - _PyGILState_Fini(); -#endif /* WITH_THREAD */ - - /* Delete current thread. After this, many C API calls become crashy. */ - PyThreadState_Swap(NULL); - PyInterpreterState_Delete(interp); - -#ifdef Py_TRACE_REFS - /* Display addresses (& refcnts) of all objects still alive. - * An address can be used to find the repr of the object, printed - * above by _Py_PrintReferences. - */ - if (Py_GETENV("PYTHONDUMPREFS")) - _Py_PrintReferenceAddresses(stderr); -#endif /* Py_TRACE_REFS */ -#ifdef PYMALLOC_DEBUG - if (Py_GETENV("PYTHONMALLOCSTATS")) - _PyObject_DebugMallocStats(stderr); -#endif - - call_ll_exitfuncs(); -} - -/* Create and initialize a new interpreter and thread, and return the - new thread. This requires that Py_Initialize() has been called - first. - - Unsuccessful initialization yields a NULL pointer. Note that *no* - exception information is available even in this case -- the - exception information is held in the thread, and there is no - thread. - - Locking: as above. - -*/ - -PyThreadState * -Py_NewInterpreter(void) -{ - PyInterpreterState *interp; - PyThreadState *tstate, *save_tstate; - PyObject *bimod, *sysmod; - - if (!initialized) - Py_FatalError("Py_NewInterpreter: call Py_Initialize first"); - - interp = PyInterpreterState_New(); - if (interp == NULL) - return NULL; - - tstate = PyThreadState_New(interp); - if (tstate == NULL) { - PyInterpreterState_Delete(interp); - return NULL; - } - - save_tstate = PyThreadState_Swap(tstate); - - /* XXX The following is lax in error checking */ - - interp->modules = PyDict_New(); - - bimod = _PyImport_FindBuiltin("builtins"); - if (bimod != NULL) { - interp->builtins = PyModule_GetDict(bimod); - if (interp->builtins == NULL) - goto handle_error; - Py_INCREF(interp->builtins); - } - - /* initialize builtin exceptions */ - _PyExc_Init(bimod); - - sysmod = _PyImport_FindBuiltin("sys"); - if (bimod != NULL && sysmod != NULL) { - PyObject *pstderr; - - interp->sysdict = PyModule_GetDict(sysmod); - if (interp->sysdict == NULL) - goto handle_error; - Py_INCREF(interp->sysdict); - PySys_SetPath(Py_GetPath()); - PyDict_SetItemString(interp->sysdict, "modules", - interp->modules); - /* Set up a preliminary stderr printer until we have enough - infrastructure for the io module in place. */ - pstderr = PyFile_NewStdPrinter(fileno(stderr)); - if (pstderr == NULL) - Py_FatalError("Py_Initialize: can't set preliminary stderr"); - _PySys_SetObjectId(&PyId_stderr, pstderr); - PySys_SetObject("__stderr__", pstderr); - Py_DECREF(pstderr); - - _PyImportHooks_Init(); - - import_init(interp, sysmod); - - if (initfsencoding(interp) < 0) - goto handle_error; - - if (initstdio() < 0) - Py_FatalError( - "Py_Initialize: can't initialize sys standard streams"); - initmain(interp); - if (!Py_NoSiteFlag) - initsite(); - } - - if (!PyErr_Occurred()) - return tstate; - -handle_error: - /* Oops, it didn't work. Undo it all. */ - - PyErr_PrintEx(0); - PyThreadState_Clear(tstate); - PyThreadState_Swap(save_tstate); - PyThreadState_Delete(tstate); - PyInterpreterState_Delete(interp); - - return NULL; -} - -/* Delete an interpreter and its last thread. This requires that the - given thread state is current, that the thread has no remaining - frames, and that it is its interpreter's only remaining thread. - It is a fatal error to violate these constraints. - - (Py_Finalize() doesn't have these constraints -- it zaps - everything, regardless.) - - Locking: as above. - -*/ - -void -Py_EndInterpreter(PyThreadState *tstate) -{ - PyInterpreterState *interp = tstate->interp; - - if (tstate != PyThreadState_GET()) - Py_FatalError("Py_EndInterpreter: thread is not current"); - if (tstate->frame != NULL) - Py_FatalError("Py_EndInterpreter: thread still has a frame"); - - wait_for_thread_shutdown(); - - if (tstate != interp->tstate_head || tstate->next != NULL) - Py_FatalError("Py_EndInterpreter: not the last thread"); - - PyImport_Cleanup(); - PyInterpreterState_Clear(interp); - PyThreadState_Swap(NULL); - PyInterpreterState_Delete(interp); -} - -#ifdef MS_WINDOWS -static wchar_t *progname = L"python"; -#else -static wchar_t *progname = L"python3"; -#endif - -void -Py_SetProgramName(wchar_t *pn) -{ - if (pn && *pn) - progname = pn; -} - -wchar_t * -Py_GetProgramName(void) -{ - return progname; -} - -static wchar_t *default_home = NULL; -static wchar_t env_home[MAXPATHLEN+1]; - -void -Py_SetPythonHome(wchar_t *home) -{ - default_home = home; -} - -wchar_t * -Py_GetPythonHome(void) -{ - wchar_t *home = default_home; - if (home == NULL && !Py_IgnoreEnvironmentFlag) { - char* chome = Py_GETENV("PYTHONHOME"); - if (chome) { - size_t size = Py_ARRAY_LENGTH(env_home); - size_t r = mbstowcs(env_home, chome, size); - if (r != (size_t)-1 && r < size) - home = env_home; - } - - } - return home; -} - -/* Create __main__ module */ - -static void -initmain(PyInterpreterState *interp) -{ - PyObject *m, *d, *loader; - m = PyImport_AddModule("__main__"); - if (m == NULL) - Py_FatalError("can't create __main__ module"); - d = PyModule_GetDict(m); - if (PyDict_GetItemString(d, "__builtins__") == NULL) { - PyObject *bimod = PyImport_ImportModule("builtins"); - if (bimod == NULL) { - Py_FatalError("Failed to retrieve builtins module"); - } - if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) { - Py_FatalError("Failed to initialize __main__.__builtins__"); - } - Py_DECREF(bimod); - } - /* Main is a little special - imp.is_builtin("__main__") will return - * False, but BuiltinImporter is still the most appropriate initial - * setting for its __loader__ attribute. A more suitable value will - * be set if __main__ gets further initialized later in the startup - * process. - */ - loader = PyDict_GetItemString(d, "__loader__"); - if (loader == NULL || loader == Py_None) { - PyObject *loader = PyObject_GetAttrString(interp->importlib, - "BuiltinImporter"); - if (loader == NULL) { - Py_FatalError("Failed to retrieve BuiltinImporter"); - } - if (PyDict_SetItemString(d, "__loader__", loader) < 0) { - Py_FatalError("Failed to initialize __main__.__loader__"); - } - Py_DECREF(loader); - } -} - -static int -initfsencoding(PyInterpreterState *interp) -{ - PyObject *codec; - - if (Py_FileSystemDefaultEncoding == NULL) - { - Py_FileSystemDefaultEncoding = get_locale_encoding(); - if (Py_FileSystemDefaultEncoding == NULL) - Py_FatalError("Py_Initialize: Unable to get the locale encoding"); - - Py_HasFileSystemDefaultEncoding = 0; - interp->fscodec_initialized = 1; - return 0; - } - - /* the encoding is mbcs, utf-8 or ascii */ - codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding); - if (!codec) { - /* Such error can only occurs in critical situations: no more - * memory, import a module of the standard library failed, - * etc. */ - return -1; - } - Py_DECREF(codec); - interp->fscodec_initialized = 1; - return 0; -} - -/* Import the site module (not into __main__ though) */ - -static void -initsite(void) -{ - PyObject *m; - m = PyImport_ImportModule("site"); - if (m == NULL) { - fprintf(stderr, "Failed to import the site module\n"); - PyErr_Print(); - Py_Finalize(); - exit(1); - } - else { - Py_DECREF(m); - } -} - -static PyObject* -create_stdio(PyObject* io, - int fd, int write_mode, char* name, - char* encoding, char* errors) -{ - PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res; - const char* mode; - const char* newline; - PyObject *line_buffering; - int buffering, isatty; - _Py_IDENTIFIER(open); - _Py_IDENTIFIER(isatty); - _Py_IDENTIFIER(TextIOWrapper); - _Py_IDENTIFIER(mode); - - /* stdin is always opened in buffered mode, first because it shouldn't - make a difference in common use cases, second because TextIOWrapper - depends on the presence of a read1() method which only exists on - buffered streams. - */ - if (Py_UnbufferedStdioFlag && write_mode) - buffering = 0; - else - buffering = -1; - if (write_mode) - mode = "wb"; - else - mode = "rb"; - buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi", - fd, mode, buffering, - Py_None, Py_None, Py_None, 0); - if (buf == NULL) - goto error; - - if (buffering) { - _Py_IDENTIFIER(raw); - raw = _PyObject_GetAttrId(buf, &PyId_raw); - if (raw == NULL) - goto error; - } - else { - raw = buf; - Py_INCREF(raw); - } - - text = PyUnicode_FromString(name); - if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0) - goto error; - res = _PyObject_CallMethodId(raw, &PyId_isatty, ""); - if (res == NULL) - goto error; - isatty = PyObject_IsTrue(res); - Py_DECREF(res); - if (isatty == -1) - goto error; - if (isatty || Py_UnbufferedStdioFlag) - line_buffering = Py_True; - else - line_buffering = Py_False; - - Py_CLEAR(raw); - Py_CLEAR(text); - -#ifdef MS_WINDOWS - /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r" - newlines to "\n". - sys.stdout and sys.stderr: translate "\n" to "\r\n". */ - newline = NULL; -#else - /* sys.stdin: split lines at "\n". - sys.stdout and sys.stderr: don't translate newlines (use "\n"). */ - newline = "\n"; -#endif - - stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO", - buf, encoding, errors, - newline, line_buffering); - Py_CLEAR(buf); - if (stream == NULL) - goto error; - - if (write_mode) - mode = "w"; - else - mode = "r"; - text = PyUnicode_FromString(mode); - if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0) - goto error; - Py_CLEAR(text); - return stream; - -error: - Py_XDECREF(buf); - Py_XDECREF(stream); - Py_XDECREF(text); - Py_XDECREF(raw); - return NULL; -} - -static int -is_valid_fd(int fd) -{ - int dummy_fd; - if (fd < 0 || !_PyVerify_fd(fd)) - return 0; - dummy_fd = dup(fd); - if (dummy_fd < 0) - return 0; - close(dummy_fd); - return 1; -} - -/* Initialize sys.stdin, stdout, stderr and builtins.open */ -static int -initstdio(void) -{ - PyObject *iomod = NULL, *wrapper; - PyObject *bimod = NULL; - PyObject *m; - PyObject *std = NULL; - int status = 0, fd; - PyObject * encoding_attr; - char *pythonioencoding = NULL, *encoding, *errors; - - /* Hack to avoid a nasty recursion issue when Python is invoked - in verbose mode: pre-import the Latin-1 and UTF-8 codecs */ - if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) { - goto error; - } - Py_DECREF(m); - - if (!(m = PyImport_ImportModule("encodings.latin_1"))) { - goto error; - } - Py_DECREF(m); - - if (!(bimod = PyImport_ImportModule("builtins"))) { - goto error; - } - - if (!(iomod = PyImport_ImportModule("io"))) { - goto error; - } - if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) { - goto error; - } - - /* Set builtins.open */ - if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) { - Py_DECREF(wrapper); - goto error; - } - Py_DECREF(wrapper); - - encoding = _Py_StandardStreamEncoding; - errors = _Py_StandardStreamErrors; - if (!encoding || !errors) { - pythonioencoding = Py_GETENV("PYTHONIOENCODING"); - if (pythonioencoding) { - char *err; - pythonioencoding = _PyMem_Strdup(pythonioencoding); - if (pythonioencoding == NULL) { - PyErr_NoMemory(); - goto error; - } - err = strchr(pythonioencoding, ':'); - if (err) { - *err = '\0'; - err++; - if (*err && !errors) { - errors = err; - } - } - if (*pythonioencoding && !encoding) { - encoding = pythonioencoding; - } - } - } - - /* Set sys.stdin */ - fd = fileno(stdin); - /* Under some conditions stdin, stdout and stderr may not be connected - * and fileno() may point to an invalid file descriptor. For example - * GUI apps don't have valid standard streams by default. - */ - if (!is_valid_fd(fd)) { - std = Py_None; - Py_INCREF(std); - } - else { - std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors); - if (std == NULL) - goto error; - } /* if (fd < 0) */ - PySys_SetObject("__stdin__", std); - _PySys_SetObjectId(&PyId_stdin, std); - Py_DECREF(std); - - /* Set sys.stdout */ - fd = fileno(stdout); - if (!is_valid_fd(fd)) { - std = Py_None; - Py_INCREF(std); - } - else { - std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors); - if (std == NULL) - goto error; - } /* if (fd < 0) */ - PySys_SetObject("__stdout__", std); - _PySys_SetObjectId(&PyId_stdout, std); - Py_DECREF(std); - -#if 1 /* Disable this if you have trouble debugging bootstrap stuff */ - /* Set sys.stderr, replaces the preliminary stderr */ - fd = fileno(stderr); - if (!is_valid_fd(fd)) { - std = Py_None; - Py_INCREF(std); - } - else { - std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace"); - if (std == NULL) - goto error; - } /* if (fd < 0) */ - - /* Same as hack above, pre-import stderr's codec to avoid recursion - when import.c tries to write to stderr in verbose mode. */ - encoding_attr = PyObject_GetAttrString(std, "encoding"); - if (encoding_attr != NULL) { - const char * std_encoding; - std_encoding = _PyUnicode_AsString(encoding_attr); - if (std_encoding != NULL) { - PyObject *codec_info = _PyCodec_Lookup(std_encoding); - Py_XDECREF(codec_info); - } - Py_DECREF(encoding_attr); - } - PyErr_Clear(); /* Not a fatal error if codec isn't available */ - - if (PySys_SetObject("__stderr__", std) < 0) { - Py_DECREF(std); - goto error; - } - if (_PySys_SetObjectId(&PyId_stderr, std) < 0) { - Py_DECREF(std); - goto error; - } - Py_DECREF(std); -#endif - - if (0) { - error: - status = -1; - } - - /* We won't need them anymore. */ - if (_Py_StandardStreamEncoding) { - PyMem_RawFree(_Py_StandardStreamEncoding); - _Py_StandardStreamEncoding = NULL; - } - if (_Py_StandardStreamErrors) { - PyMem_RawFree(_Py_StandardStreamErrors); - _Py_StandardStreamErrors = NULL; - } - PyMem_Free(pythonioencoding); - Py_XDECREF(bimod); - Py_XDECREF(iomod); - return status; -} /* Parse input from a file and execute it */ @@ -1322,7 +110,7 @@ PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags * err = -1; for (;;) { ret = PyRun_InteractiveOneObject(fp, filename, flags); - PRINT_TOTAL_REFS(); + _PY_DEBUG_PRINT_TOTAL_REFS(); if (ret == E_EOF) { err = 0; break; @@ -1477,7 +265,7 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename_str, PyCompilerFlags *f static int maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit) { - if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0) + if (strcmp(ext, ".pyc") == 0) return 1; /* Only look into the file if we are allowed to close it, since @@ -1583,9 +371,6 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, fprintf(stderr, "python: Can't reopen .pyc file\n"); goto done; } - /* Turn on optimization if a .pyo file is given */ - if (strcmp(ext, ".pyo") == 0) - Py_OptimizeFlag = 1; if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) { fprintf(stderr, "python: failed to set __main__.__loader__\n"); @@ -1729,7 +514,7 @@ print_error_text(PyObject *f, int offset, PyObject *text_obj) return; if (offset >= 0) { - if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n') + if (offset > 0 && (size_t)offset == strlen(text) && text[offset - 1] == '\n') offset--; for (;;) { nl = strchr(text, '\n'); @@ -2193,13 +978,17 @@ run_pyc_file(FILE *fp, const char *filename, PyObject *globals, magic = PyMarshal_ReadLongFromFile(fp); if (magic != PyImport_GetMagicNumber()) { - PyErr_SetString(PyExc_RuntimeError, - "Bad magic number in .pyc file"); + if (!PyErr_Occurred()) + PyErr_SetString(PyExc_RuntimeError, + "Bad magic number in .pyc file"); return NULL; } /* Skip mtime and size */ (void) PyMarshal_ReadLongFromFile(fp); (void) PyMarshal_ReadLongFromFile(fp); + if (PyErr_Occurred()) + return NULL; + v = PyMarshal_ReadLastObjectFromFile(fp); if (v == NULL || !PyCode_Check(v)) { Py_XDECREF(v); @@ -2587,272 +1376,6 @@ cleanup: } } -/* Print the current exception (if an exception is set) with its traceback, - * or display the current Python stack. - * - * Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is - * called on catastrophic cases. */ - -static void -_Py_PrintFatalError(int fd) -{ - PyObject *ferr, *res; - PyObject *exception, *v, *tb; - int has_tb; - PyThreadState *tstate; - - PyErr_Fetch(&exception, &v, &tb); - if (exception == NULL) { - /* No current exception */ - goto display_stack; - } - - ferr = _PySys_GetObjectId(&PyId_stderr); - if (ferr == NULL || ferr == Py_None) { - /* sys.stderr is not set yet or set to None, - no need to try to display the exception */ - goto display_stack; - } - - PyErr_NormalizeException(&exception, &v, &tb); - if (tb == NULL) { - tb = Py_None; - Py_INCREF(tb); - } - PyException_SetTraceback(v, tb); - if (exception == NULL) { - /* PyErr_NormalizeException() failed */ - goto display_stack; - } - - has_tb = (tb != NULL && tb != Py_None); - PyErr_Display(exception, v, tb); - Py_XDECREF(exception); - Py_XDECREF(v); - Py_XDECREF(tb); - - /* sys.stderr may be buffered: call sys.stderr.flush() */ - res = _PyObject_CallMethodId(ferr, &PyId_flush, ""); - if (res == NULL) - PyErr_Clear(); - else - Py_DECREF(res); - - if (has_tb) - return; - -display_stack: - /* PyGILState_GetThisThreadState() works even if the GIL was released */ - tstate = PyGILState_GetThisThreadState(); - if (tstate == NULL) { - /* _Py_DumpTracebackThreads() requires the thread state to display - * frames */ - return; - } - - fputc('\n', stderr); - fflush(stderr); - - /* display the current Python stack */ - _Py_DumpTracebackThreads(fd, tstate->interp, tstate); -} - -/* Print fatal error message and abort */ - -void -Py_FatalError(const char *msg) -{ - const int fd = fileno(stderr); - static int reentrant = 0; -#ifdef MS_WINDOWS - size_t len; - WCHAR* buffer; - size_t i; -#endif - - if (reentrant) { - /* Py_FatalError() caused a second fatal error. - Example: flush_std_files() raises a recursion error. */ - goto exit; - } - reentrant = 1; - - fprintf(stderr, "Fatal Python error: %s\n", msg); - fflush(stderr); /* it helps in Windows debug build */ - - /* Print the exception (if an exception is set) with its traceback, - * or display the current Python stack. */ - _Py_PrintFatalError(fd); - - /* Flush sys.stdout and sys.stderr */ - flush_std_files(); - - /* The main purpose of faulthandler is to display the traceback. We already - * did our best to display it. So faulthandler can now be disabled. - * (Don't trigger it on abort().) */ - _PyFaulthandler_Fini(); - -#ifdef MS_WINDOWS - len = strlen(msg); - - /* Convert the message to wchar_t. This uses a simple one-to-one - conversion, assuming that the this error message actually uses ASCII - only. If this ceases to be true, we will have to convert. */ - buffer = alloca( (len+1) * (sizeof *buffer)); - for( i=0; i<=len; ++i) - buffer[i] = msg[i]; - OutputDebugStringW(L"Fatal Python error: "); - OutputDebugStringW(buffer); - OutputDebugStringW(L"\n"); -#endif /* MS_WINDOWS */ - -exit: -#if defined(MS_WINDOWS) && defined(_DEBUG) - DebugBreak(); -#endif - abort(); -} - -/* Clean up and exit */ - -#ifdef WITH_THREAD -#include "pythread.h" -#endif - -static void (*pyexitfunc)(void) = NULL; -/* For the atexit module. */ -void _Py_PyAtExit(void (*func)(void)) -{ - pyexitfunc = func; -} - -static void -call_py_exitfuncs(void) -{ - if (pyexitfunc == NULL) - return; - - (*pyexitfunc)(); - PyErr_Clear(); -} - -/* Wait until threading._shutdown completes, provided - the threading module was imported in the first place. - The shutdown routine will wait until all non-daemon - "threading" threads have completed. */ -static void -wait_for_thread_shutdown(void) -{ -#ifdef WITH_THREAD - _Py_IDENTIFIER(_shutdown); - PyObject *result; - PyThreadState *tstate = PyThreadState_GET(); - PyObject *threading = PyMapping_GetItemString(tstate->interp->modules, - "threading"); - if (threading == NULL) { - /* threading not imported */ - PyErr_Clear(); - return; - } - result = _PyObject_CallMethodId(threading, &PyId__shutdown, ""); - if (result == NULL) { - PyErr_WriteUnraisable(threading); - } - else { - Py_DECREF(result); - } - Py_DECREF(threading); -#endif -} - -#define NEXITFUNCS 32 -static void (*exitfuncs[NEXITFUNCS])(void); -static int nexitfuncs = 0; - -int Py_AtExit(void (*func)(void)) -{ - if (nexitfuncs >= NEXITFUNCS) - return -1; - exitfuncs[nexitfuncs++] = func; - return 0; -} - -static void -call_ll_exitfuncs(void) -{ - while (nexitfuncs > 0) - (*exitfuncs[--nexitfuncs])(); - - fflush(stdout); - fflush(stderr); -} - -void -Py_Exit(int sts) -{ - Py_Finalize(); - - exit(sts); -} - -static void -initsigs(void) -{ -#ifdef SIGPIPE - PyOS_setsig(SIGPIPE, SIG_IGN); -#endif -#ifdef SIGXFZ - PyOS_setsig(SIGXFZ, SIG_IGN); -#endif -#ifdef SIGXFSZ - PyOS_setsig(SIGXFSZ, SIG_IGN); -#endif - PyOS_InitInterrupts(); /* May imply initsignal() */ - if (PyErr_Occurred()) { - Py_FatalError("Py_Initialize: can't import signal"); - } -} - - -/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. - * - * All of the code in this function must only use async-signal-safe functions, - * listed at `man 7 signal` or - * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. - */ -void -_Py_RestoreSignals(void) -{ -#ifdef SIGPIPE - PyOS_setsig(SIGPIPE, SIG_DFL); -#endif -#ifdef SIGXFZ - PyOS_setsig(SIGXFZ, SIG_DFL); -#endif -#ifdef SIGXFSZ - PyOS_setsig(SIGXFSZ, SIG_DFL); -#endif -} - - -/* - * The file descriptor fd is considered ``interactive'' if either - * a) isatty(fd) is TRUE, or - * b) the -i flag was given, and the filename associated with - * the descriptor is NULL or "<stdin>" or "???". - */ -int -Py_FdIsInteractive(FILE *fp, const char *filename) -{ - if (isatty((int)fileno(fp))) - return 1; - if (!Py_InteractiveFlag) - return 0; - return (filename == NULL) || - (strcmp(filename, "<stdin>") == 0) || - (strcmp(filename, "???") == 0); -} - #if defined(USE_STACKCHECK) #if defined(WIN32) && defined(_MSC_VER) @@ -2891,73 +1414,6 @@ PyOS_CheckStack(void) #endif /* USE_STACKCHECK */ - -/* Wrappers around sigaction() or signal(). */ - -PyOS_sighandler_t -PyOS_getsig(int sig) -{ -#ifdef HAVE_SIGACTION - struct sigaction context; - if (sigaction(sig, NULL, &context) == -1) - return SIG_ERR; - return context.sa_handler; -#else - PyOS_sighandler_t handler; -/* Special signal handling for the secure CRT in Visual Studio 2005 */ -#if defined(_MSC_VER) && _MSC_VER >= 1400 - switch (sig) { - /* Only these signals are valid */ - case SIGINT: - case SIGILL: - case SIGFPE: - case SIGSEGV: - case SIGTERM: - case SIGBREAK: - case SIGABRT: - break; - /* Don't call signal() with other values or it will assert */ - default: - return SIG_ERR; - } -#endif /* _MSC_VER && _MSC_VER >= 1400 */ - handler = signal(sig, SIG_IGN); - if (handler != SIG_ERR) - signal(sig, handler); - return handler; -#endif -} - -/* - * All of the code in this function must only use async-signal-safe functions, - * listed at `man 7 signal` or - * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. - */ -PyOS_sighandler_t -PyOS_setsig(int sig, PyOS_sighandler_t handler) -{ -#ifdef HAVE_SIGACTION - /* Some code in Modules/signalmodule.c depends on sigaction() being - * used here if HAVE_SIGACTION is defined. Fix that if this code - * changes to invalidate that assumption. - */ - struct sigaction context, ocontext; - context.sa_handler = handler; - sigemptyset(&context.sa_mask); - context.sa_flags = 0; - if (sigaction(sig, &context, &ocontext) == -1) - return SIG_ERR; - return ocontext.sa_handler; -#else - PyOS_sighandler_t oldhandler; - oldhandler = signal(sig, handler); -#ifdef HAVE_SIGINTERRUPT - siginterrupt(sig, 1); -#endif - return oldhandler; -#endif -} - /* Deprecated C API functions still provided for binary compatiblity */ #undef PyParser_SimpleParseFile diff --git a/Python/pytime.c b/Python/pytime.c index de6a41f..02a9374 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -3,115 +3,25 @@ #include <windows.h> #endif -#if defined(__APPLE__) && defined(HAVE_GETTIMEOFDAY) && defined(HAVE_FTIME) - /* - * _PyTime_gettimeofday falls back to ftime when getttimeofday fails because the latter - * might fail on some platforms. This fallback is unwanted on MacOSX because - * that makes it impossible to use a binary build on OSX 10.4 on earlier - * releases of the OS. Therefore claim we don't support ftime. - */ -# undef HAVE_FTIME +#if defined(__APPLE__) +#include <mach/mach_time.h> /* mach_absolute_time(), mach_timebase_info() */ #endif -#if defined(HAVE_FTIME) && !defined(MS_WINDOWS) -#include <sys/timeb.h> -extern int ftime(struct timeb *); -#endif +/* To millisecond (10^-3) */ +#define SEC_TO_MS 1000 -static void -pygettimeofday(_PyTime_timeval *tp, _Py_clock_info_t *info) -{ -#ifdef MS_WINDOWS - FILETIME system_time; - ULARGE_INTEGER large; - ULONGLONG microseconds; +/* To microseconds (10^-6) */ +#define MS_TO_US 1000 +#define SEC_TO_US (SEC_TO_MS * MS_TO_US) - GetSystemTimeAsFileTime(&system_time); - large.u.LowPart = system_time.dwLowDateTime; - large.u.HighPart = system_time.dwHighDateTime; - /* 11,644,473,600,000,000: number of microseconds between - the 1st january 1601 and the 1st january 1970 (369 years + 89 leap - days). */ - microseconds = large.QuadPart / 10 - 11644473600000000; - tp->tv_sec = microseconds / 1000000; - tp->tv_usec = microseconds % 1000000; - if (info) { - DWORD timeAdjustment, timeIncrement; - BOOL isTimeAdjustmentDisabled; +/* To nanoseconds (10^-9) */ +#define US_TO_NS 1000 +#define MS_TO_NS (MS_TO_US * US_TO_NS) +#define SEC_TO_NS (SEC_TO_MS * MS_TO_NS) - info->implementation = "GetSystemTimeAsFileTime()"; - info->monotonic = 0; - (void) GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement, - &isTimeAdjustmentDisabled); - info->resolution = timeIncrement * 1e-7; - info->adjustable = 1; - } -#else - /* There are three ways to get the time: - (1) gettimeofday() -- resolution in microseconds - (2) ftime() -- resolution in milliseconds - (3) time() -- resolution in seconds - In all cases the return value in a timeval struct. - Since on some systems (e.g. SCO ODT 3.0) gettimeofday() may - fail, so we fall back on ftime() or time(). - Note: clock resolution does not imply clock accuracy! */ - -#ifdef HAVE_GETTIMEOFDAY - int err; -#ifdef GETTIMEOFDAY_NO_TZ - err = gettimeofday(tp); -#else - err = gettimeofday(tp, (struct timezone *)NULL); -#endif - if (err == 0) { - if (info) { - info->implementation = "gettimeofday()"; - info->resolution = 1e-6; - info->monotonic = 0; - info->adjustable = 1; - } - return; - } -#endif /* HAVE_GETTIMEOFDAY */ - -#if defined(HAVE_FTIME) - { - struct timeb t; - ftime(&t); - tp->tv_sec = t.time; - tp->tv_usec = t.millitm * 1000; - if (info) { - info->implementation = "ftime()"; - info->resolution = 1e-3; - info->monotonic = 0; - info->adjustable = 1; - } - } -#else /* !HAVE_FTIME */ - tp->tv_sec = time(NULL); - tp->tv_usec = 0; - if (info) { - info->implementation = "time()"; - info->resolution = 1.0; - info->monotonic = 0; - info->adjustable = 1; - } -#endif /* !HAVE_FTIME */ - -#endif /* MS_WINDOWS */ -} - -void -_PyTime_gettimeofday(_PyTime_timeval *tp) -{ - pygettimeofday(tp, NULL); -} - -void -_PyTime_gettimeofday_info(_PyTime_timeval *tp, _Py_clock_info_t *info) -{ - pygettimeofday(tp, info); -} +/* Conversion from nanoseconds */ +#define NS_TO_MS (1000 * 1000) +#define NS_TO_US (1000) static void error_time_t_overflow(void) @@ -168,18 +78,16 @@ _PyTime_ObjectToDenominator(PyObject *obj, time_t *sec, long *numerator, } floatpart *= denominator; - if (round == _PyTime_ROUND_UP) { - if (intpart >= 0) { - floatpart = ceil(floatpart); - if (floatpart >= denominator) { - floatpart = 0.0; - intpart += 1.0; - } - } - else { - floatpart = floor(floatpart); + if (round == _PyTime_ROUND_CEILING) { + floatpart = ceil(floatpart); + if (floatpart >= denominator) { + floatpart = 0.0; + intpart += 1.0; } } + else { + floatpart = floor(floatpart); + } *sec = (time_t)intpart; err = intpart - (double)*sec; @@ -207,12 +115,10 @@ _PyTime_ObjectToTime_t(PyObject *obj, time_t *sec, _PyTime_round_t round) double d, intpart, err; d = PyFloat_AsDouble(obj); - if (round == _PyTime_ROUND_UP) { - if (d >= 0) - d = ceil(d); - else - d = floor(d); - } + if (round == _PyTime_ROUND_CEILING) + d = ceil(d); + else + d = floor(d); (void)modf(d, &intpart); *sec = (time_t)intpart; @@ -245,8 +151,528 @@ _PyTime_ObjectToTimeval(PyObject *obj, time_t *sec, long *usec, return _PyTime_ObjectToDenominator(obj, sec, usec, 1e6, round); } -void -_PyTime_Init() +static void +_PyTime_overflow(void) +{ + PyErr_SetString(PyExc_OverflowError, + "timestamp too large to convert to C _PyTime_t"); +} + +_PyTime_t +_PyTime_FromSeconds(int seconds) +{ + _PyTime_t t; + /* ensure that integer overflow cannot happen, int type should have 32 + bits, whereas _PyTime_t type has at least 64 bits (SEC_TO_MS takes 30 + bits). */ + assert((seconds >= 0 && seconds <= _PyTime_MAX / SEC_TO_NS) + || (seconds < 0 && seconds >= _PyTime_MIN / SEC_TO_NS)); + t = (_PyTime_t)seconds * SEC_TO_NS; + return t; +} + +_PyTime_t +_PyTime_FromNanoseconds(PY_LONG_LONG ns) +{ + _PyTime_t t; + assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); + t = Py_SAFE_DOWNCAST(ns, PY_LONG_LONG, _PyTime_t); + return t; +} + +#ifdef HAVE_CLOCK_GETTIME +static int +_PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts, int raise) +{ + _PyTime_t t; + int res = 0; + + t = (_PyTime_t)ts->tv_sec * SEC_TO_NS; + if (t / SEC_TO_NS != ts->tv_sec) { + if (raise) + _PyTime_overflow(); + res = -1; + } + + t += ts->tv_nsec; + + *tp = t; + return res; +} +#elif !defined(MS_WINDOWS) +static int +_PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv, int raise) +{ + _PyTime_t t; + int res = 0; + + t = (_PyTime_t)tv->tv_sec * SEC_TO_NS; + if (t / SEC_TO_NS != tv->tv_sec) { + if (raise) + _PyTime_overflow(); + res = -1; + } + + t += (_PyTime_t)tv->tv_usec * US_TO_NS; + + *tp = t; + return res; +} +#endif + +static int +_PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, + long to_nanoseconds) +{ + if (PyFloat_Check(obj)) { + /* volatile avoids unsafe optimization on float enabled by gcc -O3 */ + volatile double d, err; + + /* convert to a number of nanoseconds */ + d = PyFloat_AsDouble(obj); + d *= to_nanoseconds; + + if (round == _PyTime_ROUND_CEILING) + d = ceil(d); + else + d = floor(d); + + *t = (_PyTime_t)d; + err = d - (double)*t; + if (fabs(err) >= 1.0) { + _PyTime_overflow(); + return -1; + } + return 0; + } + else { +#ifdef HAVE_LONG_LONG + PY_LONG_LONG sec; + sec = PyLong_AsLongLong(obj); + assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); +#else + long sec; + sec = PyLong_AsLong(obj); + assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); +#endif + if (sec == -1 && PyErr_Occurred()) { + if (PyErr_ExceptionMatches(PyExc_OverflowError)) + _PyTime_overflow(); + return -1; + } + *t = sec * to_nanoseconds; + if (*t / to_nanoseconds != sec) { + _PyTime_overflow(); + return -1; + } + return 0; + } +} + +int +_PyTime_FromSecondsObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round) +{ + return _PyTime_FromObject(t, obj, round, SEC_TO_NS); +} + +int +_PyTime_FromMillisecondsObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round) +{ + return _PyTime_FromObject(t, obj, round, MS_TO_NS); +} + +double +_PyTime_AsSecondsDouble(_PyTime_t t) +{ + _PyTime_t sec, ns; + /* Divide using integers to avoid rounding issues on the integer part. + 1e-9 cannot be stored exactly in IEEE 64-bit. */ + sec = t / SEC_TO_NS; + ns = t % SEC_TO_NS; + return (double)sec + (double)ns * 1e-9; +} + +PyObject * +_PyTime_AsNanosecondsObject(_PyTime_t t) +{ +#ifdef HAVE_LONG_LONG + assert(sizeof(PY_LONG_LONG) >= sizeof(_PyTime_t)); + return PyLong_FromLongLong((PY_LONG_LONG)t); +#else + assert(sizeof(long) >= sizeof(_PyTime_t)); + return PyLong_FromLong((long)t); +#endif +} + +static _PyTime_t +_PyTime_Divide(_PyTime_t t, _PyTime_t k, _PyTime_round_t round) +{ + assert(k > 1); + if (round == _PyTime_ROUND_CEILING) { + if (t >= 0) + return (t + k - 1) / k; + else + return (t - (k - 1)) / k; + } + else + return t / k; +} + +_PyTime_t +_PyTime_AsMilliseconds(_PyTime_t t, _PyTime_round_t round) +{ + return _PyTime_Divide(t, NS_TO_MS, round); +} + +_PyTime_t +_PyTime_AsMicroseconds(_PyTime_t t, _PyTime_round_t round) +{ + return _PyTime_Divide(t, NS_TO_US, round); +} + +static int +_PyTime_AsTimeval_impl(_PyTime_t t, struct timeval *tv, _PyTime_round_t round, + int raise) +{ + _PyTime_t secs, ns; + int res = 0; + + secs = t / SEC_TO_NS; + ns = t % SEC_TO_NS; + if (ns < 0) { + ns += SEC_TO_NS; + secs -= 1; + } + +#ifdef MS_WINDOWS + /* On Windows, timeval.tv_sec is a long (32 bit), + whereas time_t can be 64-bit. */ + assert(sizeof(tv->tv_sec) == sizeof(long)); +#if SIZEOF_TIME_T > SIZEOF_LONG + if (secs > LONG_MAX) { + secs = LONG_MAX; + res = -1; + } + else if (secs < LONG_MIN) { + secs = LONG_MIN; + res = -1; + } +#endif + tv->tv_sec = (long)secs; +#else + /* On OpenBSD 5.4, timeval.tv_sec is a long. + Example: long is 64-bit, whereas time_t is 32-bit. */ + tv->tv_sec = secs; + if ((_PyTime_t)tv->tv_sec != secs) + res = -1; +#endif + + if (round == _PyTime_ROUND_CEILING) + tv->tv_usec = (int)((ns + US_TO_NS - 1) / US_TO_NS); + else + tv->tv_usec = (int)(ns / US_TO_NS); + + if (tv->tv_usec >= SEC_TO_US) { + tv->tv_usec -= SEC_TO_US; + tv->tv_sec += 1; + } + + if (res && raise) + _PyTime_overflow(); + + assert(0 <= tv->tv_usec && tv->tv_usec <= 999999); + return res; +} + +int +_PyTime_AsTimeval(_PyTime_t t, struct timeval *tv, _PyTime_round_t round) { - /* Do nothing. Needed to force linking. */ + return _PyTime_AsTimeval_impl(t, tv, round, 1); +} + +int +_PyTime_AsTimeval_noraise(_PyTime_t t, struct timeval *tv, _PyTime_round_t round) +{ + return _PyTime_AsTimeval_impl(t, tv, round, 0); +} + +#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE) +int +_PyTime_AsTimespec(_PyTime_t t, struct timespec *ts) +{ + _PyTime_t secs, nsec; + + secs = t / SEC_TO_NS; + nsec = t % SEC_TO_NS; + if (nsec < 0) { + nsec += SEC_TO_NS; + secs -= 1; + } + ts->tv_sec = (time_t)secs; + if ((_PyTime_t)ts->tv_sec != secs) { + _PyTime_overflow(); + return -1; + } + ts->tv_nsec = nsec; + + assert(0 <= ts->tv_nsec && ts->tv_nsec <= 999999999); + return 0; +} +#endif + +static int +pygettimeofday_new(_PyTime_t *tp, _Py_clock_info_t *info, int raise) +{ +#ifdef MS_WINDOWS + FILETIME system_time; + ULARGE_INTEGER large; + + assert(info == NULL || raise); + + GetSystemTimeAsFileTime(&system_time); + large.u.LowPart = system_time.dwLowDateTime; + large.u.HighPart = system_time.dwHighDateTime; + /* 11,644,473,600,000,000,000: number of nanoseconds between + the 1st january 1601 and the 1st january 1970 (369 years + 89 leap + days). */ + *tp = large.QuadPart * 100 - 11644473600000000000; + if (info) { + DWORD timeAdjustment, timeIncrement; + BOOL isTimeAdjustmentDisabled, ok; + + info->implementation = "GetSystemTimeAsFileTime()"; + info->monotonic = 0; + ok = GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement, + &isTimeAdjustmentDisabled); + if (!ok) { + PyErr_SetFromWindowsErr(0); + return -1; + } + info->resolution = timeIncrement * 1e-7; + info->adjustable = 1; + } + +#else /* MS_WINDOWS */ + int err; +#ifdef HAVE_CLOCK_GETTIME + struct timespec ts; +#else + struct timeval tv; +#endif + + assert(info == NULL || raise); + +#ifdef HAVE_CLOCK_GETTIME + err = clock_gettime(CLOCK_REALTIME, &ts); + if (err) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + if (_PyTime_FromTimespec(tp, &ts, raise) < 0) + return -1; + + if (info) { + struct timespec res; + info->implementation = "clock_gettime(CLOCK_REALTIME)"; + info->monotonic = 0; + info->adjustable = 1; + if (clock_getres(CLOCK_REALTIME, &res) == 0) + info->resolution = res.tv_sec + res.tv_nsec * 1e-9; + else + info->resolution = 1e-9; + } +#else /* HAVE_CLOCK_GETTIME */ + + /* test gettimeofday() */ +#ifdef GETTIMEOFDAY_NO_TZ + err = gettimeofday(&tv); +#else + err = gettimeofday(&tv, (struct timezone *)NULL); +#endif + if (err) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + if (_PyTime_FromTimeval(tp, &tv, raise) < 0) + return -1; + + if (info) { + info->implementation = "gettimeofday()"; + info->resolution = 1e-6; + info->monotonic = 0; + info->adjustable = 1; + } +#endif /* !HAVE_CLOCK_GETTIME */ +#endif /* !MS_WINDOWS */ + return 0; +} + +_PyTime_t +_PyTime_GetSystemClock(void) +{ + _PyTime_t t; + if (pygettimeofday_new(&t, NULL, 0) < 0) { + /* should not happen, _PyTime_Init() checked the clock at startup */ + assert(0); + + /* use a fixed value instead of a random value from the stack */ + t = 0; + } + return t; +} + +int +_PyTime_GetSystemClockWithInfo(_PyTime_t *t, _Py_clock_info_t *info) +{ + return pygettimeofday_new(t, info, 1); +} + + +static int +pymonotonic_new(_PyTime_t *tp, _Py_clock_info_t *info, int raise) +{ +#ifdef Py_DEBUG + static int last_set = 0; + static _PyTime_t last = 0; +#endif +#if defined(MS_WINDOWS) + ULONGLONG result; + + assert(info == NULL || raise); + + result = GetTickCount64(); + + *tp = result * MS_TO_NS; + if (*tp / MS_TO_NS != result) { + if (raise) { + _PyTime_overflow(); + return -1; + } + /* Hello, time traveler! */ + assert(0); + } + + if (info) { + DWORD timeAdjustment, timeIncrement; + BOOL isTimeAdjustmentDisabled, ok; + info->implementation = "GetTickCount64()"; + info->monotonic = 1; + ok = GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement, + &isTimeAdjustmentDisabled); + if (!ok) { + PyErr_SetFromWindowsErr(0); + return -1; + } + info->resolution = timeIncrement * 1e-7; + info->adjustable = 0; + } + +#elif defined(__APPLE__) + static mach_timebase_info_data_t timebase; + uint64_t time; + + if (timebase.denom == 0) { + /* According to the Technical Q&A QA1398, mach_timebase_info() cannot + fail: https://developer.apple.com/library/mac/#qa/qa1398/ */ + (void)mach_timebase_info(&timebase); + } + + time = mach_absolute_time(); + + /* apply timebase factor */ + time *= timebase.numer; + time /= timebase.denom; + + *tp = time; + + if (info) { + info->implementation = "mach_absolute_time()"; + info->resolution = (double)timebase.numer / timebase.denom * 1e-9; + info->monotonic = 1; + info->adjustable = 0; + } + +#else + struct timespec ts; +#ifdef CLOCK_HIGHRES + const clockid_t clk_id = CLOCK_HIGHRES; + const char *implementation = "clock_gettime(CLOCK_HIGHRES)"; +#else + const clockid_t clk_id = CLOCK_MONOTONIC; + const char *implementation = "clock_gettime(CLOCK_MONOTONIC)"; +#endif + + assert(info == NULL || raise); + + if (clock_gettime(clk_id, &ts) != 0) { + if (raise) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return -1; + } + + if (info) { + struct timespec res; + info->monotonic = 1; + info->implementation = implementation; + info->adjustable = 0; + if (clock_getres(clk_id, &res) != 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + info->resolution = res.tv_sec + res.tv_nsec * 1e-9; + } + if (_PyTime_FromTimespec(tp, &ts, raise) < 0) + return -1; +#endif +#ifdef Py_DEBUG + /* monotonic clock cannot go backward */ + assert(!last_set || last <= *tp); + last = *tp; + last_set = 1; +#endif + return 0; +} + +_PyTime_t +_PyTime_GetMonotonicClock(void) +{ + _PyTime_t t; + if (pymonotonic_new(&t, NULL, 0) < 0) { + /* should not happen, _PyTime_Init() checked that monotonic clock at + startup */ + assert(0); + + /* use a fixed value instead of a random value from the stack */ + t = 0; + } + return t; +} + +int +_PyTime_GetMonotonicClockWithInfo(_PyTime_t *tp, _Py_clock_info_t *info) +{ + return pymonotonic_new(tp, info, 1); +} + +int +_PyTime_Init(void) +{ + _PyTime_t t; + + /* ensure that the system clock works */ + if (_PyTime_GetSystemClockWithInfo(&t, NULL) < 0) + return -1; + + /* ensure that the operating system provides a monotonic clock */ + if (_PyTime_GetMonotonicClockWithInfo(&t, NULL) < 0) + return -1; + + /* check that _PyTime_FromSeconds() cannot overflow */ + assert(INT_MAX <= _PyTime_MAX / SEC_TO_NS); + assert(INT_MIN >= _PyTime_MIN / SEC_TO_NS); + return 0; } diff --git a/Python/random.c b/Python/random.c index 3f307cf..9c9d505 100644 --- a/Python/random.c +++ b/Python/random.c @@ -1,11 +1,14 @@ #include "Python.h" #ifdef MS_WINDOWS -#include <windows.h> +# include <windows.h> #else -#include <fcntl.h> -#ifdef HAVE_SYS_STAT_H -#include <sys/stat.h> -#endif +# include <fcntl.h> +# ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +# endif +# ifdef HAVE_GETRANDOM_SYSCALL +# include <sys/syscall.h> +# endif #endif #ifdef Py_DEBUG @@ -102,13 +105,74 @@ py_getentropy(unsigned char *buffer, Py_ssize_t size, int fatal) return 0; } -#else +#else /* !HAVE_GETENTROPY */ + +#ifdef HAVE_GETRANDOM_SYSCALL +static int +py_getrandom(void *buffer, Py_ssize_t size, int raise) +{ + /* is getrandom() supported by the running kernel? + * need Linux kernel 3.17 or later */ + static int getrandom_works = 1; + /* Use /dev/urandom, block if the kernel has no entropy */ + const int flags = 0; + int n; + + if (!getrandom_works) + return 0; + + while (0 < size) { + errno = 0; + + /* Use syscall() because the libc doesn't expose getrandom() yet, see: + * https://sourceware.org/bugzilla/show_bug.cgi?id=17252 */ + if (raise) { + Py_BEGIN_ALLOW_THREADS + n = syscall(SYS_getrandom, buffer, size, flags); + Py_END_ALLOW_THREADS + } + else { + n = syscall(SYS_getrandom, buffer, size, flags); + } + + if (n < 0) { + if (errno == ENOSYS) { + getrandom_works = 0; + return 0; + } + + if (errno == EINTR) { + /* Note: EINTR should not occur with flags=0 */ + if (PyErr_CheckSignals()) { + if (!raise) + Py_FatalError("getrandom() interrupted by a signal"); + return -1; + } + /* retry getrandom() */ + continue; + } + + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + else + Py_FatalError("getrandom() failed"); + return -1; + } + + buffer += n; + size -= n; + } + return 1; +} +#endif + static struct { int fd; dev_t st_dev; ino_t st_ino; } urandom_cache = { -1 }; + /* Read size bytes from /dev/urandom into buffer. Call Py_FatalError() on error. */ static void @@ -119,7 +183,14 @@ dev_urandom_noraise(unsigned char *buffer, Py_ssize_t size) assert (0 < size); - fd = _Py_open("/dev/urandom", O_RDONLY); +#ifdef HAVE_GETRANDOM_SYSCALL + if (py_getrandom(buffer, size, 0) == 1) + return; + /* getrandom() is not supported by the running kernel, fall back + * on reading /dev/urandom */ +#endif + + fd = _Py_open_noraise("/dev/urandom", O_RDONLY); if (fd < 0) Py_FatalError("Failed to open /dev/urandom"); @@ -147,14 +218,27 @@ dev_urandom_python(char *buffer, Py_ssize_t size) { int fd; Py_ssize_t n; - struct stat st; + struct _Py_stat_struct st; +#ifdef HAVE_GETRANDOM_SYSCALL + int res; +#endif if (size <= 0) return 0; +#ifdef HAVE_GETRANDOM_SYSCALL + res = py_getrandom(buffer, size, 1); + if (res < 0) + return -1; + if (res == 1) + return 0; + /* getrandom() is not supported by the running kernel, fall back + * on reading /dev/urandom */ +#endif + if (urandom_cache.fd >= 0) { /* Does the fd point to the same thing as before? (issue #21207) */ - if (fstat(urandom_cache.fd, &st) + if (_Py_fstat_noraise(urandom_cache.fd, &st) || st.st_dev != urandom_cache.st_dev || st.st_ino != urandom_cache.st_ino) { /* Something changed: forget the cached fd (but don't close it, @@ -166,17 +250,13 @@ dev_urandom_python(char *buffer, Py_ssize_t size) if (urandom_cache.fd >= 0) fd = urandom_cache.fd; else { - Py_BEGIN_ALLOW_THREADS fd = _Py_open("/dev/urandom", O_RDONLY); - Py_END_ALLOW_THREADS - if (fd < 0) - { + if (fd < 0) { if (errno == ENOENT || errno == ENXIO || errno == ENODEV || errno == EACCES) PyErr_SetString(PyExc_NotImplementedError, "/dev/urandom (or equivalent) not found"); - else - PyErr_SetFromErrno(PyExc_OSError); + /* otherwise, keep the OSError exception raised by _Py_open() */ return -1; } if (urandom_cache.fd >= 0) { @@ -186,8 +266,7 @@ dev_urandom_python(char *buffer, Py_ssize_t size) fd = urandom_cache.fd; } else { - if (fstat(fd, &st)) { - PyErr_SetFromErrno(PyExc_OSError); + if (_Py_fstat(fd, &st)) { close(fd); return -1; } @@ -199,29 +278,21 @@ dev_urandom_python(char *buffer, Py_ssize_t size) } } - Py_BEGIN_ALLOW_THREADS do { - do { - n = read(fd, buffer, (size_t)size); - } while (n < 0 && errno == EINTR); - if (n <= 0) - break; + n = _Py_read(fd, buffer, (size_t)size); + if (n == -1) + return -1; + if (n == 0) { + PyErr_Format(PyExc_RuntimeError, + "Failed to read %zi bytes from /dev/urandom", + size); + return -1; + } + buffer += n; - size -= (Py_ssize_t)n; + size -= n; } while (0 < size); - Py_END_ALLOW_THREADS - if (n <= 0) - { - /* stop on error or if read(size) returned 0 */ - if (n < 0) - PyErr_SetFromErrno(PyExc_OSError); - else - PyErr_Format(PyExc_RuntimeError, - "Failed to read %zi bytes from /dev/urandom", - size); - return -1; - } return 0; } diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 290eec1..9ec2521 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -772,6 +772,12 @@ static PyStructSequence_Desc windows_version_desc = { via indexing, the rest are name only */ }; +/* Disable deprecation warnings about GetVersionEx as the result is + being passed straight through to the caller, who is responsible for + using it correctly. */ +#pragma warning(push) +#pragma warning(disable:4996) + static PyObject * sys_getwindowsversion(PyObject *self) { @@ -803,6 +809,8 @@ sys_getwindowsversion(PyObject *self) return version; } +#pragma warning(pop) + #endif /* MS_WINDOWS */ #ifdef HAVE_DLOPEN @@ -1121,6 +1129,16 @@ PyDoc_STRVAR(sys_clear_type_cache__doc__, "_clear_type_cache() -> None\n\ Clear the internal type lookup cache."); +static PyObject * +sys_is_finalizing(PyObject* self, PyObject* args) +{ + return PyBool_FromLong(_Py_Finalizing != NULL); +} + +PyDoc_STRVAR(is_finalizing_doc, +"is_finalizing()\n\ +Return True if Python is exiting."); + static PyMethodDef sys_methods[] = { /* Might as well keep this in alphabetic order */ @@ -1167,6 +1185,7 @@ static PyMethodDef sys_methods[] = { getwindowsversion_doc}, #endif /* MS_WINDOWS */ {"intern", sys_intern, METH_VARARGS, intern_doc}, + {"is_finalizing", sys_is_finalizing, METH_NOARGS, is_finalizing_doc}, #ifdef USE_MALLOPT {"mdebug", sys_mdebug, METH_VARARGS}, #endif @@ -1670,8 +1689,8 @@ _PySys_Init(void) the shell already prevents that. */ #if !defined(MS_WINDOWS) { - struct stat sb; - if (fstat(fileno(stdin), &sb) == 0 && + struct _Py_stat_struct sb; + if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 && S_ISDIR(sb.st_mode)) { /* There's nothing more we can do. */ /* Py_FatalError() will core dump, so just exit. */ @@ -1681,7 +1700,7 @@ _PySys_Init(void) } #endif - /* stdin/stdout/stderr are now set by pythonrun.c */ + /* stdin/stdout/stderr are set in pylifecycle.c */ SET_SYS_FROM_STRING_BORROW("__displayhook__", PyDict_GetItemString(sysdict, "displayhook")); diff --git a/Python/thread.c b/Python/thread.c index 4e695ae..44c071e 100644 --- a/Python/thread.c +++ b/Python/thread.c @@ -431,7 +431,7 @@ PyThread_GetInfo(void) && defined(_CS_GNU_LIBPTHREAD_VERSION)) value = NULL; len = confstr(_CS_GNU_LIBPTHREAD_VERSION, buffer, sizeof(buffer)); - if (1 < len && len < sizeof(buffer)) { + if (1 < len && (size_t)len < sizeof(buffer)) { value = PyUnicode_DecodeFSDefaultAndSize(buffer, len-1); if (value == NULL) PyErr_Clear(); diff --git a/Python/thread_foobar.h b/Python/thread_foobar.h index d2b78c5..ea96f9c 100644 --- a/Python/thread_foobar.h +++ b/Python/thread_foobar.h @@ -1,4 +1,3 @@ - /* * Initialization. */ @@ -61,10 +60,18 @@ PyThread_free_lock(PyThread_type_lock lock) int PyThread_acquire_lock(PyThread_type_lock lock, int waitflag) { + return PyThread_acquire_lock_timed(lock, waitflag ? -1 : 0, 0); +} + +PyLockStatus +PyThread_acquire_lock_timed(PyThread_type_lock lock, PY_TIMEOUT_T microseconds, + int intr_flag) +{ int success; - dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock, waitflag)); - dprintf(("PyThread_acquire_lock(%p, %d) -> %d\n", lock, waitflag, success)); + dprintf(("PyThread_acquire_lock_timed(%p, %lld, %d) called\n", lock, microseconds, intr_flag)); + dprintf(("PyThread_acquire_lock_timed(%p, %lld, %d) -> %d\n", + lock, microseconds, intr_flag, success)); return success; } @@ -73,3 +80,53 @@ PyThread_release_lock(PyThread_type_lock lock) { dprintf(("PyThread_release_lock(%p) called\n", lock)); } + +/* The following are only needed if native TLS support exists */ +#define Py_HAVE_NATIVE_TLS + +#ifdef Py_HAVE_NATIVE_TLS +int +PyThread_create_key(void) +{ + int result; + return result; +} + +void +PyThread_delete_key(int key) +{ + +} + +int +PyThread_set_key_value(int key, void *value) +{ + int ok; + + /* A failure in this case returns -1 */ + if (!ok) + return -1; + return 0; +} + +void * +PyThread_get_key_value(int key) +{ + void *result; + + return result; +} + +void +PyThread_delete_key_value(int key) +{ + +} + +void +PyThread_ReInitTLS(void) +{ + +} + +#endif diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index d9f7c76..27e0dc8 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -608,7 +608,15 @@ PyThread_create_key(void) { pthread_key_t key; int fail = pthread_key_create(&key, NULL); - return fail ? -1 : key; + if (fail) + return -1; + if (key > INT_MAX) { + /* Issue #22206: handle integer overflow */ + pthread_key_delete(key); + errno = ENOMEM; + return -1; + } + return (int)key; } void diff --git a/Python/traceback.c b/Python/traceback.c index 2bea29e..71ffecd 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -13,7 +13,7 @@ #define OFF(x) offsetof(PyTracebackObject, x) -#define PUTS(fd, str) write(fd, str, (int)strlen(str)) +#define PUTS(fd, str) _Py_write_noraise(fd, str, (int)strlen(str)) #define MAX_STRING_LENGTH 500 #define MAX_FRAME_DEPTH 100 #define MAX_NTHREADS 100 @@ -231,7 +231,7 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject * } strcpy(namebuf, PyBytes_AS_STRING(path)); Py_DECREF(path); - if (strlen(namebuf) != len) + if (strlen(namebuf) != (size_t)len) continue; /* v contains '\0' */ if (len > 0 && namebuf[len-1] != SEP) namebuf[len++] = SEP; @@ -512,7 +512,7 @@ dump_decimal(int fd, int value) len++; } while (value); reverse_string(buffer, len); - write(fd, buffer, len); + _Py_write_noraise(fd, buffer, len); } /* Format an integer in range [0; 0xffffffff] to hexadecimal of 'width' digits, @@ -532,7 +532,7 @@ dump_hexadecimal(int fd, unsigned long value, int width) len++; } while (len < width || value); reverse_string(buffer, len); - write(fd, buffer, len); + _Py_write_noraise(fd, buffer, len); } /* Write an unicode object into the file fd using ascii+backslashreplace. @@ -582,15 +582,16 @@ dump_ascii(int fd, PyObject *text) ch = PyUnicode_READ(kind, data, i); else ch = wstr[i]; - if (ch < 128) { + if (' ' <= ch && ch <= 126) { + /* printable ASCII character */ char c = (char)ch; - write(fd, &c, 1); + _Py_write_noraise(fd, &c, 1); } - else if (ch < 0xff) { + else if (ch <= 0xff) { PUTS(fd, "\\x"); dump_hexadecimal(fd, ch, 2); } - else if (ch < 0xffff) { + else if (ch <= 0xffff) { PUTS(fd, "\\u"); dump_hexadecimal(fd, ch, 4); } @@ -618,9 +619,9 @@ dump_frame(int fd, PyFrameObject *frame) if (code != NULL && code->co_filename != NULL && PyUnicode_Check(code->co_filename)) { - write(fd, "\"", 1); + PUTS(fd, "\""); dump_ascii(fd, code->co_filename); - write(fd, "\"", 1); + PUTS(fd, "\""); } else { PUTS(fd, "???"); } @@ -637,7 +638,7 @@ dump_frame(int fd, PyFrameObject *frame) else PUTS(fd, "???"); - write(fd, "\n", 1); + PUTS(fd, "\n"); } static void @@ -667,6 +668,12 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header) } } +/* Dump the traceback of a Python thread into fd. Use write() to write the + traceback and retry if write() is interrupted by a signal (failed with + EINTR), but don't call the Python signal handler. + + The caller is responsible to call PyErr_CheckSignals() to call Python signal + handlers if signals were received. */ void _Py_DumpTraceback(int fd, PyThreadState *tstate) { @@ -685,10 +692,16 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current) PUTS(fd, "Current thread 0x"); else PUTS(fd, "Thread 0x"); - dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(long)*2); + dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(unsigned long)*2); PUTS(fd, " (most recent call first):\n"); } +/* Dump the traceback of all Python threads into fd. Use write() to write the + traceback and retry if write() is interrupted by a signal (failed with + EINTR), but don't call the Python signal handler. + + The caller is responsible to call PyErr_CheckSignals() to call Python signal + handlers if signals were received. */ const char* _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, PyThreadState *current_thread) @@ -704,10 +717,11 @@ _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, /* Dump the traceback of each thread */ tstate = PyInterpreterState_ThreadHead(interp); nthreads = 0; + _Py_BEGIN_SUPPRESS_IPH do { if (nthreads != 0) - write(fd, "\n", 1); + PUTS(fd, "\n"); if (nthreads >= MAX_NTHREADS) { PUTS(fd, "...\n"); break; @@ -717,6 +731,7 @@ _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, tstate = PyThreadState_Next(tstate); nthreads++; } while (tstate != NULL); + _Py_END_SUPPRESS_IPH return NULL; } |