diff options
Diffstat (limited to 'Python')
42 files changed, 7154 insertions, 7348 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 7bf2c50..e07a93f 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -271,6 +271,10 @@ static PyTypeObject *Bytes_type; static char *Bytes_fields[]={ "s", }; +static PyTypeObject *NameConstant_type; +static char *NameConstant_fields[]={ + "value", +}; static PyTypeObject *Ellipsis_type; static PyTypeObject *Attribute_type; _Py_IDENTIFIER(attr); @@ -408,24 +412,24 @@ static char *ExceptHandler_fields[]={ static PyTypeObject *arguments_type; static PyObject* ast2obj_arguments(void*); _Py_IDENTIFIER(vararg); -_Py_IDENTIFIER(varargannotation); _Py_IDENTIFIER(kwonlyargs); +_Py_IDENTIFIER(kw_defaults); _Py_IDENTIFIER(kwarg); -_Py_IDENTIFIER(kwargannotation); _Py_IDENTIFIER(defaults); -_Py_IDENTIFIER(kw_defaults); static char *arguments_fields[]={ "args", "vararg", - "varargannotation", "kwonlyargs", + "kw_defaults", "kwarg", - "kwargannotation", "defaults", - "kw_defaults", }; static PyTypeObject *arg_type; static PyObject* ast2obj_arg(void*); +static char *arg_attributes[] = { + "lineno", + "col_offset", +}; _Py_IDENTIFIER(arg); _Py_IDENTIFIER(annotation); static char *arg_fields[]={ @@ -673,6 +677,7 @@ static PyObject* ast2obj_object(void *o) Py_INCREF((PyObject*)o); return (PyObject*)o; } +#define ast2obj_singleton ast2obj_object #define ast2obj_identifier ast2obj_object #define ast2obj_string ast2obj_object #define ast2obj_bytes ast2obj_object @@ -684,6 +689,17 @@ static PyObject* ast2obj_int(long b) /* Conversion Python -> AST */ +static int obj2ast_singleton(PyObject *obj, PyObject** out, PyArena* arena) +{ + if (obj != Py_None && obj != Py_True && obj != Py_False) { + PyErr_SetString(PyExc_ValueError, + "AST singleton must be True, False, or None"); + return 1; + } + *out = obj; + return 0; +} + static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena) { if (obj == Py_None) @@ -758,6 +774,19 @@ static int add_ast_fields(void) return 0; } +static int exists_not_none(PyObject *obj, _Py_Identifier *id) +{ + int isnone; + PyObject *attr = _PyObject_GetAttrId(obj, id); + if (!attr) { + PyErr_Clear(); + return 0; + } + isnone = attr == Py_None; + Py_DECREF(attr); + return !isnone; +} + static int init_types(void) { @@ -862,6 +891,9 @@ static int init_types(void) if (!Str_type) return 0; Bytes_type = make_type("Bytes", expr_type, Bytes_fields, 1); if (!Bytes_type) return 0; + NameConstant_type = make_type("NameConstant", expr_type, + NameConstant_fields, 1); + if (!NameConstant_type) return 0; Ellipsis_type = make_type("Ellipsis", expr_type, NULL, 0); if (!Ellipsis_type) return 0; Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3); @@ -1039,6 +1071,7 @@ static int init_types(void) comprehension_type = make_type("comprehension", &AST_type, comprehension_fields, 3); if (!comprehension_type) return 0; + if (!add_attributes(comprehension_type, NULL, 0)) return 0; excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0); if (!excepthandler_type) return 0; if (!add_attributes(excepthandler_type, excepthandler_attributes, 2)) @@ -1046,16 +1079,21 @@ static int init_types(void) ExceptHandler_type = make_type("ExceptHandler", excepthandler_type, ExceptHandler_fields, 3); if (!ExceptHandler_type) return 0; - arguments_type = make_type("arguments", &AST_type, arguments_fields, 8); + arguments_type = make_type("arguments", &AST_type, arguments_fields, 6); if (!arguments_type) return 0; + if (!add_attributes(arguments_type, NULL, 0)) return 0; arg_type = make_type("arg", &AST_type, arg_fields, 2); if (!arg_type) return 0; + if (!add_attributes(arg_type, arg_attributes, 2)) return 0; keyword_type = make_type("keyword", &AST_type, keyword_fields, 2); if (!keyword_type) return 0; + if (!add_attributes(keyword_type, NULL, 0)) return 0; alias_type = make_type("alias", &AST_type, alias_fields, 2); if (!alias_type) return 0; + if (!add_attributes(alias_type, NULL, 0)) return 0; withitem_type = make_type("withitem", &AST_type, withitem_fields, 2); if (!withitem_type) return 0; + if (!add_attributes(withitem_type, NULL, 0)) return 0; initialized = 1; return 1; } @@ -1923,6 +1961,25 @@ Bytes(bytes s, int lineno, int col_offset, PyArena *arena) } expr_ty +NameConstant(singleton value, int lineno, int col_offset, PyArena *arena) +{ + expr_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field value is required for NameConstant"); + return NULL; + } + p = (expr_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = NameConstant_kind; + p->v.NameConstant.value = value; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +expr_ty Ellipsis(int lineno, int col_offset, PyArena *arena) { expr_ty p; @@ -2177,9 +2234,8 @@ ExceptHandler(expr_ty type, identifier name, asdl_seq * body, int lineno, int } arguments_ty -arguments(asdl_seq * args, identifier vararg, expr_ty varargannotation, - asdl_seq * kwonlyargs, identifier kwarg, expr_ty kwargannotation, - asdl_seq * defaults, asdl_seq * kw_defaults, PyArena *arena) +arguments(asdl_seq * args, arg_ty vararg, asdl_seq * kwonlyargs, asdl_seq * + kw_defaults, arg_ty kwarg, asdl_seq * defaults, PyArena *arena) { arguments_ty p; p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p)); @@ -2187,12 +2243,10 @@ arguments(asdl_seq * args, identifier vararg, expr_ty varargannotation, return NULL; p->args = args; p->vararg = vararg; - p->varargannotation = varargannotation; p->kwonlyargs = kwonlyargs; + p->kw_defaults = kw_defaults; p->kwarg = kwarg; - p->kwargannotation = kwargannotation; p->defaults = defaults; - p->kw_defaults = kw_defaults; return p; } @@ -2943,6 +2997,15 @@ ast2obj_expr(void* _o) goto failed; Py_DECREF(value); break; + case NameConstant_kind: + result = PyType_GenericNew(NameConstant_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_singleton(o->v.NameConstant.value); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_value, value) == -1) + goto failed; + Py_DECREF(value); + break; case Ellipsis_kind: result = PyType_GenericNew(Ellipsis_type, NULL, NULL); if (!result) goto failed; @@ -3361,29 +3424,24 @@ ast2obj_arguments(void* _o) if (_PyObject_SetAttrId(result, &PyId_args, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_identifier(o->vararg); + value = ast2obj_arg(o->vararg); if (!value) goto failed; if (_PyObject_SetAttrId(result, &PyId_vararg, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_expr(o->varargannotation); - if (!value) goto failed; - if (_PyObject_SetAttrId(result, &PyId_varargannotation, value) == -1) - goto failed; - Py_DECREF(value); value = ast2obj_list(o->kwonlyargs, ast2obj_arg); if (!value) goto failed; if (_PyObject_SetAttrId(result, &PyId_kwonlyargs, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_identifier(o->kwarg); + value = ast2obj_list(o->kw_defaults, ast2obj_expr); if (!value) goto failed; - if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1) + if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_expr(o->kwargannotation); + value = ast2obj_arg(o->kwarg); if (!value) goto failed; - if (_PyObject_SetAttrId(result, &PyId_kwargannotation, value) == -1) + if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1) goto failed; Py_DECREF(value); value = ast2obj_list(o->defaults, ast2obj_expr); @@ -3391,11 +3449,6 @@ ast2obj_arguments(void* _o) if (_PyObject_SetAttrId(result, &PyId_defaults, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_list(o->kw_defaults, ast2obj_expr); - if (!value) goto failed; - if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1) - goto failed; - Py_DECREF(value); return result; failed: Py_XDECREF(value); @@ -3425,6 +3478,16 @@ ast2obj_arg(void* _o) if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1) goto failed; Py_DECREF(value); + value = ast2obj_int(o->lineno); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0) + goto failed; + Py_DECREF(value); + value = ast2obj_int(o->col_offset); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0) + goto failed; + Py_DECREF(value); return result; failed: Py_XDECREF(value); @@ -3549,7 +3612,7 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3584,7 +3647,7 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3641,7 +3704,7 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3744,7 +3807,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3768,7 +3831,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - decorator_list = asdl_seq_new(len, arena); + decorator_list = _Py_asdl_seq_new(len, arena); if (decorator_list == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -3781,7 +3844,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_returns)) { + if (exists_not_none(obj, &PyId_returns)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_returns); if (tmp == NULL) goto failed; @@ -3831,7 +3894,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - bases = asdl_seq_new(len, arena); + bases = _Py_asdl_seq_new(len, arena); if (bases == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -3855,7 +3918,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - keywords = asdl_seq_new(len, arena); + keywords = _Py_asdl_seq_new(len, arena); if (keywords == NULL) goto failed; for (i = 0; i < len; i++) { keyword_ty value; @@ -3868,7 +3931,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_starargs)) { + if (exists_not_none(obj, &PyId_starargs)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_starargs); if (tmp == NULL) goto failed; @@ -3878,7 +3941,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) } else { starargs = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_kwargs)) { + if (exists_not_none(obj, &PyId_kwargs)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_kwargs); if (tmp == NULL) goto failed; @@ -3899,7 +3962,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3923,7 +3986,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - decorator_list = asdl_seq_new(len, arena); + decorator_list = _Py_asdl_seq_new(len, arena); if (decorator_list == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -3948,7 +4011,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) if (isinstance) { expr_ty value; - if (_PyObject_HasAttrId(obj, &PyId_value)) { + if (exists_not_none(obj, &PyId_value)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_value); if (tmp == NULL) goto failed; @@ -3980,7 +4043,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - targets = asdl_seq_new(len, arena); + targets = _Py_asdl_seq_new(len, arena); if (targets == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -4016,7 +4079,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - targets = asdl_seq_new(len, arena); + targets = _Py_asdl_seq_new(len, arena); if (targets == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -4133,7 +4196,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4157,7 +4220,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - orelse = asdl_seq_new(len, arena); + orelse = _Py_asdl_seq_new(len, arena); if (orelse == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4205,7 +4268,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4229,7 +4292,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - orelse = asdl_seq_new(len, arena); + orelse = _Py_asdl_seq_new(len, arena); if (orelse == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4277,7 +4340,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4301,7 +4364,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - orelse = asdl_seq_new(len, arena); + orelse = _Py_asdl_seq_new(len, arena); if (orelse == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4337,7 +4400,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - items = asdl_seq_new(len, arena); + items = _Py_asdl_seq_new(len, arena); if (items == NULL) goto failed; for (i = 0; i < len; i++) { withitem_ty value; @@ -4361,7 +4424,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4386,7 +4449,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) expr_ty exc; expr_ty cause; - if (_PyObject_HasAttrId(obj, &PyId_exc)) { + if (exists_not_none(obj, &PyId_exc)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_exc); if (tmp == NULL) goto failed; @@ -4396,7 +4459,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) } else { exc = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_cause)) { + if (exists_not_none(obj, &PyId_cause)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_cause); if (tmp == NULL) goto failed; @@ -4431,7 +4494,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4455,7 +4518,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - handlers = asdl_seq_new(len, arena); + handlers = _Py_asdl_seq_new(len, arena); if (handlers == NULL) goto failed; for (i = 0; i < len; i++) { excepthandler_ty value; @@ -4479,7 +4542,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - orelse = asdl_seq_new(len, arena); + orelse = _Py_asdl_seq_new(len, arena); if (orelse == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4503,7 +4566,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - finalbody = asdl_seq_new(len, arena); + finalbody = _Py_asdl_seq_new(len, arena); if (finalbody == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4540,7 +4603,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_msg)) { + if (exists_not_none(obj, &PyId_msg)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_msg); if (tmp == NULL) goto failed; @@ -4572,7 +4635,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - names = asdl_seq_new(len, arena); + names = _Py_asdl_seq_new(len, arena); if (names == NULL) goto failed; for (i = 0; i < len; i++) { alias_ty value; @@ -4598,7 +4661,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) asdl_seq* names; int level; - if (_PyObject_HasAttrId(obj, &PyId_module)) { + if (exists_not_none(obj, &PyId_module)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_module); if (tmp == NULL) goto failed; @@ -4619,7 +4682,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - names = asdl_seq_new(len, arena); + names = _Py_asdl_seq_new(len, arena); if (names == NULL) goto failed; for (i = 0; i < len; i++) { alias_ty value; @@ -4632,7 +4695,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_level)) { + if (exists_not_none(obj, &PyId_level)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_level); if (tmp == NULL) goto failed; @@ -4664,7 +4727,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - names = asdl_seq_new(len, arena); + names = _Py_asdl_seq_new(len, arena); if (names == NULL) goto failed; for (i = 0; i < len; i++) { identifier value; @@ -4699,7 +4762,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - names = asdl_seq_new(len, arena); + names = _Py_asdl_seq_new(len, arena); if (names == NULL) goto failed; for (i = 0; i < len; i++) { identifier value; @@ -4840,7 +4903,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - values = asdl_seq_new(len, arena); + values = _Py_asdl_seq_new(len, arena); if (values == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5036,7 +5099,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - keys = asdl_seq_new(len, arena); + keys = _Py_asdl_seq_new(len, arena); if (keys == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5060,7 +5123,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - values = asdl_seq_new(len, arena); + values = _Py_asdl_seq_new(len, arena); if (values == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5095,7 +5158,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - elts = asdl_seq_new(len, arena); + elts = _Py_asdl_seq_new(len, arena); if (elts == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5142,7 +5205,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - generators = asdl_seq_new(len, arena); + generators = _Py_asdl_seq_new(len, arena); if (generators == NULL) goto failed; for (i = 0; i < len; i++) { comprehension_ty value; @@ -5189,7 +5252,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - generators = asdl_seq_new(len, arena); + generators = _Py_asdl_seq_new(len, arena); if (generators == NULL) goto failed; for (i = 0; i < len; i++) { comprehension_ty value; @@ -5248,7 +5311,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - generators = asdl_seq_new(len, arena); + generators = _Py_asdl_seq_new(len, arena); if (generators == NULL) goto failed; for (i = 0; i < len; i++) { comprehension_ty value; @@ -5295,7 +5358,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - generators = asdl_seq_new(len, arena); + generators = _Py_asdl_seq_new(len, arena); if (generators == NULL) goto failed; for (i = 0; i < len; i++) { comprehension_ty value; @@ -5319,7 +5382,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) if (isinstance) { expr_ty value; - if (_PyObject_HasAttrId(obj, &PyId_value)) { + if (exists_not_none(obj, &PyId_value)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_value); if (tmp == NULL) goto failed; @@ -5386,7 +5449,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - ops = asdl_int_seq_new(len, arena); + ops = _Py_asdl_int_seq_new(len, arena); if (ops == NULL) goto failed; for (i = 0; i < len; i++) { cmpop_ty value; @@ -5410,7 +5473,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - comparators = asdl_seq_new(len, arena); + comparators = _Py_asdl_seq_new(len, arena); if (comparators == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5460,7 +5523,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - args = asdl_seq_new(len, arena); + args = _Py_asdl_seq_new(len, arena); if (args == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5484,7 +5547,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - keywords = asdl_seq_new(len, arena); + keywords = _Py_asdl_seq_new(len, arena); if (keywords == NULL) goto failed; for (i = 0; i < len; i++) { keyword_ty value; @@ -5497,7 +5560,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_starargs)) { + if (exists_not_none(obj, &PyId_starargs)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_starargs); if (tmp == NULL) goto failed; @@ -5507,7 +5570,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) } else { starargs = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_kwargs)) { + if (exists_not_none(obj, &PyId_kwargs)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_kwargs); if (tmp == NULL) goto failed; @@ -5588,6 +5651,28 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) if (*out == NULL) goto failed; return 0; } + isinstance = PyObject_IsInstance(obj, (PyObject*)NameConstant_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + singleton value; + + if (_PyObject_HasAttrId(obj, &PyId_value)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_value); + if (tmp == NULL) goto failed; + res = obj2ast_singleton(tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NameConstant"); + return 1; + } + *out = NameConstant(value, lineno, col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } isinstance = PyObject_IsInstance(obj, (PyObject*)Ellipsis_type); if (isinstance == -1) { return 1; @@ -5777,7 +5862,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - elts = asdl_seq_new(len, arena); + elts = _Py_asdl_seq_new(len, arena); if (elts == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5824,7 +5909,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - elts = asdl_seq_new(len, arena); + elts = _Py_asdl_seq_new(len, arena); if (elts == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5937,7 +6022,7 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) expr_ty upper; expr_ty step; - if (_PyObject_HasAttrId(obj, &PyId_lower)) { + if (exists_not_none(obj, &PyId_lower)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_lower); if (tmp == NULL) goto failed; @@ -5947,7 +6032,7 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) } else { lower = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_upper)) { + if (exists_not_none(obj, &PyId_upper)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_upper); if (tmp == NULL) goto failed; @@ -5957,7 +6042,7 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) } else { upper = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_step)) { + if (exists_not_none(obj, &PyId_step)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_step); if (tmp == NULL) goto failed; @@ -5989,7 +6074,7 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - dims = asdl_seq_new(len, arena); + dims = _Py_asdl_seq_new(len, arena); if (dims == NULL) goto failed; for (i = 0; i < len; i++) { slice_ty value; @@ -6340,7 +6425,7 @@ obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - ifs = asdl_seq_new(len, arena); + ifs = _Py_asdl_seq_new(len, arena); if (ifs == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -6404,7 +6489,7 @@ obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena) identifier name; asdl_seq* body; - if (_PyObject_HasAttrId(obj, &PyId_type)) { + if (exists_not_none(obj, &PyId_type)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_type); if (tmp == NULL) goto failed; @@ -6414,7 +6499,7 @@ obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena) } else { type = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_name)) { + if (exists_not_none(obj, &PyId_name)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_name); if (tmp == NULL) goto failed; @@ -6435,7 +6520,7 @@ obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -6464,13 +6549,11 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) { PyObject* tmp = NULL; asdl_seq* args; - identifier vararg; - expr_ty varargannotation; + arg_ty vararg; asdl_seq* kwonlyargs; - identifier kwarg; - expr_ty kwargannotation; - asdl_seq* defaults; asdl_seq* kw_defaults; + arg_ty kwarg; + asdl_seq* defaults; if (_PyObject_HasAttrId(obj, &PyId_args)) { int res; @@ -6483,7 +6566,7 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - args = asdl_seq_new(len, arena); + args = _Py_asdl_seq_new(len, arena); if (args == NULL) goto failed; for (i = 0; i < len; i++) { arg_ty value; @@ -6496,26 +6579,16 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_vararg)) { + if (exists_not_none(obj, &PyId_vararg)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_vararg); if (tmp == NULL) goto failed; - res = obj2ast_identifier(tmp, &vararg, arena); + res = obj2ast_arg(tmp, &vararg, arena); if (res != 0) goto failed; Py_CLEAR(tmp); } else { vararg = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_varargannotation)) { - int res; - tmp = _PyObject_GetAttrId(obj, &PyId_varargannotation); - if (tmp == NULL) goto failed; - res = obj2ast_expr(tmp, &varargannotation, arena); - if (res != 0) goto failed; - Py_CLEAR(tmp); - } else { - varargannotation = NULL; - } if (_PyObject_HasAttrId(obj, &PyId_kwonlyargs)) { int res; Py_ssize_t len; @@ -6527,7 +6600,7 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - kwonlyargs = asdl_seq_new(len, arena); + kwonlyargs = _Py_asdl_seq_new(len, arena); if (kwonlyargs == NULL) goto failed; for (i = 0; i < len; i++) { arg_ty value; @@ -6540,76 +6613,66 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_kwarg)) { - int res; - tmp = _PyObject_GetAttrId(obj, &PyId_kwarg); - if (tmp == NULL) goto failed; - res = obj2ast_identifier(tmp, &kwarg, arena); - if (res != 0) goto failed; - Py_CLEAR(tmp); - } else { - kwarg = NULL; - } - if (_PyObject_HasAttrId(obj, &PyId_kwargannotation)) { - int res; - tmp = _PyObject_GetAttrId(obj, &PyId_kwargannotation); - if (tmp == NULL) goto failed; - res = obj2ast_expr(tmp, &kwargannotation, arena); - if (res != 0) goto failed; - Py_CLEAR(tmp); - } else { - kwargannotation = NULL; - } - if (_PyObject_HasAttrId(obj, &PyId_defaults)) { + if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) { int res; Py_ssize_t len; Py_ssize_t i; - tmp = _PyObject_GetAttrId(obj, &PyId_defaults); + tmp = _PyObject_GetAttrId(obj, &PyId_kw_defaults); if (tmp == NULL) goto failed; if (!PyList_Check(tmp)) { - PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name); + PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name); goto failed; } len = PyList_GET_SIZE(tmp); - defaults = asdl_seq_new(len, arena); - if (defaults == NULL) goto failed; + kw_defaults = _Py_asdl_seq_new(len, arena); + if (kw_defaults == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; - asdl_seq_SET(defaults, i, value); + asdl_seq_SET(kw_defaults, i, value); } Py_CLEAR(tmp); } else { - PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments"); + PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) { + if (exists_not_none(obj, &PyId_kwarg)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_kwarg); + if (tmp == NULL) goto failed; + res = obj2ast_arg(tmp, &kwarg, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + kwarg = NULL; + } + if (_PyObject_HasAttrId(obj, &PyId_defaults)) { int res; Py_ssize_t len; Py_ssize_t i; - tmp = _PyObject_GetAttrId(obj, &PyId_kw_defaults); + tmp = _PyObject_GetAttrId(obj, &PyId_defaults); if (tmp == NULL) goto failed; if (!PyList_Check(tmp)) { - PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name); + PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name); goto failed; } len = PyList_GET_SIZE(tmp); - kw_defaults = asdl_seq_new(len, arena); - if (kw_defaults == NULL) goto failed; + defaults = _Py_asdl_seq_new(len, arena); + if (defaults == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; - asdl_seq_SET(kw_defaults, i, value); + asdl_seq_SET(defaults, i, value); } Py_CLEAR(tmp); } else { - PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments"); + PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments"); return 1; } - *out = arguments(args, vararg, varargannotation, kwonlyargs, kwarg, - kwargannotation, defaults, kw_defaults, arena); + *out = arguments(args, vararg, kwonlyargs, kw_defaults, kwarg, defaults, + arena); return 0; failed: Py_XDECREF(tmp); @@ -6634,7 +6697,7 @@ obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_annotation)) { + if (exists_not_none(obj, &PyId_annotation)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_annotation); if (tmp == NULL) goto failed; @@ -6705,7 +6768,7 @@ obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_asname)) { + if (exists_not_none(obj, &PyId_asname)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_asname); if (tmp == NULL) goto failed; @@ -6740,7 +6803,7 @@ obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_optional_vars)) { + if (exists_not_none(obj, &PyId_optional_vars)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_optional_vars); if (tmp == NULL) goto failed; @@ -6770,7 +6833,7 @@ PyInit__ast(void) if (!m) return NULL; d = PyModule_GetDict(m); if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return NULL; - if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0) + if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) return NULL; if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return NULL; if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0) return @@ -6850,6 +6913,8 @@ PyInit__ast(void) if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return NULL; if (PyDict_SetItemString(d, "Bytes", (PyObject*)Bytes_type) < 0) return NULL; + if (PyDict_SetItemString(d, "NameConstant", (PyObject*)NameConstant_type) < + 0) return NULL; if (PyDict_SetItemString(d, "Ellipsis", (PyObject*)Ellipsis_type) < 0) return NULL; if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) < 0) @@ -6949,7 +7014,8 @@ PyInit__ast(void) PyObject* PyAST_mod2obj(mod_ty t) { - init_types(); + if (!init_types()) + return NULL; return ast2obj_mod(t); } @@ -6963,7 +7029,8 @@ mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode) int isinstance; assert(0 <= mode && mode <= 2); - init_types(); + if (!init_types()) + return NULL; isinstance = PyObject_IsInstance(ast, req_type[mode]); if (isinstance == -1) @@ -6981,7 +7048,8 @@ mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode) int PyAST_Check(PyObject* obj) { - init_types(); + if (!init_types()) + return -1; return PyObject_IsInstance(obj, (PyObject*)&AST_type); } diff --git a/Python/_warnings.c b/Python/_warnings.c index f33e477..b8d4bb6 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -283,9 +283,9 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject PyFile_WriteString(source_line_str, f_stderr); PyFile_WriteString("\n", f_stderr); } - else - if (_Py_DisplaySourceLine(f_stderr, filename, lineno, 2) < 0) - return; + else { + _Py_DisplaySourceLine(f_stderr, filename, lineno, 2); + } PyErr_Clear(); } @@ -707,14 +707,14 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds) /* Handle the warning. */ returned = warn_explicit(category, message, filename, lineno, module, - registry, source_line); + registry, source_line); Py_DECREF(source_list); return returned; } standard_call: return warn_explicit(category, message, filename, lineno, module, - registry, NULL); + registry, NULL); } @@ -786,11 +786,26 @@ PyErr_Warn(PyObject *category, char *text) /* Warning with explicit origin */ int +PyErr_WarnExplicitObject(PyObject *category, PyObject *message, + PyObject *filename, int lineno, + PyObject *module, PyObject *registry) +{ + PyObject *res; + if (category == NULL) + category = PyExc_RuntimeWarning; + res = warn_explicit(category, message, filename, lineno, + module, registry, NULL); + if (res == NULL) + return -1; + Py_DECREF(res); + return 0; +} + +int PyErr_WarnExplicit(PyObject *category, const char *text, const char *filename_str, int lineno, const char *module_str, PyObject *registry) { - PyObject *res; PyObject *message = PyUnicode_FromString(text); PyObject *filename = PyUnicode_DecodeFSDefault(filename_str); PyObject *module = NULL; @@ -800,18 +815,12 @@ PyErr_WarnExplicit(PyObject *category, const char *text, goto exit; if (module_str != NULL) { module = PyUnicode_FromString(module_str); - if (module == NULL) - goto exit; + if (module == NULL) + goto exit; } - if (category == NULL) - category = PyExc_RuntimeWarning; - res = warn_explicit(category, message, filename, lineno, module, registry, - NULL); - if (res == NULL) - goto exit; - Py_DECREF(res); - ret = 0; + ret = PyErr_WarnExplicitObject(category, message, filename, lineno, + module, registry); exit: Py_XDECREF(message); @@ -820,6 +829,49 @@ PyErr_WarnExplicit(PyObject *category, const char *text, return ret; } +int +PyErr_WarnExplicitFormat(PyObject *category, + const char *filename_str, int lineno, + const char *module_str, PyObject *registry, + const char *format, ...) +{ + PyObject *message; + PyObject *module = NULL; + PyObject *filename = PyUnicode_DecodeFSDefault(filename_str); + int ret = -1; + va_list vargs; + + if (filename == NULL) + goto exit; + if (module_str != NULL) { + module = PyUnicode_FromString(module_str); + if (module == NULL) + goto exit; + } + +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, format); +#else + va_start(vargs); +#endif + message = PyUnicode_FromFormatV(format, vargs); + if (message != NULL) { + PyObject *res; + res = warn_explicit(category, message, filename, lineno, + module, registry, NULL); + Py_DECREF(message); + if (res != NULL) { + Py_DECREF(res); + ret = 0; + } + } + va_end(vargs); +exit: + Py_XDECREF(module); + Py_XDECREF(filename); + return ret; +} + PyDoc_STRVAR(warn_doc, "Issue a warning, or maybe ignore it or raise an exception."); diff --git a/Python/asdl.c b/Python/asdl.c index e7e3280..74fa941 100644 --- a/Python/asdl.c +++ b/Python/asdl.c @@ -2,7 +2,7 @@ #include "asdl.h" asdl_seq * -asdl_seq_new(Py_ssize_t size, PyArena *arena) +_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena) { asdl_seq *seq = NULL; size_t n = (size ? (sizeof(void *) * (size - 1)) : 0); @@ -33,7 +33,7 @@ asdl_seq_new(Py_ssize_t size, PyArena *arena) } asdl_int_seq * -asdl_int_seq_new(Py_ssize_t size, PyArena *arena) +_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); diff --git a/Python/ast.c b/Python/ast.c index 9a0b064..3bd24fd 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -109,22 +109,14 @@ validate_arguments(arguments_ty args) { if (!validate_args(args->args)) return 0; - if (args->varargannotation) { - if (!args->vararg) { - PyErr_SetString(PyExc_ValueError, "varargannotation but no vararg on arguments"); - return 0; - } - if (!validate_expr(args->varargannotation, Load)) + if (args->vararg && args->vararg->annotation + && !validate_expr(args->vararg->annotation, Load)) { return 0; } if (!validate_args(args->kwonlyargs)) return 0; - if (args->kwargannotation) { - if (!args->kwarg) { - PyErr_SetString(PyExc_ValueError, "kwargannotation but no kwarg on arguments"); - return 0; - } - if (!validate_expr(args->kwargannotation, Load)) + if (args->kwarg && args->kwarg->annotation + && !validate_expr(args->kwarg->annotation, Load)) { return 0; } if (asdl_seq_LEN(args->defaults) > asdl_seq_LEN(args->args)) { @@ -282,6 +274,7 @@ validate_expr(expr_ty exp, expr_context_ty ctx) return validate_exprs(exp->v.Tuple.elts, ctx, 0); /* These last cases don't have any checking. */ case Name_kind: + case NameConstant_kind: case Ellipsis_kind: return 1; default: @@ -498,7 +491,7 @@ PyAST_Validate(mod_ty mod) struct compiling { char *c_encoding; /* source encoding */ PyArena *c_arena; /* arena for allocating memeory */ - const char *c_filename; /* filename */ + PyObject *c_filename; /* filename */ PyObject *c_normalize; /* Normalization function from unicodedata. */ PyObject *c_normalize_args; /* Normalization argument tuple. */ }; @@ -567,7 +560,10 @@ new_identifier(const char *n, struct compiling *c) id = id2; } PyUnicode_InternInPlace(&id); - PyArena_AddPyObject(c->c_arena, id); + if (PyArena_AddPyObject(c->c_arena, id) < 0) { + Py_DECREF(id); + return NULL; + } return id; } @@ -577,24 +573,13 @@ static int ast_error(struct compiling *c, const node *n, const char *errmsg) { PyObject *value, *errstr, *loc, *tmp; - PyObject *filename_obj; - loc = PyErr_ProgramText(c->c_filename, LINENO(n)); + loc = PyErr_ProgramTextObject(c->c_filename, LINENO(n)); if (!loc) { Py_INCREF(Py_None); loc = Py_None; } - if (c->c_filename) { - filename_obj = PyUnicode_DecodeFSDefault(c->c_filename); - if (!filename_obj) { - Py_DECREF(loc); - return 0; - } - } else { - Py_INCREF(Py_None); - filename_obj = Py_None; - } - tmp = Py_BuildValue("(NiiN)", filename_obj, LINENO(n), n->n_col_offset, loc); + tmp = Py_BuildValue("(OiiN)", c->c_filename, LINENO(n), n->n_col_offset, loc); if (!tmp) return 0; errstr = PyUnicode_FromString(errmsg); @@ -677,8 +662,8 @@ num_stmts(const node *n) */ mod_ty -PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, - PyArena *arena) +PyAST_FromNodeObject(const node *n, PyCompilerFlags *flags, + PyObject *filename, PyArena *arena) { int i, j, k, num; asdl_seq *stmts = NULL; @@ -688,6 +673,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, mod_ty res = NULL; c.c_arena = arena; + /* borrowed reference */ c.c_filename = filename; c.c_normalize = c.c_normalize_args = NULL; if (flags && flags->cf_flags & PyCF_SOURCE_IS_UTF8) { @@ -710,7 +696,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, k = 0; switch (TYPE(n)) { case file_input: - stmts = asdl_seq_new(num_stmts(n), arena); + stmts = _Py_asdl_seq_new(num_stmts(n), arena); if (!stmts) goto out; for (i = 0; i < NCH(n) - 1; i++) { @@ -750,7 +736,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, } case single_input: if (TYPE(CHILD(n, 0)) == NEWLINE) { - stmts = asdl_seq_new(1, arena); + stmts = _Py_asdl_seq_new(1, arena); if (!stmts) goto out; asdl_seq_SET(stmts, 0, Pass(n->n_lineno, n->n_col_offset, @@ -762,7 +748,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, else { n = CHILD(n, 0); num = num_stmts(n); - stmts = asdl_seq_new(num, arena); + stmts = _Py_asdl_seq_new(num, arena); if (!stmts) goto out; if (num == 1) { @@ -801,6 +787,21 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, return res; } +mod_ty +PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename_str, + PyArena *arena) +{ + mod_ty mod; + PyObject *filename; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + mod = PyAST_FromNodeObject(n, flags, filename, arena); + Py_DECREF(filename); + return mod; + +} + /* Return the AST repr. of the operator represented as syntax (|, ^, etc.) */ @@ -903,7 +904,7 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) break; case Name_kind: if (ctx == Store) { - if (forbidden_name(c, e->v.Name.id, n, 1)) + if (forbidden_name(c, e->v.Name.id, n, 0)) return 0; /* forbidden_name() calls ast_error() */ } e->v.Name.ctx = ctx; @@ -955,6 +956,9 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) case Bytes_kind: expr_name = "literal"; break; + case NameConstant_kind: + expr_name = "keyword"; + break; case Ellipsis_kind: expr_name = "Ellipsis"; break; @@ -1095,7 +1099,7 @@ seq_for_testlist(struct compiling *c, const node *n) int i; assert(TYPE(n) == testlist || TYPE(n) == testlist_star_expr || TYPE(n) == testlist_comp); - seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!seq) return NULL; @@ -1119,6 +1123,7 @@ ast_for_arg(struct compiling *c, const node *n) identifier name; expr_ty annotation = NULL; node *ch; + arg_ty tmp; assert(TYPE(n) == tfpdef || TYPE(n) == vfpdef); ch = CHILD(n, 0); @@ -1134,7 +1139,13 @@ ast_for_arg(struct compiling *c, const node *n) return NULL; } - return arg(name, annotation, c->c_arena); + tmp = arg(name, annotation, c->c_arena); + if (!tmp) + return NULL; + + tmp->lineno = LINENO(n); + tmp->col_offset = n->n_col_offset; + return tmp; } /* returns -1 if failed to handle keyword only arguments @@ -1230,15 +1241,13 @@ ast_for_arguments(struct compiling *c, const node *n) int i, j, k, nposargs = 0, nkwonlyargs = 0; int nposdefaults = 0, found_default = 0; asdl_seq *posargs, *posdefaults, *kwonlyargs, *kwdefaults; - identifier vararg = NULL, kwarg = NULL; + arg_ty vararg = NULL, kwarg = NULL; arg_ty arg; - expr_ty varargannotation = NULL, kwargannotation = NULL; node *ch; if (TYPE(n) == parameters) { if (NCH(n) == 2) /* () as argument list */ - return arguments(NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, c->c_arena); + return arguments(NULL, NULL, NULL, NULL, NULL, NULL, c->c_arena); n = CHILD(n, 1); } assert(TYPE(n) == typedargslist || TYPE(n) == varargslist); @@ -1270,22 +1279,22 @@ ast_for_arguments(struct compiling *c, const node *n) if (TYPE(ch) == DOUBLESTAR) break; if (TYPE(ch) == tfpdef || TYPE(ch) == vfpdef) nkwonlyargs++; } - posargs = (nposargs ? asdl_seq_new(nposargs, c->c_arena) : NULL); + posargs = (nposargs ? _Py_asdl_seq_new(nposargs, c->c_arena) : NULL); if (!posargs && nposargs) return NULL; kwonlyargs = (nkwonlyargs ? - asdl_seq_new(nkwonlyargs, c->c_arena) : NULL); + _Py_asdl_seq_new(nkwonlyargs, c->c_arena) : NULL); if (!kwonlyargs && nkwonlyargs) return NULL; posdefaults = (nposdefaults ? - asdl_seq_new(nposdefaults, c->c_arena) : NULL); + _Py_asdl_seq_new(nposdefaults, c->c_arena) : NULL); if (!posdefaults && nposdefaults) return NULL; /* The length of kwonlyargs and kwdefaults are same since we set NULL as default for keyword only argument w/o default - we have sequence data structure, but no dictionary */ kwdefaults = (nkwonlyargs ? - asdl_seq_new(nkwonlyargs, c->c_arena) : NULL); + _Py_asdl_seq_new(nkwonlyargs, c->c_arena) : NULL); if (!kwdefaults && nkwonlyargs) return NULL; @@ -1344,17 +1353,10 @@ ast_for_arguments(struct compiling *c, const node *n) i = res; /* res has new position to process */ } else { - vararg = NEW_IDENTIFIER(CHILD(ch, 0)); + vararg = ast_for_arg(c, ch); if (!vararg) return NULL; - if (forbidden_name(c, vararg, CHILD(ch, 0), 0)) - return NULL; - if (NCH(ch) > 1) { - /* there is an annotation on the vararg */ - varargannotation = ast_for_expr(c, CHILD(ch, 2)); - if (!varargannotation) - return NULL; - } + i += 3; if (i < NCH(n) && (TYPE(CHILD(n, i)) == tfpdef || TYPE(CHILD(n, i)) == vfpdef)) { @@ -1369,17 +1371,9 @@ ast_for_arguments(struct compiling *c, const node *n) case DOUBLESTAR: ch = CHILD(n, i+1); /* tfpdef */ assert(TYPE(ch) == tfpdef || TYPE(ch) == vfpdef); - kwarg = NEW_IDENTIFIER(CHILD(ch, 0)); + kwarg = ast_for_arg(c, ch); if (!kwarg) return NULL; - if (NCH(ch) > 1) { - /* there is an annotation on the kwarg */ - kwargannotation = ast_for_expr(c, CHILD(ch, 2)); - if (!kwargannotation) - return NULL; - } - if (forbidden_name(c, kwarg, CHILD(ch, 0), 0)) - return NULL; i += 3; break; default: @@ -1389,8 +1383,7 @@ ast_for_arguments(struct compiling *c, const node *n) return NULL; } } - return arguments(posargs, vararg, varargannotation, kwonlyargs, kwarg, - kwargannotation, posdefaults, kwdefaults, c->c_arena); + return arguments(posargs, vararg, kwonlyargs, kwdefaults, kwarg, posdefaults, c->c_arena); } static expr_ty @@ -1469,7 +1462,7 @@ ast_for_decorators(struct compiling *c, const node *n) int i; REQ(n, decorators); - decorator_seq = asdl_seq_new(NCH(n), c->c_arena); + decorator_seq = _Py_asdl_seq_new(NCH(n), c->c_arena); if (!decorator_seq) return NULL; @@ -1555,8 +1548,7 @@ ast_for_lambdef(struct compiling *c, const node *n) expr_ty expression; if (NCH(n) == 3) { - args = arguments(NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, c->c_arena); + args = arguments(NULL, NULL, NULL, NULL, NULL, NULL, c->c_arena); if (!args) return NULL; expression = ast_for_expr(c, CHILD(n, 2)); @@ -1666,7 +1658,7 @@ ast_for_comprehension(struct compiling *c, const node *n) if (n_fors == -1) return NULL; - comps = asdl_seq_new(n_fors, c->c_arena); + comps = _Py_asdl_seq_new(n_fors, c->c_arena); if (!comps) return NULL; @@ -1707,7 +1699,7 @@ ast_for_comprehension(struct compiling *c, const node *n) if (n_ifs == -1) return NULL; - ifs = asdl_seq_new(n_ifs, c->c_arena); + ifs = _Py_asdl_seq_new(n_ifs, c->c_arena); if (!ifs) return NULL; @@ -1819,11 +1811,21 @@ ast_for_atom(struct compiling *c, const node *n) switch (TYPE(ch)) { case NAME: { - /* All names start in Load context, but may later be - changed. */ - PyObject *name = NEW_IDENTIFIER(ch); + PyObject *name; + const char *s = STR(ch); + size_t len = strlen(s); + if (len >= 4 && len <= 5) { + if (!strcmp(s, "None")) + return NameConstant(Py_None, LINENO(n), n->n_col_offset, c->c_arena); + if (!strcmp(s, "True")) + return NameConstant(Py_True, LINENO(n), n->n_col_offset, c->c_arena); + if (!strcmp(s, "False")) + return NameConstant(Py_False, LINENO(n), n->n_col_offset, c->c_arena); + } + name = new_identifier(s, c); if (!name) return NULL; + /* All names start in Load context, but may later be changed. */ return Name(name, Load, LINENO(n), n->n_col_offset, c->c_arena); } case STRING: { @@ -1848,12 +1850,15 @@ ast_for_atom(struct compiling *c, const node *n) } ast_error(c, n, buf); Py_DECREF(type); - Py_DECREF(value); + Py_XDECREF(value); Py_XDECREF(tback); } return NULL; } - PyArena_AddPyObject(c->c_arena, str); + if (PyArena_AddPyObject(c->c_arena, str) < 0) { + Py_DECREF(str); + return NULL; + } if (bytesmode) return Bytes(str, LINENO(n), n->n_col_offset, c->c_arena); else @@ -1864,7 +1869,10 @@ ast_for_atom(struct compiling *c, const node *n) if (!pynum) return NULL; - PyArena_AddPyObject(c->c_arena, pynum); + if (PyArena_AddPyObject(c->c_arena, pynum) < 0) { + Py_DECREF(pynum); + return NULL; + } return Num(pynum, LINENO(n), n->n_col_offset, c->c_arena); } case ELLIPSIS: /* Ellipsis */ @@ -1913,7 +1921,7 @@ ast_for_atom(struct compiling *c, const node *n) /* it's a simple set */ asdl_seq *elts; size = (NCH(ch) + 1) / 2; /* +1 in case no trailing comma */ - elts = asdl_seq_new(size, c->c_arena); + elts = _Py_asdl_seq_new(size, c->c_arena); if (!elts) return NULL; for (i = 0; i < NCH(ch); i += 2) { @@ -1932,11 +1940,11 @@ ast_for_atom(struct compiling *c, const node *n) } else { /* it's a dict */ size = (NCH(ch) + 1) / 4; /* +1 in case no trailing comma */ - keys = asdl_seq_new(size, c->c_arena); + keys = _Py_asdl_seq_new(size, c->c_arena); if (!keys) return NULL; - values = asdl_seq_new(size, c->c_arena); + values = _Py_asdl_seq_new(size, c->c_arena); if (!values) return NULL; @@ -2093,15 +2101,22 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr) if (NCH(n) == 2) return Call(left_expr, NULL, NULL, NULL, NULL, LINENO(n), n->n_col_offset, c->c_arena); - else - return ast_for_call(c, CHILD(n, 1), left_expr); + else { + expr_ty tmp = ast_for_call(c, CHILD(n, 1), left_expr); + if (!tmp) + return NULL; + + tmp->lineno = LINENO(n); + tmp->col_offset = n->n_col_offset; + return tmp; + } } else if (TYPE(CHILD(n, 0)) == DOT ) { PyObject *attr_id = NEW_IDENTIFIER(CHILD(n, 1)); if (!attr_id) return NULL; return Attribute(left_expr, attr_id, Load, - LINENO(n), n->n_col_offset, c->c_arena); + LINENO(CHILD(n, 1)), CHILD(n, 1)->n_col_offset, c->c_arena); } else { REQ(CHILD(n, 0), LSQB); @@ -2124,7 +2139,7 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr) expr_ty e; int simple = 1; asdl_seq *slices, *elts; - slices = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + slices = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!slices) return NULL; for (j = 0; j < NCH(n); j += 2) { @@ -2140,7 +2155,7 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr) Load, LINENO(n), n->n_col_offset, c->c_arena); } /* extract Index values and put them in a Tuple */ - elts = asdl_seq_new(asdl_seq_LEN(slices), c->c_arena); + elts = _Py_asdl_seq_new(asdl_seq_LEN(slices), c->c_arena); if (!elts) return NULL; for (j = 0; j < asdl_seq_LEN(slices); ++j) { @@ -2202,8 +2217,6 @@ ast_for_power(struct compiling *c, const node *n) tmp = ast_for_trailer(c, ch, e); if (!tmp) return NULL; - tmp->lineno = e->lineno; - tmp->col_offset = e->col_offset; e = tmp; } if (TYPE(CHILD(n, NCH(n) - 1)) == factor) { @@ -2275,7 +2288,7 @@ ast_for_expr(struct compiling *c, const node *n) n = CHILD(n, 0); goto loop; } - seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!seq) return NULL; for (i = 0; i < NCH(n); i += 2) { @@ -2311,10 +2324,10 @@ ast_for_expr(struct compiling *c, const node *n) expr_ty expression; asdl_int_seq *ops; asdl_seq *cmps; - ops = asdl_int_seq_new(NCH(n) / 2, c->c_arena); + ops = _Py_asdl_int_seq_new(NCH(n) / 2, c->c_arena); if (!ops) return NULL; - cmps = asdl_seq_new(NCH(n) / 2, c->c_arena); + cmps = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena); if (!cmps) { return NULL; } @@ -2440,10 +2453,10 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func) return NULL; } - args = asdl_seq_new(nargs + ngens, c->c_arena); + args = _Py_asdl_seq_new(nargs + ngens, c->c_arena); if (!args) return NULL; - keywords = asdl_seq_new(nkeywords, c->c_arena); + keywords = _Py_asdl_seq_new(nkeywords, c->c_arena); if (!keywords) return NULL; nargs = 0; @@ -2620,7 +2633,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n) /* a normal assignment */ REQ(CHILD(n, 1), EQUAL); - targets = asdl_seq_new(NCH(n) / 2, c->c_arena); + targets = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena); if (!targets) return NULL; for (i = 0; i < NCH(n) - 2; i += 2) { @@ -2661,7 +2674,7 @@ ast_for_exprlist(struct compiling *c, const node *n, expr_context_ty context) REQ(n, exprlist); - seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!seq) return NULL; for (i = 0; i < NCH(n); i += 2) { @@ -2846,13 +2859,19 @@ alias_for_import_name(struct compiling *c, const node *n, int store) return NULL; str = uni; PyUnicode_InternInPlace(&str); - PyArena_AddPyObject(c->c_arena, str); + if (PyArena_AddPyObject(c->c_arena, str) < 0) { + Py_DECREF(str); + return NULL; + } return alias(str, NULL, c->c_arena); } break; case STAR: str = PyUnicode_InternFromString("*"); - PyArena_AddPyObject(c->c_arena, str); + if (PyArena_AddPyObject(c->c_arena, str) < 0) { + Py_DECREF(str); + return NULL; + } return alias(str, NULL, c->c_arena); default: PyErr_Format(PyExc_SystemError, @@ -2885,7 +2904,7 @@ ast_for_import_stmt(struct compiling *c, const node *n) if (TYPE(n) == import_name) { n = CHILD(n, 1); REQ(n, dotted_as_names); - aliases = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + aliases = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!aliases) return NULL; for (i = 0; i < NCH(n); i += 2) { @@ -2947,7 +2966,7 @@ ast_for_import_stmt(struct compiling *c, const node *n) return NULL; } - aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena); + aliases = _Py_asdl_seq_new((n_children + 1) / 2, c->c_arena); if (!aliases) return NULL; @@ -2986,7 +3005,7 @@ ast_for_global_stmt(struct compiling *c, const node *n) int i; REQ(n, global_stmt); - s = asdl_seq_new(NCH(n) / 2, c->c_arena); + s = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena); if (!s) return NULL; for (i = 1; i < NCH(n); i += 2) { @@ -3007,7 +3026,7 @@ ast_for_nonlocal_stmt(struct compiling *c, const node *n) int i; REQ(n, nonlocal_stmt); - s = asdl_seq_new(NCH(n) / 2, c->c_arena); + s = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena); if (!s) return NULL; for (i = 1; i < NCH(n); i += 2) { @@ -3060,7 +3079,7 @@ ast_for_suite(struct compiling *c, const node *n) REQ(n, suite); total = num_stmts(n); - seq = asdl_seq_new(total, c->c_arena); + seq = _Py_asdl_seq_new(total, c->c_arena); if (!seq) return NULL; if (TYPE(CHILD(n, 0)) == simple_stmt) { @@ -3179,7 +3198,7 @@ ast_for_if_stmt(struct compiling *c, const node *n) if (has_else) { asdl_seq *suite_seq2; - orelse = asdl_seq_new(1, c->c_arena); + orelse = _Py_asdl_seq_new(1, c->c_arena); if (!orelse) return NULL; expression = ast_for_expr(c, CHILD(n, NCH(n) - 6)); @@ -3203,7 +3222,7 @@ ast_for_if_stmt(struct compiling *c, const node *n) for (i = 0; i < n_elif; i++) { int off = 5 + (n_elif - i - 1) * 4; - asdl_seq *newobj = asdl_seq_new(1, c->c_arena); + asdl_seq *newobj = _Py_asdl_seq_new(1, c->c_arena); if (!newobj) return NULL; expression = ast_for_expr(c, CHILD(n, off)); @@ -3415,7 +3434,7 @@ ast_for_try_stmt(struct compiling *c, const node *n) if (n_except > 0) { int i; /* process except statements to create a try ... except */ - handlers = asdl_seq_new(n_except, c->c_arena); + handlers = _Py_asdl_seq_new(n_except, c->c_arena); if (handlers == NULL) return NULL; @@ -3466,7 +3485,7 @@ ast_for_with_stmt(struct compiling *c, const node *n) REQ(n, with_stmt); n_items = (NCH(n) - 2) / 2; - items = asdl_seq_new(n_items, c->c_arena); + items = _Py_asdl_seq_new(n_items, c->c_arena); if (!items) return NULL; for (i = 1; i < NCH(n) - 2; i += 2) { @@ -3632,18 +3651,16 @@ parsenumber(struct compiling *c, const char *s) end = s + strlen(s) - 1; imflag = *end == 'j' || *end == 'J'; if (s[0] == '0') { - x = (long) PyOS_strtoul((char *)s, (char **)&end, 0); + x = (long) PyOS_strtoul(s, (char **)&end, 0); if (x < 0 && errno == 0) { - return PyLong_FromString((char *)s, - (char **)0, - 0); + return PyLong_FromString(s, (char **)0, 0); } } else - x = PyOS_strtol((char *)s, (char **)&end, 0); + x = PyOS_strtol(s, (char **)&end, 0); if (*end == '\0') { if (errno != 0) - return PyLong_FromString((char *)s, (char **)0, 0); + return PyLong_FromString(s, (char **)0, 0); return PyLong_FromLong(x); } /* XXX Huge floats may silently fail */ @@ -3666,8 +3683,8 @@ parsenumber(struct compiling *c, const char *s) static PyObject * decode_utf8(struct compiling *c, const char **sPtr, const char *end) { - char *s, *t; - t = s = (char *)*sPtr; + const char *s, *t; + t = s = *sPtr; /* while (s < end && *s != '\\') s++; */ /* inefficient for u".." */ while (s < end && (*s & 0x80)) s++; *sPtr = s; diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index dffdf46..4713874 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -57,6 +57,11 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } func = PyTuple_GET_ITEM(args, 0); /* Better be callable */ + if (!PyFunction_Check(func)) { + PyErr_SetString(PyExc_TypeError, + "__build__class__: func must be a function"); + return NULL; + } name = PyTuple_GET_ITEM(args, 1); if (!PyUnicode_Check(name)) { PyErr_SetString(PyExc_TypeError, @@ -155,7 +160,9 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) Py_DECREF(bases); return NULL; } - cell = PyObject_CallFunctionObjArgs(func, ns, NULL); + cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns, + NULL, 0, NULL, 0, NULL, 0, NULL, + PyFunction_GET_CLOSURE(func)); if (cell != NULL) { PyObject *margs; margs = PyTuple_Pack(3, name, bases, ns); @@ -572,8 +579,7 @@ static PyObject * builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) { char *str; - PyObject *filename_obj; - char *filename; + PyObject *filename; char *startstr; int mode = -1; int dont_inherit = 0; @@ -589,12 +595,11 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist, &cmd, - PyUnicode_FSConverter, &filename_obj, + PyUnicode_FSDecoder, &filename, &startstr, &supplied_flags, &dont_inherit, &optimize)) return NULL; - filename = PyBytes_AS_STRING(filename_obj); cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8; if (supplied_flags & @@ -652,24 +657,24 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) PyArena_Free(arena); goto error; } - result = (PyObject*)PyAST_CompileEx(mod, filename, - &cf, optimize, arena); + result = (PyObject*)PyAST_CompileObject(mod, filename, + &cf, optimize, arena); PyArena_Free(arena); } goto finally; } - str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf); + str = source_as_string(cmd, "compile", "string, bytes or AST", &cf); if (str == NULL) goto error; - result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize); + result = Py_CompileStringObject(str, filename, start[mode], &cf, optimize); goto finally; error: result = NULL; finally: - Py_DECREF(filename_obj); + Py_DECREF(filename); return result; } @@ -1322,26 +1327,35 @@ static PyObject * min_max(PyObject *args, PyObject *kwds, int op) { PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL; + PyObject *emptytuple, *defaultval = NULL; + static char *kwlist[] = {"key", "default", NULL}; const char *name = op == Py_LT ? "min" : "max"; + const int positional = PyTuple_Size(args) > 1; + int ret; - if (PyTuple_Size(args) > 1) + if (positional) v = args; - else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v)) + else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) return NULL; - if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) { - keyfunc = PyDict_GetItemString(kwds, "key"); - if (PyDict_Size(kwds)!=1 || keyfunc == NULL) { - PyErr_Format(PyExc_TypeError, - "%s() got an unexpected keyword argument", name); - return NULL; - } - Py_INCREF(keyfunc); + emptytuple = PyTuple_New(0); + if (emptytuple == NULL) + return NULL; + ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist, + &keyfunc, &defaultval); + Py_DECREF(emptytuple); + if (!ret) + return NULL; + + if (positional && defaultval != NULL) { + PyErr_Format(PyExc_TypeError, + "Cannot specify a default for %s() with multiple " + "positional arguments", name); + return NULL; } it = PyObject_GetIter(v); if (it == NULL) { - Py_XDECREF(keyfunc); return NULL; } @@ -1385,14 +1399,18 @@ min_max(PyObject *args, PyObject *kwds, int op) if (PyErr_Occurred()) goto Fail_it; if (maxval == NULL) { - PyErr_Format(PyExc_ValueError, - "%s() arg is an empty sequence", name); assert(maxitem == NULL); + if (defaultval != NULL) { + Py_INCREF(defaultval); + maxitem = defaultval; + } else { + PyErr_Format(PyExc_ValueError, + "%s() arg is an empty sequence", name); + } } else Py_DECREF(maxval); Py_DECREF(it); - Py_XDECREF(keyfunc); return maxitem; Fail_it_item_and_val: @@ -1403,7 +1421,6 @@ Fail_it: Py_XDECREF(maxval); Py_XDECREF(maxitem); Py_DECREF(it); - Py_XDECREF(keyfunc); return NULL; } @@ -1531,6 +1548,11 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds) return NULL; if (file == NULL || file == Py_None) { file = PySys_GetObject("stdout"); + if (file == NULL) { + PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); + return NULL; + } + /* sys.stdout may be None when FILE* stdout isn't connected */ if (file == Py_None) Py_RETURN_NONE; @@ -1810,10 +1832,10 @@ For most object types, eval(repr(object)) == object."); static PyObject * builtin_round(PyObject *self, PyObject *args, PyObject *kwds) { - static PyObject *round_str = NULL; PyObject *ndigits = NULL; static char *kwlist[] = {"number", "ndigits", 0}; - PyObject *number, *round; + PyObject *number, *round, *result; + _Py_IDENTIFIER(__round__); if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round", kwlist, &number, &ndigits)) @@ -1824,24 +1846,21 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } - if (round_str == NULL) { - round_str = PyUnicode_InternFromString("__round__"); - if (round_str == NULL) - return NULL; - } - - round = _PyType_Lookup(Py_TYPE(number), round_str); + round = _PyObject_LookupSpecial(number, &PyId___round__); if (round == NULL) { - PyErr_Format(PyExc_TypeError, - "type %.100s doesn't define __round__ method", - Py_TYPE(number)->tp_name); + if (!PyErr_Occurred()) + PyErr_Format(PyExc_TypeError, + "type %.100s doesn't define __round__ method", + Py_TYPE(number)->tp_name); return NULL; } if (ndigits == NULL) - return PyObject_CallFunction(round, "O", number); + result = PyObject_CallFunctionObjArgs(round, NULL); else - return PyObject_CallFunction(round, "OO", number, ndigits); + result = PyObject_CallFunctionObjArgs(round, ndigits, NULL); + Py_DECREF(round); + return result; } PyDoc_STRVAR(round_doc, @@ -2413,6 +2432,12 @@ PyObject * _PyBuiltin_Init(void) { PyObject *mod, *dict, *debug; + + if (PyType_Ready(&PyFilter_Type) < 0 || + PyType_Ready(&PyMap_Type) < 0 || + PyType_Ready(&PyZip_Type) < 0) + return NULL; + mod = PyModule_Create(&builtinsmodule); if (mod == NULL) return NULL; diff --git a/Python/ceval.c b/Python/ceval.c index faee5cd..2d52862 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -37,7 +37,7 @@ typedef unsigned long long uint64; static void ppc_getcounter(uint64 *v) { - register unsigned long tbu, tb, tbu2; + unsigned long tbu, tb, tbu2; loop: asm volatile ("mftbu %0" : "=r" (tbu) ); @@ -142,8 +142,6 @@ static PyObject * special_lookup(PyObject *, _Py_Identifier *); #define NAME_ERROR_MSG \ "name '%.200s' is not defined" -#define GLOBAL_NAME_ERROR_MSG \ - "global name '%.200s' is not defined" #define UNBOUNDLOCAL_ERROR_MSG \ "local variable '%.200s' referenced before assignment" #define UNBOUNDFREE_ERROR_MSG \ @@ -364,29 +362,28 @@ PyEval_ReleaseThread(PyThreadState *tstate) drop_gil(tstate); } -/* This function is called from PyOS_AfterFork to ensure that newly - created child processes don't hold locks referring to threads which - are not running in the child process. (This could also be done using - pthread_atfork mechanism, at least for the pthreads implementation.) */ +/* This function is called from PyOS_AfterFork to destroy all threads which are + * not running in the child process, and clear internal locks which might be + * held by those threads. (This could also be done using pthread_atfork + * mechanism, at least for the pthreads implementation.) */ void PyEval_ReInitThreads(void) { _Py_IDENTIFIER(_after_fork); PyObject *threading, *result; - PyThreadState *tstate = PyThreadState_GET(); + PyThreadState *current_tstate = PyThreadState_GET(); if (!gil_created()) return; recreate_gil(); pending_lock = PyThread_allocate_lock(); - take_gil(tstate); + take_gil(current_tstate); main_thread = PyThread_get_thread_ident(); /* Update the threading module with the new state. */ - tstate = PyThreadState_GET(); - threading = PyMapping_GetItemString(tstate->interp->modules, + threading = PyMapping_GetItemString(current_tstate->interp->modules, "threading"); if (threading == NULL) { /* threading not imported */ @@ -399,6 +396,9 @@ PyEval_ReInitThreads(void) else Py_DECREF(result); Py_DECREF(threading); + + /* Destroy all threads except the current one */ + _PyThreadState_DeleteExcept(current_tstate); } #else @@ -742,7 +742,6 @@ _Py_CheckRecursiveCall(char *where) enum why_code { WHY_NOT = 0x0001, /* No error */ WHY_EXCEPTION = 0x0002, /* Exception occurred */ - WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */ WHY_RETURN = 0x0008, /* 'return' statement */ WHY_BREAK = 0x0010, /* 'break' statement */ WHY_CONTINUE = 0x0020, /* 'continue' statement */ @@ -753,7 +752,7 @@ enum why_code { static void save_exc_state(PyThreadState *, PyFrameObject *); static void swap_exc_state(PyThreadState *, PyFrameObject *); static void restore_and_clear_exc_state(PyThreadState *, PyFrameObject *); -static enum why_code do_raise(PyObject *, PyObject *); +static int do_raise(PyObject *, PyObject *); static int unpack_iterable(PyObject *, int, int, PyObject **); /* Records whether tracing is on for any thread. Counts the number of @@ -793,18 +792,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #ifdef DXPAIRS int lastopcode = 0; #endif - register PyObject **stack_pointer; /* Next free slot in value stack */ - register unsigned char *next_instr; - register int opcode; /* Current opcode */ - register int oparg; /* Current opcode argument, if any */ - register enum why_code why; /* Reason for block stack unwind */ - register int err; /* Error status -- nonzero if error */ - register PyObject *x; /* Result object -- NULL if error */ - register PyObject *v; /* Temporary objects popped off stack */ - register PyObject *w; - register PyObject *u; - register PyObject *t; - register PyObject **fastlocals, **freevars; + PyObject **stack_pointer; /* Next free slot in value stack */ + unsigned char *next_instr; + int opcode; /* Current opcode */ + int oparg; /* Current opcode argument, if any */ + enum why_code why; /* Reason for block stack unwind */ + PyObject **fastlocals, **freevars; PyObject *retval = NULL; /* Return value */ PyThreadState *tstate = PyThreadState_GET(); PyCodeObject *co; @@ -1189,6 +1182,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) stack_pointer = f->f_stacktop; assert(stack_pointer != NULL); f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */ + f->f_executing = 1; if (co->co_flags & CO_GENERATOR && !throwflag) { if (f->f_exc_type != NULL && f->f_exc_type != Py_None) { @@ -1206,14 +1200,16 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #endif why = WHY_NOT; - err = 0; - x = Py_None; /* Not a reference, just anything non-NULL */ - w = NULL; - if (throwflag) { /* support for generator.throw() */ - why = WHY_EXCEPTION; - goto on_error; - } + if (throwflag) /* support for generator.throw() */ + goto error; + +#ifdef Py_DEBUG + /* PyEval_EvalFrameEx() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller looses its exception */ + assert(!PyErr_Occurred()); +#endif for (;;) { #ifdef WITH_TSC @@ -1235,6 +1231,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #endif assert(stack_pointer >= f->f_valuestack); /* else underflow */ assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */ + assert(!PyErr_Occurred()); /* Do periodic things. Doing this every time through the loop would add too much overhead, so we do it @@ -1250,15 +1247,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) a try: finally: block uninterruptible. */ goto fast_next_opcode; } - tstate->tick_counter++; #ifdef WITH_TSC ticked = 1; #endif if (_Py_atomic_load_relaxed(&pendingcalls_to_do)) { - if (Py_MakePendingCalls() < 0) { - why = WHY_EXCEPTION; - goto on_error; - } + if (Py_MakePendingCalls() < 0) + goto error; } #ifdef WITH_THREAD if (_Py_atomic_load_relaxed(&gil_drop_request)) { @@ -1276,13 +1270,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #endif /* Check for asynchronous exceptions. */ if (tstate->async_exc != NULL) { - x = tstate->async_exc; + PyObject *exc = tstate->async_exc; tstate->async_exc = NULL; UNSIGNAL_ASYNC_EXC(); - PyErr_SetNone(x); - Py_DECREF(x); - why = WHY_EXCEPTION; - goto on_error; + PyErr_SetNone(exc); + Py_DECREF(exc); + goto error; } } @@ -1293,6 +1286,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) if (_Py_TracingPossible && tstate->c_tracefunc != NULL && !tstate->tracing) { + int err; /* see maybe_call_line_trace for expository comments */ f->f_stacktop = stack_pointer; @@ -1307,10 +1301,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) stack_pointer = f->f_stacktop; f->f_stacktop = NULL; } - if (err) { + if (err) /* trace function raised an exception */ - goto on_error; - } + goto error; } /* Extract opcode and argument */ @@ -1357,87 +1350,99 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) TARGET(NOP) FAST_DISPATCH(); - TARGET(LOAD_FAST) - x = GETLOCAL(oparg); - if (x != NULL) { - Py_INCREF(x); - PUSH(x); - FAST_DISPATCH(); + TARGET(LOAD_FAST) { + PyObject *value = GETLOCAL(oparg); + if (value == NULL) { + format_exc_check_arg(PyExc_UnboundLocalError, + UNBOUNDLOCAL_ERROR_MSG, + PyTuple_GetItem(co->co_varnames, oparg)); + goto error; } - format_exc_check_arg(PyExc_UnboundLocalError, - UNBOUNDLOCAL_ERROR_MSG, - PyTuple_GetItem(co->co_varnames, oparg)); - break; + Py_INCREF(value); + PUSH(value); + FAST_DISPATCH(); + } - TARGET(LOAD_CONST) - x = GETITEM(consts, oparg); - Py_INCREF(x); - PUSH(x); + TARGET(LOAD_CONST) { + PyObject *value = GETITEM(consts, oparg); + Py_INCREF(value); + PUSH(value); FAST_DISPATCH(); + } PREDICTED_WITH_ARG(STORE_FAST); - TARGET(STORE_FAST) - v = POP(); - SETLOCAL(oparg, v); + TARGET(STORE_FAST) { + PyObject *value = POP(); + SETLOCAL(oparg, value); FAST_DISPATCH(); + } - TARGET(POP_TOP) - v = POP(); - Py_DECREF(v); + TARGET(POP_TOP) { + PyObject *value = POP(); + Py_DECREF(value); FAST_DISPATCH(); + } - TARGET(ROT_TWO) - v = TOP(); - w = SECOND(); - SET_TOP(w); - SET_SECOND(v); + TARGET(ROT_TWO) { + PyObject *top = TOP(); + PyObject *second = SECOND(); + SET_TOP(second); + SET_SECOND(top); FAST_DISPATCH(); + } - TARGET(ROT_THREE) - v = TOP(); - w = SECOND(); - x = THIRD(); - SET_TOP(w); - SET_SECOND(x); - SET_THIRD(v); + TARGET(ROT_THREE) { + PyObject *top = TOP(); + PyObject *second = SECOND(); + PyObject *third = THIRD(); + SET_TOP(second); + SET_SECOND(third); + SET_THIRD(top); FAST_DISPATCH(); + } - TARGET(DUP_TOP) - v = TOP(); - Py_INCREF(v); - PUSH(v); + TARGET(DUP_TOP) { + PyObject *top = TOP(); + Py_INCREF(top); + PUSH(top); FAST_DISPATCH(); + } - TARGET(DUP_TOP_TWO) - x = TOP(); - Py_INCREF(x); - w = SECOND(); - Py_INCREF(w); + TARGET(DUP_TOP_TWO) { + PyObject *top = TOP(); + PyObject *second = SECOND(); + Py_INCREF(top); + Py_INCREF(second); STACKADJ(2); - SET_TOP(x); - SET_SECOND(w); + SET_TOP(top); + SET_SECOND(second); FAST_DISPATCH(); + } - TARGET(UNARY_POSITIVE) - v = TOP(); - x = PyNumber_Positive(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(UNARY_POSITIVE) { + PyObject *value = TOP(); + PyObject *res = PyNumber_Positive(value); + Py_DECREF(value); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(UNARY_NEGATIVE) - v = TOP(); - x = PyNumber_Negative(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(UNARY_NEGATIVE) { + PyObject *value = TOP(); + PyObject *res = PyNumber_Negative(value); + Py_DECREF(value); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(UNARY_NOT) - v = TOP(); - err = PyObject_IsTrue(v); - Py_DECREF(v); + TARGET(UNARY_NOT) { + PyObject *value = TOP(); + int err = PyObject_IsTrue(value); + Py_DECREF(value); if (err == 0) { Py_INCREF(Py_True); SET_TOP(Py_True); @@ -1450,416 +1455,460 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } STACKADJ(-1); - break; + goto error; + } - TARGET(UNARY_INVERT) - v = TOP(); - x = PyNumber_Invert(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(UNARY_INVERT) { + PyObject *value = TOP(); + PyObject *res = PyNumber_Invert(value); + Py_DECREF(value); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_POWER) - w = POP(); - v = TOP(); - x = PyNumber_Power(v, w, Py_None); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_POWER) { + PyObject *exp = POP(); + PyObject *base = TOP(); + PyObject *res = PyNumber_Power(base, exp, Py_None); + Py_DECREF(base); + Py_DECREF(exp); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_MULTIPLY) - w = POP(); - v = TOP(); - x = PyNumber_Multiply(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_MULTIPLY) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Multiply(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_TRUE_DIVIDE) - w = POP(); - v = TOP(); - x = PyNumber_TrueDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_TRUE_DIVIDE) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *quotient = PyNumber_TrueDivide(dividend, divisor); + Py_DECREF(dividend); + Py_DECREF(divisor); + SET_TOP(quotient); + if (quotient == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_FLOOR_DIVIDE) - w = POP(); - v = TOP(); - x = PyNumber_FloorDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_FLOOR_DIVIDE) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *quotient = PyNumber_FloorDivide(dividend, divisor); + Py_DECREF(dividend); + Py_DECREF(divisor); + SET_TOP(quotient); + if (quotient == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_MODULO) - w = POP(); - v = TOP(); - if (PyUnicode_CheckExact(v)) - x = PyUnicode_Format(v, w); - else - x = PyNumber_Remainder(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_MODULO) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *res = PyUnicode_CheckExact(dividend) ? + PyUnicode_Format(dividend, divisor) : + PyNumber_Remainder(dividend, divisor); + Py_DECREF(divisor); + Py_DECREF(dividend); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_ADD) - w = POP(); - v = TOP(); - if (PyUnicode_CheckExact(v) && - PyUnicode_CheckExact(w)) { - x = unicode_concatenate(v, w, f, next_instr); + TARGET(BINARY_ADD) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *sum; + if (PyUnicode_CheckExact(left) && + PyUnicode_CheckExact(right)) { + sum = unicode_concatenate(left, right, f, next_instr); /* unicode_concatenate consumed the ref to v */ - goto skip_decref_vx; } else { - x = PyNumber_Add(v, w); + sum = PyNumber_Add(left, right); + Py_DECREF(left); } - Py_DECREF(v); - skip_decref_vx: - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; - - TARGET(BINARY_SUBTRACT) - w = POP(); - v = TOP(); - x = PyNumber_Subtract(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; - - TARGET(BINARY_SUBSCR) - w = POP(); - v = TOP(); - x = PyObject_GetItem(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + Py_DECREF(right); + SET_TOP(sum); + if (sum == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_LSHIFT) - w = POP(); - v = TOP(); - x = PyNumber_Lshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_SUBTRACT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *diff = PyNumber_Subtract(left, right); + Py_DECREF(right); + Py_DECREF(left); + SET_TOP(diff); + if (diff == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_RSHIFT) - w = POP(); - v = TOP(); - x = PyNumber_Rshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_SUBSCR) { + PyObject *sub = POP(); + PyObject *container = TOP(); + PyObject *res = PyObject_GetItem(container, sub); + Py_DECREF(container); + Py_DECREF(sub); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_AND) - w = POP(); - v = TOP(); - x = PyNumber_And(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_LSHIFT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Lshift(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_XOR) - w = POP(); - v = TOP(); - x = PyNumber_Xor(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_RSHIFT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Rshift(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_OR) - w = POP(); - v = TOP(); - x = PyNumber_Or(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_AND) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_And(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(LIST_APPEND) - w = POP(); - v = PEEK(oparg); - err = PyList_Append(v, w); - Py_DECREF(w); - if (err == 0) { - PREDICT(JUMP_ABSOLUTE); - DISPATCH(); - } - break; + TARGET(BINARY_XOR) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Xor(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(SET_ADD) - w = POP(); - v = stack_pointer[-oparg]; - err = PySet_Add(v, w); - Py_DECREF(w); - if (err == 0) { - PREDICT(JUMP_ABSOLUTE); - DISPATCH(); - } - break; + TARGET(BINARY_OR) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Or(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_POWER) - w = POP(); - v = TOP(); - x = PyNumber_InPlacePower(v, w, Py_None); + TARGET(LIST_APPEND) { + PyObject *v = POP(); + PyObject *list = PEEK(oparg); + int err; + err = PyList_Append(list, v); Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + if (err != 0) + goto error; + PREDICT(JUMP_ABSOLUTE); + DISPATCH(); + } - TARGET(INPLACE_MULTIPLY) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceMultiply(v, w); + TARGET(SET_ADD) { + PyObject *v = POP(); + PyObject *set = stack_pointer[-oparg]; + int err; + err = PySet_Add(set, v); Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + if (err != 0) + goto error; + PREDICT(JUMP_ABSOLUTE); + DISPATCH(); + } - TARGET(INPLACE_TRUE_DIVIDE) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceTrueDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_POWER) { + PyObject *exp = POP(); + PyObject *base = TOP(); + PyObject *res = PyNumber_InPlacePower(base, exp, Py_None); + Py_DECREF(base); + Py_DECREF(exp); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_FLOOR_DIVIDE) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceFloorDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_MULTIPLY) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceMultiply(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_MODULO) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceRemainder(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_TRUE_DIVIDE) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *quotient = PyNumber_InPlaceTrueDivide(dividend, divisor); + Py_DECREF(dividend); + Py_DECREF(divisor); + SET_TOP(quotient); + if (quotient == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_ADD) - w = POP(); - v = TOP(); - if (PyUnicode_CheckExact(v) && - PyUnicode_CheckExact(w)) { - x = unicode_concatenate(v, w, f, next_instr); + TARGET(INPLACE_FLOOR_DIVIDE) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *quotient = PyNumber_InPlaceFloorDivide(dividend, divisor); + Py_DECREF(dividend); + Py_DECREF(divisor); + SET_TOP(quotient); + if (quotient == NULL) + goto error; + DISPATCH(); + } + + TARGET(INPLACE_MODULO) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *mod = PyNumber_InPlaceRemainder(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(mod); + if (mod == NULL) + goto error; + DISPATCH(); + } + + TARGET(INPLACE_ADD) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *sum; + if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { + sum = unicode_concatenate(left, right, f, next_instr); /* unicode_concatenate consumed the ref to v */ - goto skip_decref_v; } else { - x = PyNumber_InPlaceAdd(v, w); + sum = PyNumber_InPlaceAdd(left, right); + Py_DECREF(left); } - Py_DECREF(v); - skip_decref_v: - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + Py_DECREF(right); + SET_TOP(sum); + if (sum == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_SUBTRACT) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceSubtract(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_SUBTRACT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *diff = PyNumber_InPlaceSubtract(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(diff); + if (diff == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_LSHIFT) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceLshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_LSHIFT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceLshift(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_RSHIFT) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceRshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_RSHIFT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceRshift(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_AND) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceAnd(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_AND) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceAnd(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_XOR) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceXor(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_XOR) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceXor(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_OR) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceOr(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_OR) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceOr(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(STORE_SUBSCR) - w = TOP(); - v = SECOND(); - u = THIRD(); + TARGET(STORE_SUBSCR) { + PyObject *sub = TOP(); + PyObject *container = SECOND(); + PyObject *v = THIRD(); + int err; STACKADJ(-3); /* v[w] = u */ - err = PyObject_SetItem(v, w, u); - Py_DECREF(u); + err = PyObject_SetItem(container, sub, v); Py_DECREF(v); - Py_DECREF(w); - if (err == 0) DISPATCH(); - break; + Py_DECREF(container); + Py_DECREF(sub); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(DELETE_SUBSCR) - w = TOP(); - v = SECOND(); + TARGET(DELETE_SUBSCR) { + PyObject *sub = TOP(); + PyObject *container = SECOND(); + int err; STACKADJ(-2); /* del v[w] */ - err = PyObject_DelItem(v, w); - Py_DECREF(v); - Py_DECREF(w); - if (err == 0) DISPATCH(); - break; + err = PyObject_DelItem(container, sub); + Py_DECREF(container); + Py_DECREF(sub); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(PRINT_EXPR) - v = POP(); - w = PySys_GetObject("displayhook"); - if (w == NULL) { + TARGET(PRINT_EXPR) { + PyObject *value = POP(); + PyObject *hook = PySys_GetObject("displayhook"); + PyObject *res; + if (hook == NULL) { PyErr_SetString(PyExc_RuntimeError, "lost sys.displayhook"); - err = -1; - x = NULL; - } - if (err == 0) { - x = PyTuple_Pack(1, v); - if (x == NULL) - err = -1; + Py_DECREF(value); + goto error; } - if (err == 0) { - w = PyEval_CallObject(w, x); - Py_XDECREF(w); - if (w == NULL) - err = -1; - } - Py_DECREF(v); - Py_XDECREF(x); - break; + res = PyObject_CallFunctionObjArgs(hook, value, NULL); + Py_DECREF(value); + if (res == NULL) + goto error; + Py_DECREF(res); + DISPATCH(); + } #ifdef CASE_TOO_BIG default: switch (opcode) { #endif - TARGET(RAISE_VARARGS) - v = w = NULL; + TARGET(RAISE_VARARGS) { + PyObject *cause = NULL, *exc = NULL; switch (oparg) { case 2: - v = POP(); /* cause */ + cause = POP(); /* cause */ case 1: - w = POP(); /* exc */ + exc = POP(); /* exc */ case 0: /* Fallthrough */ - why = do_raise(w, v); + if (do_raise(exc, cause)) { + why = WHY_EXCEPTION; + goto fast_block_end; + } break; default: PyErr_SetString(PyExc_SystemError, "bad RAISE_VARARGS oparg"); - why = WHY_EXCEPTION; break; } - break; - - TARGET(STORE_LOCALS) - x = POP(); - v = f->f_locals; - Py_XDECREF(v); - f->f_locals = x; - DISPATCH(); + goto error; + } - TARGET(RETURN_VALUE) + TARGET(RETURN_VALUE) { retval = POP(); why = WHY_RETURN; goto fast_block_end; + } - TARGET(YIELD_FROM) - u = POP(); - x = TOP(); - /* send u to x */ - if (PyGen_CheckExact(x)) { - retval = _PyGen_Send((PyGenObject *)x, u); + TARGET(YIELD_FROM) { + PyObject *v = POP(); + PyObject *reciever = TOP(); + int err; + if (PyGen_CheckExact(reciever)) { + retval = _PyGen_Send((PyGenObject *)reciever, v); } else { _Py_IDENTIFIER(send); - if (u == Py_None) - retval = Py_TYPE(x)->tp_iternext(x); + if (v == Py_None) + retval = Py_TYPE(reciever)->tp_iternext(reciever); else - retval = _PyObject_CallMethodId(x, &PyId_send, "O", u); + retval = _PyObject_CallMethodId(reciever, &PyId_send, "O", v); } - Py_DECREF(u); - if (!retval) { + Py_DECREF(v); + if (retval == NULL) { PyObject *val; - x = POP(); /* Remove iter from stack */ - Py_DECREF(x); err = _PyGen_FetchStopIterationValue(&val); - if (err < 0) { - x = NULL; - break; - } - x = val; - PUSH(x); - continue; + if (err < 0) + goto error; + Py_DECREF(reciever); + SET_TOP(val); + DISPATCH(); } /* x remains on stack, retval is value to be yielded */ f->f_stacktop = stack_pointer; @@ -1867,39 +1916,38 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) /* and repeat... */ f->f_lasti--; goto fast_yield; + } - TARGET(YIELD_VALUE) + TARGET(YIELD_VALUE) { retval = POP(); f->f_stacktop = stack_pointer; why = WHY_YIELD; goto fast_yield; + } - TARGET(POP_EXCEPT) - { - PyTryBlock *b = PyFrame_BlockPop(f); - if (b->b_type != EXCEPT_HANDLER) { - PyErr_SetString(PyExc_SystemError, - "popped block is not an except handler"); - why = WHY_EXCEPTION; - break; - } - UNWIND_EXCEPT_HANDLER(b); + TARGET(POP_EXCEPT) { + PyTryBlock *b = PyFrame_BlockPop(f); + if (b->b_type != EXCEPT_HANDLER) { + PyErr_SetString(PyExc_SystemError, + "popped block is not an except handler"); + goto error; } + UNWIND_EXCEPT_HANDLER(b); DISPATCH(); + } - TARGET(POP_BLOCK) - { - PyTryBlock *b = PyFrame_BlockPop(f); - UNWIND_BLOCK(b); - } + TARGET(POP_BLOCK) { + PyTryBlock *b = PyFrame_BlockPop(f); + UNWIND_BLOCK(b); DISPATCH(); + } PREDICTED(END_FINALLY); - TARGET(END_FINALLY) - v = POP(); - if (PyLong_Check(v)) { - why = (enum why_code) PyLong_AS_LONG(v); - assert(why != WHY_YIELD); + TARGET(END_FINALLY) { + PyObject *status = POP(); + if (PyLong_Check(status)) { + why = (enum why_code) PyLong_AS_LONG(status); + assert(why != WHY_YIELD && why != WHY_EXCEPTION); if (why == WHY_RETURN || why == WHY_CONTINUE) retval = POP(); @@ -1912,248 +1960,280 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) assert(b->b_type == EXCEPT_HANDLER); UNWIND_EXCEPT_HANDLER(b); why = WHY_NOT; + Py_DECREF(status); + DISPATCH(); } + Py_DECREF(status); + goto fast_block_end; } - else if (PyExceptionClass_Check(v)) { - w = POP(); - u = POP(); - PyErr_Restore(v, w, u); - why = WHY_RERAISE; - break; + else if (PyExceptionClass_Check(status)) { + PyObject *exc = POP(); + PyObject *tb = POP(); + PyErr_Restore(status, exc, tb); + why = WHY_EXCEPTION; + goto fast_block_end; } - else if (v != Py_None) { + else if (status != Py_None) { PyErr_SetString(PyExc_SystemError, "'finally' pops bad exception"); - why = WHY_EXCEPTION; + Py_DECREF(status); + goto error; } - Py_DECREF(v); - break; + Py_DECREF(status); + DISPATCH(); + } - TARGET(LOAD_BUILD_CLASS) - { + TARGET(LOAD_BUILD_CLASS) { _Py_IDENTIFIER(__build_class__); + PyObject *bc; if (PyDict_CheckExact(f->f_builtins)) { - x = _PyDict_GetItemId(f->f_builtins, &PyId___build_class__); - if (x == NULL) { + bc = _PyDict_GetItemId(f->f_builtins, &PyId___build_class__); + if (bc == NULL) { PyErr_SetString(PyExc_NameError, "__build_class__ not found"); - break; + goto error; } - Py_INCREF(x); + Py_INCREF(bc); } else { PyObject *build_class_str = _PyUnicode_FromId(&PyId___build_class__); if (build_class_str == NULL) break; - x = PyObject_GetItem(f->f_builtins, build_class_str); - if (x == NULL) { + bc = PyObject_GetItem(f->f_builtins, build_class_str); + if (bc == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) PyErr_SetString(PyExc_NameError, "__build_class__ not found"); - break; + goto error; } } - PUSH(x); - break; + PUSH(bc); + DISPATCH(); } - TARGET(STORE_NAME) - w = GETITEM(names, oparg); - v = POP(); - if ((x = f->f_locals) != NULL) { - if (PyDict_CheckExact(x)) - err = PyDict_SetItem(x, w, v); - else - err = PyObject_SetItem(x, w, v); + TARGET(STORE_NAME) { + PyObject *name = GETITEM(names, oparg); + PyObject *v = POP(); + PyObject *ns = f->f_locals; + int err; + if (ns == NULL) { + PyErr_Format(PyExc_SystemError, + "no locals found when storing %R", name); Py_DECREF(v); - if (err == 0) DISPATCH(); - break; + goto error; } - PyErr_Format(PyExc_SystemError, - "no locals found when storing %R", w); - break; + if (PyDict_CheckExact(ns)) + err = PyDict_SetItem(ns, name, v); + else + err = PyObject_SetItem(ns, name, v); + Py_DECREF(v); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(DELETE_NAME) - w = GETITEM(names, oparg); - if ((x = f->f_locals) != NULL) { - if ((err = PyObject_DelItem(x, w)) != 0) - format_exc_check_arg(PyExc_NameError, - NAME_ERROR_MSG, - w); - break; + TARGET(DELETE_NAME) { + PyObject *name = GETITEM(names, oparg); + PyObject *ns = f->f_locals; + int err; + if (ns == NULL) { + PyErr_Format(PyExc_SystemError, + "no locals when deleting %R", name); + goto error; } - PyErr_Format(PyExc_SystemError, - "no locals when deleting %R", w); - break; + err = PyObject_DelItem(ns, name); + if (err != 0) { + format_exc_check_arg(PyExc_NameError, + NAME_ERROR_MSG, + name); + goto error; + } + DISPATCH(); + } PREDICTED_WITH_ARG(UNPACK_SEQUENCE); - TARGET(UNPACK_SEQUENCE) - v = POP(); - if (PyTuple_CheckExact(v) && - PyTuple_GET_SIZE(v) == oparg) { - PyObject **items = \ - ((PyTupleObject *)v)->ob_item; + TARGET(UNPACK_SEQUENCE) { + PyObject *seq = POP(), *item, **items; + if (PyTuple_CheckExact(seq) && + PyTuple_GET_SIZE(seq) == oparg) { + items = ((PyTupleObject *)seq)->ob_item; while (oparg--) { - w = items[oparg]; - Py_INCREF(w); - PUSH(w); + item = items[oparg]; + Py_INCREF(item); + PUSH(item); } - Py_DECREF(v); - DISPATCH(); - } else if (PyList_CheckExact(v) && - PyList_GET_SIZE(v) == oparg) { - PyObject **items = \ - ((PyListObject *)v)->ob_item; + } else if (PyList_CheckExact(seq) && + PyList_GET_SIZE(seq) == oparg) { + items = ((PyListObject *)seq)->ob_item; while (oparg--) { - w = items[oparg]; - Py_INCREF(w); - PUSH(w); + item = items[oparg]; + Py_INCREF(item); + PUSH(item); } - } else if (unpack_iterable(v, oparg, -1, + } else if (unpack_iterable(seq, oparg, -1, stack_pointer + oparg)) { STACKADJ(oparg); } else { /* unpack_iterable() raised an exception */ - why = WHY_EXCEPTION; + Py_DECREF(seq); + goto error; } - Py_DECREF(v); - break; + Py_DECREF(seq); + DISPATCH(); + } - TARGET(UNPACK_EX) - { + TARGET(UNPACK_EX) { int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8); - v = POP(); + PyObject *seq = POP(); - if (unpack_iterable(v, oparg & 0xFF, oparg >> 8, + if (unpack_iterable(seq, oparg & 0xFF, oparg >> 8, stack_pointer + totalargs)) { stack_pointer += totalargs; } else { - why = WHY_EXCEPTION; + Py_DECREF(seq); + goto error; } - Py_DECREF(v); - break; + Py_DECREF(seq); + DISPATCH(); } - TARGET(STORE_ATTR) - w = GETITEM(names, oparg); - v = TOP(); - u = SECOND(); + TARGET(STORE_ATTR) { + PyObject *name = GETITEM(names, oparg); + PyObject *owner = TOP(); + PyObject *v = SECOND(); + int err; STACKADJ(-2); - err = PyObject_SetAttr(v, w, u); /* v.w = u */ + err = PyObject_SetAttr(owner, name, v); Py_DECREF(v); - Py_DECREF(u); - if (err == 0) DISPATCH(); - break; + Py_DECREF(owner); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(DELETE_ATTR) - w = GETITEM(names, oparg); - v = POP(); - err = PyObject_SetAttr(v, w, (PyObject *)NULL); - /* del v.w */ - Py_DECREF(v); - break; + TARGET(DELETE_ATTR) { + PyObject *name = GETITEM(names, oparg); + PyObject *owner = POP(); + int err; + err = PyObject_SetAttr(owner, name, (PyObject *)NULL); + Py_DECREF(owner); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(STORE_GLOBAL) - w = GETITEM(names, oparg); - v = POP(); - err = PyDict_SetItem(f->f_globals, w, v); + TARGET(STORE_GLOBAL) { + PyObject *name = GETITEM(names, oparg); + PyObject *v = POP(); + int err; + err = PyDict_SetItem(f->f_globals, name, v); Py_DECREF(v); - if (err == 0) DISPATCH(); - break; + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(DELETE_GLOBAL) - w = GETITEM(names, oparg); - if ((err = PyDict_DelItem(f->f_globals, w)) != 0) + TARGET(DELETE_GLOBAL) { + PyObject *name = GETITEM(names, oparg); + int err; + err = PyDict_DelItem(f->f_globals, name); + if (err != 0) { format_exc_check_arg( - PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w); - break; + PyExc_NameError, NAME_ERROR_MSG, name); + goto error; + } + DISPATCH(); + } - TARGET(LOAD_NAME) - w = GETITEM(names, oparg); - if ((v = f->f_locals) == NULL) { + TARGET(LOAD_NAME) { + PyObject *name = GETITEM(names, oparg); + PyObject *locals = f->f_locals; + PyObject *v; + if (locals == NULL) { PyErr_Format(PyExc_SystemError, - "no locals when loading %R", w); - why = WHY_EXCEPTION; - break; + "no locals when loading %R", name); + goto error; } - if (PyDict_CheckExact(v)) { - x = PyDict_GetItem(v, w); - Py_XINCREF(x); + if (PyDict_CheckExact(locals)) { + v = PyDict_GetItem(locals, name); + Py_XINCREF(v); } else { - x = PyObject_GetItem(v, w); - if (x == NULL && _PyErr_OCCURRED()) { - if (!PyErr_ExceptionMatches( - PyExc_KeyError)) - break; + v = PyObject_GetItem(locals, name); + if (v == NULL && _PyErr_OCCURRED()) { + if (!PyErr_ExceptionMatches(PyExc_KeyError)) + goto error; PyErr_Clear(); } } - if (x == NULL) { - x = PyDict_GetItem(f->f_globals, w); - Py_XINCREF(x); - if (x == NULL) { + if (v == NULL) { + v = PyDict_GetItem(f->f_globals, name); + Py_XINCREF(v); + if (v == NULL) { if (PyDict_CheckExact(f->f_builtins)) { - x = PyDict_GetItem(f->f_builtins, w); - if (x == NULL) { + v = PyDict_GetItem(f->f_builtins, name); + if (v == NULL) { format_exc_check_arg( PyExc_NameError, - NAME_ERROR_MSG, w); - break; + NAME_ERROR_MSG, name); + goto error; } - Py_INCREF(x); + Py_INCREF(v); } else { - x = PyObject_GetItem(f->f_builtins, w); - if (x == NULL) { + v = PyObject_GetItem(f->f_builtins, name); + if (v == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) format_exc_check_arg( PyExc_NameError, - NAME_ERROR_MSG, w); - break; + NAME_ERROR_MSG, name); + goto error; } } } } - PUSH(x); + PUSH(v); DISPATCH(); + } - TARGET(LOAD_GLOBAL) - w = GETITEM(names, oparg); + TARGET(LOAD_GLOBAL) { + PyObject *name = GETITEM(names, oparg); + PyObject *v; if (PyDict_CheckExact(f->f_globals) && PyDict_CheckExact(f->f_builtins)) { - x = _PyDict_LoadGlobal((PyDictObject *)f->f_globals, + v = _PyDict_LoadGlobal((PyDictObject *)f->f_globals, (PyDictObject *)f->f_builtins, - w); - if (x == NULL) { + name); + if (v == NULL) { if (!_PyErr_OCCURRED()) format_exc_check_arg(PyExc_NameError, - GLOBAL_NAME_ERROR_MSG, w); - break; + NAME_ERROR_MSG, name); + goto error; } - Py_INCREF(x); + Py_INCREF(v); } else { /* Slow-path if globals or builtins is not a dict */ - x = PyObject_GetItem(f->f_globals, w); - if (x == NULL) { - x = PyObject_GetItem(f->f_builtins, w); - if (x == NULL) { + v = PyObject_GetItem(f->f_globals, name); + if (v == NULL) { + v = PyObject_GetItem(f->f_builtins, name); + if (v == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) format_exc_check_arg( PyExc_NameError, - GLOBAL_NAME_ERROR_MSG, w); - break; + NAME_ERROR_MSG, name); + goto error; } } } - PUSH(x); + PUSH(v); DISPATCH(); + } - TARGET(DELETE_FAST) - x = GETLOCAL(oparg); - if (x != NULL) { + TARGET(DELETE_FAST) { + PyObject *v = GETLOCAL(oparg); + if (v != NULL) { SETLOCAL(oparg, NULL); DISPATCH(); } @@ -2162,252 +2242,310 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) UNBOUNDLOCAL_ERROR_MSG, PyTuple_GetItem(co->co_varnames, oparg) ); - break; + goto error; + } - TARGET(DELETE_DEREF) - x = freevars[oparg]; - if (PyCell_GET(x) != NULL) { - PyCell_Set(x, NULL); + TARGET(DELETE_DEREF) { + PyObject *cell = freevars[oparg]; + if (PyCell_GET(cell) != NULL) { + PyCell_Set(cell, NULL); DISPATCH(); } - err = -1; format_exc_unbound(co, oparg); - break; + goto error; + } - TARGET(LOAD_CLOSURE) - x = freevars[oparg]; - Py_INCREF(x); - PUSH(x); - if (x != NULL) DISPATCH(); - break; + TARGET(LOAD_CLOSURE) { + PyObject *cell = freevars[oparg]; + Py_INCREF(cell); + PUSH(cell); + DISPATCH(); + } - TARGET(LOAD_DEREF) - x = freevars[oparg]; - w = PyCell_Get(x); - if (w != NULL) { - PUSH(w); - DISPATCH(); + TARGET(LOAD_CLASSDEREF) { + PyObject *name, *value, *locals = f->f_locals; + Py_ssize_t idx; + assert(locals); + assert(oparg >= PyTuple_GET_SIZE(co->co_cellvars)); + idx = oparg - PyTuple_GET_SIZE(co->co_cellvars); + assert(idx >= 0 && idx < PyTuple_GET_SIZE(co->co_freevars)); + name = PyTuple_GET_ITEM(co->co_freevars, idx); + if (PyDict_CheckExact(locals)) { + value = PyDict_GetItem(locals, name); + Py_XINCREF(value); } - err = -1; - format_exc_unbound(co, oparg); - break; + else { + value = PyObject_GetItem(locals, name); + if (value == NULL && PyErr_Occurred()) { + if (!PyErr_ExceptionMatches(PyExc_KeyError)) + goto error; + PyErr_Clear(); + } + } + if (!value) { + PyObject *cell = freevars[oparg]; + value = PyCell_GET(cell); + if (value == NULL) { + format_exc_unbound(co, oparg); + goto error; + } + Py_INCREF(value); + } + PUSH(value); + DISPATCH(); + } - TARGET(STORE_DEREF) - w = POP(); - x = freevars[oparg]; - PyCell_Set(x, w); - Py_DECREF(w); + TARGET(LOAD_DEREF) { + PyObject *cell = freevars[oparg]; + PyObject *value = PyCell_GET(cell); + if (value == NULL) { + format_exc_unbound(co, oparg); + goto error; + } + Py_INCREF(value); + PUSH(value); DISPATCH(); + } - TARGET(BUILD_TUPLE) - x = PyTuple_New(oparg); - if (x != NULL) { - for (; --oparg >= 0;) { - w = POP(); - PyTuple_SET_ITEM(x, oparg, w); - } - PUSH(x); - DISPATCH(); + TARGET(STORE_DEREF) { + PyObject *v = POP(); + PyObject *cell = freevars[oparg]; + PyCell_Set(cell, v); + Py_DECREF(v); + DISPATCH(); + } + + TARGET(BUILD_TUPLE) { + PyObject *tup = PyTuple_New(oparg); + if (tup == NULL) + goto error; + while (--oparg >= 0) { + PyObject *item = POP(); + PyTuple_SET_ITEM(tup, oparg, item); } - break; + PUSH(tup); + DISPATCH(); + } - TARGET(BUILD_LIST) - x = PyList_New(oparg); - if (x != NULL) { - for (; --oparg >= 0;) { - w = POP(); - PyList_SET_ITEM(x, oparg, w); - } - PUSH(x); - DISPATCH(); + TARGET(BUILD_LIST) { + PyObject *list = PyList_New(oparg); + if (list == NULL) + goto error; + while (--oparg >= 0) { + PyObject *item = POP(); + PyList_SET_ITEM(list, oparg, item); } - break; + PUSH(list); + DISPATCH(); + } - TARGET(BUILD_SET) - x = PySet_New(NULL); - if (x != NULL) { - for (; --oparg >= 0;) { - w = POP(); - if (err == 0) - err = PySet_Add(x, w); - Py_DECREF(w); - } - if (err != 0) { - Py_DECREF(x); - break; - } - PUSH(x); - DISPATCH(); + TARGET(BUILD_SET) { + PyObject *set = PySet_New(NULL); + int err = 0; + if (set == NULL) + goto error; + while (--oparg >= 0) { + PyObject *item = POP(); + if (err == 0) + err = PySet_Add(set, item); + Py_DECREF(item); } - break; + if (err != 0) { + Py_DECREF(set); + goto error; + } + PUSH(set); + DISPATCH(); + } - TARGET(BUILD_MAP) - x = _PyDict_NewPresized((Py_ssize_t)oparg); - PUSH(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BUILD_MAP) { + PyObject *map = _PyDict_NewPresized((Py_ssize_t)oparg); + if (map == NULL) + goto error; + PUSH(map); + DISPATCH(); + } - TARGET(STORE_MAP) - w = TOP(); /* key */ - u = SECOND(); /* value */ - v = THIRD(); /* dict */ + TARGET(STORE_MAP) { + PyObject *key = TOP(); + PyObject *value = SECOND(); + PyObject *map = THIRD(); + int err; STACKADJ(-2); - assert (PyDict_CheckExact(v)); - err = PyDict_SetItem(v, w, u); /* v[w] = u */ - Py_DECREF(u); - Py_DECREF(w); - if (err == 0) DISPATCH(); - break; + assert(PyDict_CheckExact(map)); + err = PyDict_SetItem(map, key, value); + Py_DECREF(value); + Py_DECREF(key); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(MAP_ADD) - w = TOP(); /* key */ - u = SECOND(); /* value */ + TARGET(MAP_ADD) { + PyObject *key = TOP(); + PyObject *value = SECOND(); + PyObject *map; + int err; STACKADJ(-2); - v = stack_pointer[-oparg]; /* dict */ - assert (PyDict_CheckExact(v)); - err = PyDict_SetItem(v, w, u); /* v[w] = u */ - Py_DECREF(u); - Py_DECREF(w); - if (err == 0) { - PREDICT(JUMP_ABSOLUTE); - DISPATCH(); - } - break; + map = stack_pointer[-oparg]; /* dict */ + assert(PyDict_CheckExact(map)); + err = PyDict_SetItem(map, key, value); /* v[w] = u */ + Py_DECREF(value); + Py_DECREF(key); + if (err != 0) + goto error; + PREDICT(JUMP_ABSOLUTE); + DISPATCH(); + } - TARGET(LOAD_ATTR) - w = GETITEM(names, oparg); - v = TOP(); - x = PyObject_GetAttr(v, w); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(LOAD_ATTR) { + PyObject *name = GETITEM(names, oparg); + PyObject *owner = TOP(); + PyObject *res = PyObject_GetAttr(owner, name); + Py_DECREF(owner); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(COMPARE_OP) - w = POP(); - v = TOP(); - x = cmp_outcome(oparg, v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x == NULL) break; + TARGET(COMPARE_OP) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = cmp_outcome(oparg, left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; PREDICT(POP_JUMP_IF_FALSE); PREDICT(POP_JUMP_IF_TRUE); DISPATCH(); + } - TARGET(IMPORT_NAME) - { + TARGET(IMPORT_NAME) { _Py_IDENTIFIER(__import__); - w = GETITEM(names, oparg); - x = _PyDict_GetItemId(f->f_builtins, &PyId___import__); - if (x == NULL) { + PyObject *name = GETITEM(names, oparg); + PyObject *func = _PyDict_GetItemId(f->f_builtins, &PyId___import__); + PyObject *from, *level, *args, *res; + if (func == NULL) { PyErr_SetString(PyExc_ImportError, "__import__ not found"); - break; + goto error; } - Py_INCREF(x); - v = POP(); - u = TOP(); - if (PyLong_AsLong(u) != -1 || PyErr_Occurred()) - w = PyTuple_Pack(5, - w, + Py_INCREF(func); + from = POP(); + level = TOP(); + if (PyLong_AsLong(level) != -1 || PyErr_Occurred()) + args = PyTuple_Pack(5, + name, f->f_globals, f->f_locals == NULL ? Py_None : f->f_locals, - v, - u); + from, + level); else - w = PyTuple_Pack(4, - w, + args = PyTuple_Pack(4, + name, f->f_globals, f->f_locals == NULL ? Py_None : f->f_locals, - v); - Py_DECREF(v); - Py_DECREF(u); - if (w == NULL) { - u = POP(); - Py_DECREF(x); - x = NULL; - break; + from); + Py_DECREF(level); + Py_DECREF(from); + if (args == NULL) { + Py_DECREF(func); + STACKADJ(-1); + goto error; } READ_TIMESTAMP(intr0); - v = x; - x = PyEval_CallObject(v, w); - Py_DECREF(v); + res = PyEval_CallObject(func, args); READ_TIMESTAMP(intr1); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + Py_DECREF(args); + Py_DECREF(func); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); } - TARGET(IMPORT_STAR) - v = POP(); + TARGET(IMPORT_STAR) { + PyObject *from = POP(), *locals; + int err; PyFrame_FastToLocals(f); - if ((x = f->f_locals) == NULL) { + locals = f->f_locals; + if (locals == NULL) { PyErr_SetString(PyExc_SystemError, "no locals found during 'import *'"); - break; + goto error; } READ_TIMESTAMP(intr0); - err = import_all_from(x, v); + err = import_all_from(locals, from); READ_TIMESTAMP(intr1); PyFrame_LocalsToFast(f, 0); - Py_DECREF(v); - if (err == 0) DISPATCH(); - break; + Py_DECREF(from); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(IMPORT_FROM) - w = GETITEM(names, oparg); - v = TOP(); + TARGET(IMPORT_FROM) { + PyObject *name = GETITEM(names, oparg); + PyObject *from = TOP(); + PyObject *res; READ_TIMESTAMP(intr0); - x = import_from(v, w); + res = import_from(from, name); READ_TIMESTAMP(intr1); - PUSH(x); - if (x != NULL) DISPATCH(); - break; + PUSH(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(JUMP_FORWARD) + TARGET(JUMP_FORWARD) { JUMPBY(oparg); FAST_DISPATCH(); + } PREDICTED_WITH_ARG(POP_JUMP_IF_FALSE); - TARGET(POP_JUMP_IF_FALSE) - w = POP(); - if (w == Py_True) { - Py_DECREF(w); + TARGET(POP_JUMP_IF_FALSE) { + PyObject *cond = POP(); + int err; + if (cond == Py_True) { + Py_DECREF(cond); FAST_DISPATCH(); } - if (w == Py_False) { - Py_DECREF(w); + if (cond == Py_False) { + Py_DECREF(cond); JUMPTO(oparg); FAST_DISPATCH(); } - err = PyObject_IsTrue(w); - Py_DECREF(w); + err = PyObject_IsTrue(cond); + Py_DECREF(cond); if (err > 0) err = 0; else if (err == 0) JUMPTO(oparg); else - break; + goto error; DISPATCH(); + } PREDICTED_WITH_ARG(POP_JUMP_IF_TRUE); - TARGET(POP_JUMP_IF_TRUE) - w = POP(); - if (w == Py_False) { - Py_DECREF(w); + TARGET(POP_JUMP_IF_TRUE) { + PyObject *cond = POP(); + int err; + if (cond == Py_False) { + Py_DECREF(cond); FAST_DISPATCH(); } - if (w == Py_True) { - Py_DECREF(w); + if (cond == Py_True) { + Py_DECREF(cond); JUMPTO(oparg); FAST_DISPATCH(); } - err = PyObject_IsTrue(w); - Py_DECREF(w); + err = PyObject_IsTrue(cond); + Py_DECREF(cond); if (err > 0) { err = 0; JUMPTO(oparg); @@ -2415,58 +2553,63 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) else if (err == 0) ; else - break; + goto error; DISPATCH(); + } - TARGET(JUMP_IF_FALSE_OR_POP) - w = TOP(); - if (w == Py_True) { + TARGET(JUMP_IF_FALSE_OR_POP) { + PyObject *cond = TOP(); + int err; + if (cond == Py_True) { STACKADJ(-1); - Py_DECREF(w); + Py_DECREF(cond); FAST_DISPATCH(); } - if (w == Py_False) { + if (cond == Py_False) { JUMPTO(oparg); FAST_DISPATCH(); } - err = PyObject_IsTrue(w); + err = PyObject_IsTrue(cond); if (err > 0) { STACKADJ(-1); - Py_DECREF(w); + Py_DECREF(cond); err = 0; } else if (err == 0) JUMPTO(oparg); else - break; + goto error; DISPATCH(); + } - TARGET(JUMP_IF_TRUE_OR_POP) - w = TOP(); - if (w == Py_False) { + TARGET(JUMP_IF_TRUE_OR_POP) { + PyObject *cond = TOP(); + int err; + if (cond == Py_False) { STACKADJ(-1); - Py_DECREF(w); + Py_DECREF(cond); FAST_DISPATCH(); } - if (w == Py_True) { + if (cond == Py_True) { JUMPTO(oparg); FAST_DISPATCH(); } - err = PyObject_IsTrue(w); + err = PyObject_IsTrue(cond); if (err > 0) { err = 0; JUMPTO(oparg); } else if (err == 0) { STACKADJ(-1); - Py_DECREF(w); + Py_DECREF(cond); } else - break; + goto error; DISPATCH(); + } PREDICTED_WITH_ARG(JUMP_ABSOLUTE); - TARGET(JUMP_ABSOLUTE) + TARGET(JUMP_ABSOLUTE) { JUMPTO(oparg); #if FAST_LOOPS /* Enabling this path speeds-up all while and for-loops by bypassing @@ -2480,60 +2623,60 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #else DISPATCH(); #endif + } - TARGET(GET_ITER) + TARGET(GET_ITER) { /* before: [obj]; after [getiter(obj)] */ - v = TOP(); - x = PyObject_GetIter(v); - Py_DECREF(v); - if (x != NULL) { - SET_TOP(x); - PREDICT(FOR_ITER); - DISPATCH(); - } - STACKADJ(-1); - break; + PyObject *iterable = TOP(); + PyObject *iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + SET_TOP(iter); + if (iter == NULL) + goto error; + PREDICT(FOR_ITER); + DISPATCH(); + } PREDICTED_WITH_ARG(FOR_ITER); - TARGET(FOR_ITER) + TARGET(FOR_ITER) { /* before: [iter]; after: [iter, iter()] *or* [] */ - v = TOP(); - x = (*v->ob_type->tp_iternext)(v); - if (x != NULL) { - PUSH(x); + PyObject *iter = TOP(); + PyObject *next = (*iter->ob_type->tp_iternext)(iter); + if (next != NULL) { + PUSH(next); PREDICT(STORE_FAST); PREDICT(UNPACK_SEQUENCE); DISPATCH(); } if (PyErr_Occurred()) { - if (!PyErr_ExceptionMatches( - PyExc_StopIteration)) - break; + if (!PyErr_ExceptionMatches(PyExc_StopIteration)) + goto error; PyErr_Clear(); } /* iterator ended normally */ - x = v = POP(); - Py_DECREF(v); + STACKADJ(-1); + Py_DECREF(iter); JUMPBY(oparg); DISPATCH(); + } - TARGET(BREAK_LOOP) + TARGET(BREAK_LOOP) { why = WHY_BREAK; goto fast_block_end; + } - TARGET(CONTINUE_LOOP) + TARGET(CONTINUE_LOOP) { retval = PyLong_FromLong(oparg); - if (!retval) { - x = NULL; - break; - } + if (retval == NULL) + goto error; why = WHY_CONTINUE; goto fast_block_end; + } TARGET_WITH_IMPL(SETUP_LOOP, _setup_finally) TARGET_WITH_IMPL(SETUP_EXCEPT, _setup_finally) TARGET(SETUP_FINALLY) - _setup_finally: + _setup_finally: { /* NOTE: If you add any new block-setup opcodes that are not try/except/finally handlers, you may need to update the PyGen_NeedsFinalizing() function. @@ -2542,37 +2685,35 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg, STACK_LEVEL()); DISPATCH(); + } - TARGET(SETUP_WITH) - { + TARGET(SETUP_WITH) { _Py_IDENTIFIER(__exit__); _Py_IDENTIFIER(__enter__); - w = TOP(); - x = special_lookup(w, &PyId___exit__); - if (!x) - break; - SET_TOP(x); - u = special_lookup(w, &PyId___enter__); - Py_DECREF(w); - if (!u) { - x = NULL; - break; - } - x = PyObject_CallFunctionObjArgs(u, NULL); - Py_DECREF(u); - if (!x) - break; + PyObject *mgr = TOP(); + PyObject *exit = special_lookup(mgr, &PyId___exit__), *enter; + PyObject *res; + if (exit == NULL) + goto error; + SET_TOP(exit); + enter = special_lookup(mgr, &PyId___enter__); + Py_DECREF(mgr); + if (enter == NULL) + goto error; + res = PyObject_CallFunctionObjArgs(enter, NULL); + Py_DECREF(enter); + if (res == NULL) + goto error; /* Setup the finally block before pushing the result of __enter__ on the stack. */ PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg, STACK_LEVEL()); - PUSH(x); + PUSH(res); DISPATCH(); } - TARGET(WITH_CLEANUP) - { + TARGET(WITH_CLEANUP) { /* At the top of the stack are 1-3 values indicating how/why we entered the finally clause: - TOP = None @@ -2599,42 +2740,42 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) */ PyObject *exit_func; - u = TOP(); - if (u == Py_None) { + PyObject *exc = TOP(), *val = Py_None, *tb = Py_None, *res; + int err; + if (exc == Py_None) { (void)POP(); exit_func = TOP(); - SET_TOP(u); - v = w = Py_None; + SET_TOP(exc); } - else if (PyLong_Check(u)) { - (void)POP(); - switch(PyLong_AsLong(u)) { + else if (PyLong_Check(exc)) { + STACKADJ(-1); + switch (PyLong_AsLong(exc)) { case WHY_RETURN: case WHY_CONTINUE: /* Retval in TOP. */ exit_func = SECOND(); SET_SECOND(TOP()); - SET_TOP(u); + SET_TOP(exc); break; default: exit_func = TOP(); - SET_TOP(u); + SET_TOP(exc); break; } - u = v = w = Py_None; + exc = Py_None; } else { - PyObject *tp, *exc, *tb; + PyObject *tp2, *exc2, *tb2; PyTryBlock *block; - v = SECOND(); - w = THIRD(); - tp = FOURTH(); - exc = PEEK(5); - tb = PEEK(6); + val = SECOND(); + tb = THIRD(); + tp2 = FOURTH(); + exc2 = PEEK(5); + tb2 = PEEK(6); exit_func = PEEK(7); - SET_VALUE(7, tb); - SET_VALUE(6, exc); - SET_VALUE(5, tp); + SET_VALUE(7, tb2); + SET_VALUE(6, exc2); + SET_VALUE(5, tp2); /* UNWIND_EXCEPT_HANDLER will pop this off. */ SET_FOURTH(NULL); /* We just shifted the stack down, so we have @@ -2645,56 +2786,53 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) block->b_level--; } /* XXX Not the fastest way to call it... */ - x = PyObject_CallFunctionObjArgs(exit_func, u, v, w, - NULL); + res = PyObject_CallFunctionObjArgs(exit_func, exc, val, tb, NULL); Py_DECREF(exit_func); - if (x == NULL) - break; /* Go to error exit */ + if (res == NULL) + goto error; - if (u != Py_None) - err = PyObject_IsTrue(x); + if (exc != Py_None) + err = PyObject_IsTrue(res); else err = 0; - Py_DECREF(x); + Py_DECREF(res); if (err < 0) - break; /* Go to error exit */ + goto error; else if (err > 0) { err = 0; /* There was an exception and a True return */ PUSH(PyLong_FromLong((long) WHY_SILENCED)); } PREDICT(END_FINALLY); - break; + DISPATCH(); } - TARGET(CALL_FUNCTION) - { - PyObject **sp; + TARGET(CALL_FUNCTION) { + PyObject **sp, *res; PCALL(PCALL_ALL); sp = stack_pointer; #ifdef WITH_TSC - x = call_function(&sp, oparg, &intr0, &intr1); + res = call_function(&sp, oparg, &intr0, &intr1); #else - x = call_function(&sp, oparg); + res = call_function(&sp, oparg); #endif stack_pointer = sp; - PUSH(x); - if (x != NULL) - DISPATCH(); - break; + PUSH(res); + if (res == NULL) + goto error; + DISPATCH(); } TARGET_WITH_IMPL(CALL_FUNCTION_VAR, _call_function_var_kw) TARGET_WITH_IMPL(CALL_FUNCTION_KW, _call_function_var_kw) TARGET(CALL_FUNCTION_VAR_KW) - _call_function_var_kw: - { + _call_function_var_kw: { int na = oparg & 0xff; int nk = (oparg>>8) & 0xff; int flags = (opcode - CALL_FUNCTION) & 3; int n = na + 2 * nk; - PyObject **pfunc, *func, **sp; + PyObject **pfunc, *func, **sp, *res; PCALL(PCALL_ALL); if (flags & CALL_FLAG_VAR) n++; @@ -2717,137 +2855,156 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) Py_INCREF(func); sp = stack_pointer; READ_TIMESTAMP(intr0); - x = ext_do_call(func, &sp, flags, na, nk); + res = ext_do_call(func, &sp, flags, na, nk); READ_TIMESTAMP(intr1); stack_pointer = sp; Py_DECREF(func); while (stack_pointer > pfunc) { - w = POP(); - Py_DECREF(w); + PyObject *o = POP(); + Py_DECREF(o); } - PUSH(x); - if (x != NULL) - DISPATCH(); - break; + PUSH(res); + if (res == NULL) + goto error; + DISPATCH(); } TARGET_WITH_IMPL(MAKE_CLOSURE, _make_function) TARGET(MAKE_FUNCTION) - _make_function: - { + _make_function: { int posdefaults = oparg & 0xff; int kwdefaults = (oparg>>8) & 0xff; int num_annotations = (oparg >> 16) & 0x7fff; - w = POP(); /* qualname */ - v = POP(); /* code object */ - x = PyFunction_NewWithQualName(v, f->f_globals, w); - Py_DECREF(v); - Py_DECREF(w); + PyObject *qualname = POP(); /* qualname */ + PyObject *code = POP(); /* code object */ + PyObject *func = PyFunction_NewWithQualName(code, f->f_globals, qualname); + Py_DECREF(code); + Py_DECREF(qualname); + + if (func == NULL) + goto error; - if (x != NULL && opcode == MAKE_CLOSURE) { - v = POP(); - if (PyFunction_SetClosure(x, v) != 0) { + if (opcode == MAKE_CLOSURE) { + PyObject *closure = POP(); + if (PyFunction_SetClosure(func, closure) != 0) { /* Can't happen unless bytecode is corrupt. */ - why = WHY_EXCEPTION; + Py_DECREF(func); + Py_DECREF(closure); + goto error; } - Py_DECREF(v); + Py_DECREF(closure); } - if (x != NULL && num_annotations > 0) { + if (num_annotations > 0) { Py_ssize_t name_ix; - u = POP(); /* names of args with annotations */ - v = PyDict_New(); - if (v == NULL) { - Py_DECREF(x); - x = NULL; - break; + PyObject *names = POP(); /* names of args with annotations */ + PyObject *anns = PyDict_New(); + if (anns == NULL) { + Py_DECREF(func); + goto error; } - name_ix = PyTuple_Size(u); + name_ix = PyTuple_Size(names); assert(num_annotations == name_ix+1); while (name_ix > 0) { + PyObject *name, *value; + int err; --name_ix; - t = PyTuple_GET_ITEM(u, name_ix); - w = POP(); - /* XXX(nnorwitz): check for errors */ - PyDict_SetItem(v, t, w); - Py_DECREF(w); + name = PyTuple_GET_ITEM(names, name_ix); + value = POP(); + err = PyDict_SetItem(anns, name, value); + Py_DECREF(value); + if (err != 0) { + Py_DECREF(anns); + Py_DECREF(func); + goto error; + } } - if (PyFunction_SetAnnotations(x, v) != 0) { + if (PyFunction_SetAnnotations(func, anns) != 0) { /* Can't happen unless PyFunction_SetAnnotations changes. */ - why = WHY_EXCEPTION; + Py_DECREF(anns); + Py_DECREF(func); + goto error; } - Py_DECREF(v); - Py_DECREF(u); + Py_DECREF(anns); + Py_DECREF(names); } /* XXX Maybe this should be a separate opcode? */ - if (x != NULL && posdefaults > 0) { - v = PyTuple_New(posdefaults); - if (v == NULL) { - Py_DECREF(x); - x = NULL; - break; + if (kwdefaults > 0) { + PyObject *defs = PyDict_New(); + if (defs == NULL) { + Py_DECREF(func); + goto error; } - while (--posdefaults >= 0) { - w = POP(); - PyTuple_SET_ITEM(v, posdefaults, w); + while (--kwdefaults >= 0) { + PyObject *v = POP(); /* default value */ + PyObject *key = POP(); /* kw only arg name */ + int err = PyDict_SetItem(defs, key, v); + Py_DECREF(v); + Py_DECREF(key); + if (err != 0) { + Py_DECREF(defs); + Py_DECREF(func); + goto error; + } } - if (PyFunction_SetDefaults(x, v) != 0) { + if (PyFunction_SetKwDefaults(func, defs) != 0) { /* Can't happen unless - PyFunction_SetDefaults changes. */ - why = WHY_EXCEPTION; + PyFunction_SetKwDefaults changes. */ + Py_DECREF(func); + Py_DECREF(defs); + goto error; } - Py_DECREF(v); + Py_DECREF(defs); } - if (x != NULL && kwdefaults > 0) { - v = PyDict_New(); - if (v == NULL) { - Py_DECREF(x); - x = NULL; - break; - } - while (--kwdefaults >= 0) { - w = POP(); /* default value */ - u = POP(); /* kw only arg name */ - /* XXX(nnorwitz): check for errors */ - PyDict_SetItem(v, u, w); - Py_DECREF(w); - Py_DECREF(u); + if (posdefaults > 0) { + PyObject *defs = PyTuple_New(posdefaults); + if (defs == NULL) { + Py_DECREF(func); + goto error; } - if (PyFunction_SetKwDefaults(x, v) != 0) { + while (--posdefaults >= 0) + PyTuple_SET_ITEM(defs, posdefaults, POP()); + if (PyFunction_SetDefaults(func, defs) != 0) { /* Can't happen unless - PyFunction_SetKwDefaults changes. */ - why = WHY_EXCEPTION; + PyFunction_SetDefaults changes. */ + Py_DECREF(defs); + Py_DECREF(func); + goto error; } - Py_DECREF(v); + Py_DECREF(defs); } - PUSH(x); - break; + PUSH(func); + DISPATCH(); } - TARGET(BUILD_SLICE) + TARGET(BUILD_SLICE) { + PyObject *start, *stop, *step, *slice; if (oparg == 3) - w = POP(); + step = POP(); else - w = NULL; - v = POP(); - u = TOP(); - x = PySlice_New(u, v, w); - Py_DECREF(u); - Py_DECREF(v); - Py_XDECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + step = NULL; + stop = POP(); + start = TOP(); + slice = PySlice_New(start, stop, step); + Py_DECREF(start); + Py_DECREF(stop); + Py_XDECREF(step); + SET_TOP(slice); + if (slice == NULL) + goto error; + DISPATCH(); + } - TARGET(EXTENDED_ARG) + TARGET(EXTENDED_ARG) { opcode = NEXTOP(); oparg = oparg<<16 | NEXTARG(); goto dispatch_opcode; + } #if USE_COMPUTED_GOTOS _unknown_opcode: @@ -2858,8 +3015,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyFrame_GetLineNumber(f), opcode); PyErr_SetString(PyExc_SystemError, "unknown opcode"); - why = WHY_EXCEPTION; - break; + goto error; #ifdef CASE_TOO_BIG } @@ -2867,71 +3023,35 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } /* switch */ - on_error: + /* This should never be reached. Every opcode should end with DISPATCH() + or goto error. */ + assert(0); +error: READ_TIMESTAMP(inst1); - /* Quickly continue if no error occurred */ - - if (why == WHY_NOT) { - if (err == 0 && x != NULL) { -#ifdef CHECKEXC - /* This check is expensive! */ - if (PyErr_Occurred()) - fprintf(stderr, - "XXX undetected error\n"); - else { -#endif - READ_TIMESTAMP(loop1); - continue; /* Normal, fast path */ -#ifdef CHECKEXC - } -#endif - } - why = WHY_EXCEPTION; - x = Py_None; - err = 0; - } - - /* Double-check exception status */ + assert(why == WHY_NOT); + why = WHY_EXCEPTION; - if (why == WHY_EXCEPTION || why == WHY_RERAISE) { - if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_SystemError, - "error return without exception set"); - why = WHY_EXCEPTION; - } - } -#ifdef CHECKEXC - else { - /* This check is expensive! */ - if (PyErr_Occurred()) { - char buf[128]; - sprintf(buf, "Stack unwind with exception " - "set and why=%d", why); - Py_FatalError(buf); - } - } + /* Double-check exception status. */ +#ifdef NDEBUG + if (!PyErr_Occurred()) + PyErr_SetString(PyExc_SystemError, + "error return without exception set"); +#else + assert(PyErr_Occurred()); #endif - /* Log traceback info if this is a real exception */ - - if (why == WHY_EXCEPTION) { - PyTraceBack_Here(f); - - if (tstate->c_tracefunc != NULL) - call_exc_trace(tstate->c_tracefunc, - tstate->c_traceobj, f); - } + /* Log traceback info. */ + PyTraceBack_Here(f); - /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */ + if (tstate->c_tracefunc != NULL) + call_exc_trace(tstate->c_tracefunc, tstate->c_traceobj, f); - if (why == WHY_RERAISE) - why = WHY_EXCEPTION; +fast_block_end: + assert(why != WHY_NOT); /* Unwind stacks if a (pseudo) exception occurred */ - -fast_block_end: while (why != WHY_NOT && f->f_iblock > 0) { /* Peek at the current block. */ PyTryBlock *b = &f->f_blockstack[f->f_iblock - 1]; @@ -2978,7 +3098,10 @@ fast_block_end: Python main loop. */ PyErr_NormalizeException( &exc, &val, &tb); - PyException_SetTraceback(val, tb); + if (tb != NULL) + PyException_SetTraceback(val, tb); + else + PyException_SetTraceback(val, Py_None); Py_INCREF(exc); tstate->exc_type = exc; Py_INCREF(val); @@ -3010,18 +3133,23 @@ fast_block_end: break; READ_TIMESTAMP(loop1); + assert(!PyErr_Occurred()); + } /* main loop */ assert(why != WHY_YIELD); /* Pop remaining stack entries. */ while (!EMPTY()) { - v = POP(); - Py_XDECREF(v); + PyObject *o = POP(); + Py_XDECREF(o); } if (why != WHY_RETURN) retval = NULL; + assert((retval != NULL && !PyErr_Occurred()) + || (retval == NULL && PyErr_Occurred())); + fast_yield: if (co->co_flags & CO_GENERATOR && (why == WHY_YIELD || why == WHY_RETURN)) { /* The purpose of this block is to put aside the generator's exception @@ -3078,6 +3206,7 @@ fast_yield: /* pop frame */ exit_eval_frame: Py_LeaveRecursiveCall(); + f->f_executing = 0; tstate->frame = f->f_back; return retval; @@ -3243,9 +3372,9 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals, PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure) { PyCodeObject* co = (PyCodeObject*)_co; - register PyFrameObject *f; - register PyObject *retval = NULL; - register PyObject **fastlocals, **freevars; + PyFrameObject *f; + PyObject *retval = NULL; + PyObject **fastlocals, **freevars; PyThreadState *tstate = PyThreadState_GET(); PyObject *x, *u; int total_args = co->co_argcount + co->co_kwonlyargcount; @@ -3522,7 +3651,7 @@ restore_and_clear_exc_state(PyThreadState *tstate, PyFrameObject *f) /* Logic for the raise statement (too complicated for inlining). This *consumes* a reference count to each of its arguments. */ -static enum why_code +static int do_raise(PyObject *exc, PyObject *cause) { PyObject *type = NULL, *value = NULL; @@ -3537,13 +3666,13 @@ do_raise(PyObject *exc, PyObject *cause) if (type == Py_None) { PyErr_SetString(PyExc_RuntimeError, "No active exception to reraise"); - return WHY_EXCEPTION; - } + return 0; + } Py_XINCREF(type); Py_XINCREF(value); Py_XINCREF(tb); PyErr_Restore(type, value, tb); - return WHY_RERAISE; + return 1; } /* We support the following forms of raise: @@ -3606,13 +3735,13 @@ do_raise(PyObject *exc, PyObject *cause) /* PyErr_SetObject incref's its arguments */ Py_XDECREF(value); Py_XDECREF(type); - return WHY_EXCEPTION; + return 0; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(cause); - return WHY_EXCEPTION; + return 0; } /* Iterate v argcnt times and store the results on the stack (via decreasing @@ -3711,7 +3840,7 @@ prtrace(PyObject *v, char *str) static void call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f) { - PyObject *type, *value, *traceback, *arg; + PyObject *type, *value, *traceback, *orig_traceback, *arg; int err; PyErr_Fetch(&type, &value, &traceback); if (value == NULL) { @@ -3719,6 +3848,11 @@ call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f) Py_INCREF(value); } PyErr_NormalizeException(&type, &value, &traceback); + orig_traceback = traceback; + if (traceback == NULL) { + Py_INCREF(Py_None); + traceback = Py_None; + } arg = PyTuple_Pack(3, type, value, traceback); if (arg == NULL) { PyErr_Restore(type, value, traceback); @@ -3727,11 +3861,11 @@ call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f) err = call_trace(func, self, f, PyTrace_EXCEPTION, arg); Py_DECREF(arg); if (err == 0) - PyErr_Restore(type, value, traceback); + PyErr_Restore(type, value, orig_traceback); else { Py_XDECREF(type); Py_XDECREF(value); - Py_XDECREF(traceback); + Py_XDECREF(orig_traceback); } } @@ -3760,7 +3894,7 @@ static int call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame, int what, PyObject *arg) { - register PyThreadState *tstate = frame->f_tstate; + PyThreadState *tstate = frame->f_tstate; int result; if (tstate->tracing) return 0; @@ -3926,6 +4060,13 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw) { PyObject *result; +#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 */ + assert(!PyErr_Occurred()); +#endif + if (arg == NULL) { arg = PyTuple_New(0); if (arg == NULL) @@ -3948,6 +4089,9 @@ 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; } @@ -4065,10 +4209,15 @@ call_function(PyObject ***pp_stack, int oparg else { PyObject *callargs; callargs = load_args(pp_stack, na); - READ_TIMESTAMP(*pintr0); - C_TRACE(x, PyCFunction_Call(func,callargs,NULL)); - READ_TIMESTAMP(*pintr1); - Py_XDECREF(callargs); + if (callargs != NULL) { + READ_TIMESTAMP(*pintr0); + C_TRACE(x, PyCFunction_Call(func,callargs,NULL)); + READ_TIMESTAMP(*pintr1); + Py_XDECREF(callargs); + } + else { + x = NULL; + } } } else { if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { @@ -4093,6 +4242,8 @@ call_function(PyObject ***pp_stack, int oparg READ_TIMESTAMP(*pintr1); Py_DECREF(func); } + 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 @@ -4103,6 +4254,9 @@ call_function(PyObject ***pp_stack, int oparg Py_DECREF(w); PCALL(PCALL_POP); } + + assert((x != NULL && !PyErr_Occurred()) + || (x == NULL && PyErr_Occurred())); return x; } @@ -4386,6 +4540,8 @@ ext_call_fail: Py_XDECREF(callargs); Py_XDECREF(kwdict); Py_XDECREF(stararg); + assert((result != NULL && !PyErr_Occurred()) + || (result == NULL && PyErr_Occurred())); return result; } @@ -4424,7 +4580,7 @@ _PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi) "BaseException is not allowed" static PyObject * -cmp_outcome(int op, register PyObject *v, register PyObject *w) +cmp_outcome(int op, PyObject *v, PyObject *w) { int res = 0; switch (op) { @@ -4482,7 +4638,7 @@ import_from(PyObject *v, PyObject *name) x = PyObject_GetAttr(v, name); if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, "cannot import name %S", name); + PyErr_Format(PyExc_ImportError, "cannot import name %R", name); } return x; } diff --git a/Python/codecs.c b/Python/codecs.c index fd67d1b..c541ba0 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -53,7 +53,7 @@ int PyCodec_Register(PyObject *search_function) static PyObject *normalizestring(const char *string) { - register size_t i; + size_t i; size_t len = strlen(string); char *p; PyObject *v; @@ -65,9 +65,9 @@ PyObject *normalizestring(const char *string) p = PyMem_Malloc(len + 1); if (p == NULL) - return NULL; + return PyErr_NoMemory(); for (i = 0; i < len; i++) { - register char ch = string[i]; + char ch = string[i]; if (ch == ' ') ch = '-'; else @@ -441,7 +441,7 @@ int PyCodec_RegisterError(const char *name, PyObject *error) return -1; } return PyDict_SetItemString(interp->codec_error_registry, - (char *)name, error); + name, error); } /* Lookup the error handling callback function registered under the @@ -457,7 +457,7 @@ PyObject *PyCodec_LookupError(const char *name) if (name==NULL) name = "strict"; - handler = PyDict_GetItemString(interp->codec_error_registry, (char *)name); + handler = PyDict_GetItemString(interp->codec_error_registry, name); if (!handler) PyErr_Format(PyExc_LookupError, "unknown error handler name '%.400s'", name); else @@ -761,7 +761,7 @@ PyCodec_SurrogatePassErrors(PyObject *exc) for (i = start; i < end; i++) { /* object is guaranteed to be "ready" */ Py_UCS4 ch = PyUnicode_READ_CHAR(object, i); - if (ch < 0xd800 || ch > 0xdfff) { + if (!Py_UNICODE_IS_SURROGATE(ch)) { /* Not a surrogate, fail with original exception */ PyErr_SetObject(PyExceptionInstance_Class(exc), exc); Py_DECREF(res); @@ -797,7 +797,7 @@ PyCodec_SurrogatePassErrors(PyObject *exc) (p[2] & 0xc0) == 0x80) { /* it's a three-byte code */ ch = ((p[0] & 0x0f) << 12) + ((p[1] & 0x3f) << 6) + (p[2] & 0x3f); - if (ch < 0xd800 || ch > 0xdfff) + if (!Py_UNICODE_IS_SURROGATE(ch)) /* it's not a surrogate - fail */ ch = 0; } @@ -1026,7 +1026,7 @@ static int _PyCodecRegistry_Init(void) if (interp->codec_error_registry) { for (i = 0; i < Py_ARRAY_LENGTH(methods); ++i) { - PyObject *func = PyCFunction_New(&methods[i].def, NULL); + PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL); int res; if (!func) Py_FatalError("can't initialize codec error registry"); diff --git a/Python/compile.c b/Python/compile.c index 6d66255..32465f7 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -94,6 +94,7 @@ enum { COMPILER_SCOPE_MODULE, COMPILER_SCOPE_CLASS, COMPILER_SCOPE_FUNCTION, + COMPILER_SCOPE_LAMBDA, COMPILER_SCOPE_COMPREHENSION, }; @@ -149,8 +150,7 @@ handled by the symbol analysis pass. */ struct compiler { - const char *c_filename; - PyObject *c_filename_obj; + PyObject *c_filename; struct symtable *c_st; PyFutureFeatures *c_future; /* pointer to module's __future__ */ PyCompilerFlags *c_flags; @@ -201,6 +201,7 @@ static int compiler_call_helper(struct compiler *c, int n, expr_ty starargs, expr_ty kwargs); static int compiler_try_except(struct compiler *, stmt_ty); +static int compiler_set_qualname(struct compiler *); static PyCodeObject *assemble(struct compiler *, int addNone); static PyObject *__doc__; @@ -288,8 +289,8 @@ compiler_init(struct compiler *c) } PyCodeObject * -PyAST_CompileEx(mod_ty mod, const char *filename, PyCompilerFlags *flags, - int optimize, PyArena *arena) +PyAST_CompileObject(mod_ty mod, PyObject *filename, PyCompilerFlags *flags, + int optimize, PyArena *arena) { struct compiler c; PyCodeObject *co = NULL; @@ -304,12 +305,10 @@ PyAST_CompileEx(mod_ty mod, const char *filename, PyCompilerFlags *flags, if (!compiler_init(&c)) return NULL; + Py_INCREF(filename); c.c_filename = filename; - c.c_filename_obj = PyUnicode_DecodeFSDefault(filename); - if (!c.c_filename_obj) - goto finally; c.c_arena = arena; - c.c_future = PyFuture_FromAST(mod, filename); + c.c_future = PyFuture_FromASTObject(mod, filename); if (c.c_future == NULL) goto finally; if (!flags) { @@ -323,7 +322,7 @@ PyAST_CompileEx(mod_ty mod, const char *filename, PyCompilerFlags *flags, c.c_optimize = (optimize == -1) ? Py_OptimizeFlag : optimize; c.c_nestlevel = 0; - c.c_st = PySymtable_Build(mod, filename, c.c_future); + c.c_st = PySymtable_BuildObject(mod, filename, c.c_future); if (c.c_st == NULL) { if (!PyErr_Occurred()) PyErr_SetString(PyExc_SystemError, "no symtable"); @@ -339,6 +338,21 @@ PyAST_CompileEx(mod_ty mod, const char *filename, PyCompilerFlags *flags, } PyCodeObject * +PyAST_CompileEx(mod_ty mod, const char *filename_str, PyCompilerFlags *flags, + int optimize, PyArena *arena) +{ + PyObject *filename; + PyCodeObject *co; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + co = PyAST_CompileObject(mod, filename, flags, optimize, arena); + Py_DECREF(filename); + return co; + +} + +PyCodeObject * PyNode_Compile(struct _node *n, const char *filename) { PyCodeObject *co = NULL; @@ -360,8 +374,7 @@ compiler_free(struct compiler *c) PySymtable_Free(c->c_st); if (c->c_future) PyObject_Free(c->c_future); - if (c->c_filename_obj) - Py_DECREF(c->c_filename_obj); + Py_XDECREF(c->c_filename); Py_DECREF(c->c_stack); } @@ -535,6 +548,37 @@ compiler_enter_scope(struct compiler *c, identifier name, compiler_unit_free(u); return 0; } + if (u->u_ste->ste_needs_class_closure) { + /* Cook up a implicit __class__ cell. */ + _Py_IDENTIFIER(__class__); + PyObject *tuple, *name, *zero; + int res; + assert(u->u_scope_type == COMPILER_SCOPE_CLASS); + assert(PyDict_Size(u->u_cellvars) == 0); + name = _PyUnicode_FromId(&PyId___class__); + if (!name) { + compiler_unit_free(u); + return 0; + } + tuple = PyTuple_Pack(2, name, Py_TYPE(name)); + if (!tuple) { + compiler_unit_free(u); + return 0; + } + zero = PyLong_FromLong(0); + if (!zero) { + Py_DECREF(tuple); + compiler_unit_free(u); + return 0; + } + res = PyDict_SetItem(u->u_cellvars, tuple, zero); + Py_DECREF(tuple); + Py_DECREF(zero); + if (res < 0) { + compiler_unit_free(u); + return 0; + } + } u->u_freevars = dictbytype(u->u_ste->ste_symbols, FREE, DEF_FREE_CLASS, PyDict_Size(u->u_cellvars)); @@ -580,6 +624,11 @@ compiler_enter_scope(struct compiler *c, identifier name, if (compiler_use_new_block(c) == NULL) return 0; + if (u->u_scope_type != COMPILER_SCOPE_MODULE) { + if (!compiler_set_qualname(c)) + return 0; + } + return 1; } @@ -607,57 +656,77 @@ compiler_exit_scope(struct compiler *c) } -static PyObject * -compiler_scope_qualname(struct compiler *c) +static int +compiler_set_qualname(struct compiler *c) { - Py_ssize_t stack_size, i; _Py_static_string(dot, "."); - _Py_static_string(locals, "<locals>"); - struct compiler_unit *u; - PyObject *capsule, *name, *seq, *dot_str, *locals_str; + _Py_static_string(dot_locals, ".<locals>"); + Py_ssize_t stack_size; + struct compiler_unit *u = c->u; + PyObject *name, *base, *dot_str, *dot_locals_str; - u = c->u; - if (u->u_qualname != NULL) { - Py_INCREF(u->u_qualname); - return u->u_qualname; - } + base = NULL; + stack_size = PyList_GET_SIZE(c->c_stack); + assert(stack_size >= 1); + if (stack_size > 1) { + int scope, force_global = 0; + struct compiler_unit *parent; + PyObject *mangled, *capsule; + + capsule = PyList_GET_ITEM(c->c_stack, stack_size - 1); + parent = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT); + assert(parent); + + if (u->u_scope_type == COMPILER_SCOPE_FUNCTION || u->u_scope_type == COMPILER_SCOPE_CLASS) { + assert(u->u_name); + mangled = _Py_Mangle(parent->u_private, u->u_name); + if (!mangled) + return 0; + scope = PyST_GetScope(parent->u_ste, mangled); + Py_DECREF(mangled); + assert(scope != GLOBAL_IMPLICIT); + if (scope == GLOBAL_EXPLICIT) + force_global = 1; + } - seq = PyList_New(0); - if (seq == NULL) - return NULL; + if (!force_global) { + if (parent->u_scope_type == COMPILER_SCOPE_FUNCTION + || parent->u_scope_type == COMPILER_SCOPE_LAMBDA) { + dot_locals_str = _PyUnicode_FromId(&dot_locals); + if (dot_locals_str == NULL) + return 0; + base = PyUnicode_Concat(parent->u_qualname, dot_locals_str); + if (base == NULL) + return 0; + } + else { + Py_INCREF(parent->u_qualname); + base = parent->u_qualname; + } + } + } - stack_size = PyList_GET_SIZE(c->c_stack); - for (i = 0; i < stack_size; i++) { - capsule = PyList_GET_ITEM(c->c_stack, i); - u = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT); - assert(u); - if (u->u_scope_type == COMPILER_SCOPE_MODULE) - continue; - if (PyList_Append(seq, u->u_name)) - goto _error; - if (u->u_scope_type == COMPILER_SCOPE_FUNCTION) { - locals_str = _PyUnicode_FromId(&locals); - if (locals_str == NULL) - goto _error; - if (PyList_Append(seq, locals_str)) - goto _error; + if (base != NULL) { + dot_str = _PyUnicode_FromId(&dot); + if (dot_str == NULL) { + Py_DECREF(base); + return 0; } + name = PyUnicode_Concat(base, dot_str); + Py_DECREF(base); + if (name == NULL) + return 0; + PyUnicode_Append(&name, u->u_name); + if (name == NULL) + return 0; + } + else { + Py_INCREF(u->u_name); + name = u->u_name; } - u = c->u; - if (PyList_Append(seq, u->u_name)) - goto _error; - dot_str = _PyUnicode_FromId(&dot); - if (dot_str == NULL) - goto _error; - name = PyUnicode_Join(dot_str, seq); - Py_DECREF(seq); u->u_qualname = name; - Py_XINCREF(name); - return name; -_error: - Py_XDECREF(seq); - return NULL; + return 1; } /* Allocate a new block and return a pointer to it. @@ -862,8 +931,6 @@ opcode_stack_effect(int opcode, int oparg) return 7; case WITH_CLEANUP: return -1; /* XXX Sometimes more */ - case STORE_LOCALS: - return -1; case RETURN_VALUE: return -1; case IMPORT_STAR: @@ -970,6 +1037,7 @@ opcode_stack_effect(int opcode, int oparg) case LOAD_CLOSURE: return 1; case LOAD_DEREF: + case LOAD_CLASSDEREF: return 1; case STORE_DEREF: return -1; @@ -1330,16 +1398,19 @@ compiler_mod(struct compiler *c, mod_ty mod) static int get_ref_type(struct compiler *c, PyObject *name) { - int scope = PyST_GetScope(c->u->u_ste, name); + int scope; + if (c->u->u_scope_type == COMPILER_SCOPE_CLASS && + !PyUnicode_CompareWithASCIIString(name, "__class__")) + return CELL; + scope = PyST_GetScope(c->u->u_ste, name); if (scope == 0) { char buf[350]; PyOS_snprintf(buf, sizeof(buf), - "unknown scope for %.100s in %.100s(%s) in %s\n" + "unknown scope for %.100s in %.100s(%s)\n" "symbols: %s\nlocals: %s\nglobals: %s", PyBytes_AS_STRING(name), PyBytes_AS_STRING(c->u->u_name), PyObject_REPR(c->u->u_ste->ste_id), - c->c_filename, PyObject_REPR(c->u->u_ste->ste_symbols), PyObject_REPR(c->u->u_varnames), PyObject_REPR(c->u->u_names) @@ -1501,15 +1572,15 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, if (compiler_visit_argannotations(c, args->args, names)) goto error; - if (args->varargannotation && - compiler_visit_argannotation(c, args->vararg, - args->varargannotation, names)) + if (args->vararg && args->vararg->annotation && + compiler_visit_argannotation(c, args->vararg->arg, + args->vararg->annotation, names)) goto error; if (compiler_visit_argannotations(c, args->kwonlyargs, names)) goto error; - if (args->kwargannotation && - compiler_visit_argannotation(c, args->kwarg, - args->kwargannotation, names)) + if (args->kwarg && args->kwarg->annotation && + compiler_visit_argannotation(c, args->kwarg->arg, + args->kwarg->annotation, names)) goto error; if (!return_str) { @@ -1568,6 +1639,8 @@ compiler_function(struct compiler *c, stmt_ty s) if (!compiler_decorators(c, decos)) return 0; + if (args->defaults) + VISIT_SEQ(c, expr, args->defaults); if (args->kwonlyargs) { int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, args->kw_defaults); @@ -1575,8 +1648,6 @@ compiler_function(struct compiler *c, stmt_ty s) return 0; kw_default_count = res; } - if (args->defaults) - VISIT_SEQ(c, expr, args->defaults); num_annotations = compiler_visit_annotations(c, args, returns); if (num_annotations < 0) return 0; @@ -1605,9 +1676,10 @@ compiler_function(struct compiler *c, stmt_ty s) VISIT_IN_SCOPE(c, stmt, st); } co = assemble(c, 1); - qualname = compiler_scope_qualname(c); + qualname = c->u->u_qualname; + Py_INCREF(qualname); compiler_exit_scope(c); - if (qualname == NULL || co == NULL) { + if (co == NULL) { Py_XDECREF(qualname); Py_XDECREF(co); return 0; @@ -1661,12 +1733,6 @@ compiler_class(struct compiler *c, stmt_ty s) Py_INCREF(s->v.ClassDef.name); Py_XDECREF(c->u->u_private); c->u->u_private = s->v.ClassDef.name; - /* force it to have one mandatory argument */ - c->u->u_argcount = 1; - /* load the first argument (__locals__) ... */ - ADDOP_I(c, LOAD_FAST, 0); - /* ... and store it into f_locals */ - ADDOP_IN_SCOPE(c, STORE_LOCALS); /* load (global) __name__ ... */ str = PyUnicode_InternFromString("__name__"); if (!str || !compiler_nameop(c, str, Load)) { @@ -1683,14 +1749,8 @@ compiler_class(struct compiler *c, stmt_ty s) return 0; } Py_DECREF(str); - /* store the __qualname__ */ - str = compiler_scope_qualname(c); - if (!str) { - compiler_exit_scope(c); - return 0; - } - ADDOP_O(c, LOAD_CONST, str, consts); - Py_DECREF(str); + assert(c->u->u_qualname); + ADDOP_O(c, LOAD_CONST, c->u->u_qualname, consts); str = PyUnicode_InternFromString("__qualname__"); if (!str || !compiler_nameop(c, str, Store)) { Py_XDECREF(str); @@ -1703,24 +1763,24 @@ compiler_class(struct compiler *c, stmt_ty s) compiler_exit_scope(c); return 0; } - /* return the (empty) __class__ cell */ - str = PyUnicode_InternFromString("__class__"); - if (str == NULL) { - compiler_exit_scope(c); - return 0; - } - i = compiler_lookup_arg(c->u->u_cellvars, str); - Py_DECREF(str); - if (i == -1) { - /* This happens when nobody references the cell */ - PyErr_Clear(); - /* Return None */ - ADDOP_O(c, LOAD_CONST, Py_None, consts); - } - else { + if (c->u->u_ste->ste_needs_class_closure) { + /* return the (empty) __class__ cell */ + str = PyUnicode_InternFromString("__class__"); + if (str == NULL) { + compiler_exit_scope(c); + return 0; + } + i = compiler_lookup_arg(c->u->u_cellvars, str); + Py_DECREF(str); + assert(i == 0); /* Return the cell where to store __class__ */ ADDOP_I(c, LOAD_CLOSURE, i); } + else { + assert(PyDict_Size(c->u->u_cellvars) == 0); + /* This happens when nobody references the cell. Return None. */ + ADDOP_O(c, LOAD_CONST, Py_None, consts); + } ADDOP_IN_SCOPE(c, RETURN_VALUE); /* create the code object */ co = assemble(c, 1); @@ -1797,15 +1857,15 @@ compiler_lambda(struct compiler *c, expr_ty e) return 0; } + if (args->defaults) + VISIT_SEQ(c, expr, args->defaults); if (args->kwonlyargs) { int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, args->kw_defaults); if (res < 0) return 0; kw_default_count = res; } - if (args->defaults) - VISIT_SEQ(c, expr, args->defaults); - if (!compiler_enter_scope(c, name, COMPILER_SCOPE_FUNCTION, + if (!compiler_enter_scope(c, name, COMPILER_SCOPE_LAMBDA, (void *)e, e->lineno)) return 0; @@ -1824,9 +1884,10 @@ compiler_lambda(struct compiler *c, expr_ty e) ADDOP_IN_SCOPE(c, RETURN_VALUE); } co = assemble(c, 1); - qualname = compiler_scope_qualname(c); + qualname = c->u->u_qualname; + Py_INCREF(qualname); compiler_exit_scope(c); - if (qualname == NULL || co == NULL) + if (co == NULL) return 0; arglength = asdl_seq_LEN(args->defaults); @@ -2288,8 +2349,11 @@ compiler_import(struct compiler *c, stmt_ty s) identifier tmp = alias->name; Py_ssize_t dot = PyUnicode_FindChar( alias->name, '.', 0, PyUnicode_GET_LENGTH(alias->name), 1); - if (dot != -1) + if (dot != -1) { tmp = PyUnicode_Substring(alias->name, 0, dot); + if (tmp == NULL) + return 0; + } r = compiler_nameop(c, tmp, Store); if (dot != -1) { Py_DECREF(tmp); @@ -2380,6 +2444,7 @@ compiler_assert(struct compiler *c, stmt_ty s) { static PyObject *assertion_error = NULL; basicblock *end; + PyObject* msg; if (c->c_optimize) return 1; @@ -2390,11 +2455,17 @@ compiler_assert(struct compiler *c, stmt_ty s) } if (s->v.Assert.test->kind == Tuple_kind && asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0) { - const char* msg = - "assertion is always true, perhaps remove parentheses?"; - if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, c->c_filename, - c->u->u_lineno, NULL, NULL) == -1) + msg = PyUnicode_FromString("assertion is always true, " + "perhaps remove parentheses?"); + if (msg == NULL) + return 0; + if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg, + c->c_filename, c->u->u_lineno, + NULL, NULL) == -1) { + Py_DECREF(msg); return 0; + } + Py_DECREF(msg); } VISIT(c, expr, s->v.Assert.test); end = compiler_new_block(c); @@ -2638,6 +2709,10 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) if (!mangled) return 0; + assert(PyUnicode_CompareWithASCIIString(name, "None") && + PyUnicode_CompareWithASCIIString(name, "True") && + PyUnicode_CompareWithASCIIString(name, "False")); + op = 0; optype = OP_NAME; scope = PyST_GetScope(c->u->u_ste, mangled); @@ -2673,7 +2748,9 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) switch (optype) { case OP_DEREF: switch (ctx) { - case Load: op = LOAD_DEREF; break; + case Load: + op = (c->u->u_ste->ste_type == ClassBlock) ? LOAD_CLASSDEREF : LOAD_DEREF; + break; case Store: op = STORE_DEREF; break; case AugLoad: case AugStore: @@ -3085,9 +3162,10 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type, identifier name, } co = assemble(c, 1); - qualname = compiler_scope_qualname(c); + qualname = c->u->u_qualname; + Py_INCREF(qualname); compiler_exit_scope(c); - if (qualname == NULL || co == NULL) + if (co == NULL) goto error; if (!compiler_make_closure(c, co, 0, qualname)) @@ -3197,12 +3275,18 @@ expr_constant(struct compiler *c, expr_ty e) case Name_kind: /* optimize away names that can't be reassigned */ id = PyUnicode_AsUTF8(e->v.Name.id); - if (strcmp(id, "True") == 0) return 1; - if (strcmp(id, "False") == 0) return 0; - if (strcmp(id, "None") == 0) return 0; - if (strcmp(id, "__debug__") == 0) - return ! c->c_optimize; - /* fall through */ + if (id && strcmp(id, "__debug__") == 0) + return !c->c_optimize; + return -1; + case NameConstant_kind: { + PyObject *o = e->v.NameConstant.value; + if (o == Py_None) + return 0; + else if (o == Py_True) + return 1; + else if (o == Py_False) + return 0; + } default: return -1; } @@ -3378,6 +3462,9 @@ compiler_visit_expr(struct compiler *c, expr_ty e) case Ellipsis_kind: ADDOP_O(c, LOAD_CONST, Py_Ellipsis, consts); break; + case NameConstant_kind: + ADDOP_O(c, LOAD_CONST, e->v.NameConstant.value, consts); + break; /* The following exprs can be assignment targets. */ case Attribute_kind: if (e->v.Attribute.ctx != AugStore) @@ -3547,12 +3634,12 @@ compiler_error(struct compiler *c, const char *errstr) PyObject *loc; PyObject *u = NULL, *v = NULL; - loc = PyErr_ProgramText(c->c_filename, c->u->u_lineno); + loc = PyErr_ProgramTextObject(c->c_filename, c->u->u_lineno); if (!loc) { Py_INCREF(Py_None); loc = Py_None; } - u = Py_BuildValue("(OiiO)", c->c_filename_obj, c->u->u_lineno, + u = Py_BuildValue("(OiiO)", c->c_filename, c->u->u_lineno, c->u->u_col_offset, loc); if (!u) goto exit; @@ -4060,9 +4147,8 @@ compute_code_flags(struct compiler *c) { PySTEntryObject *ste = c->u->u_ste; int flags = 0, n; - if (ste->ste_type != ModuleBlock) - flags |= CO_NEWLOCALS; if (ste->ste_type == FunctionBlock) { + flags |= CO_NEWLOCALS; if (!ste->ste_unoptimized) flags |= CO_OPTIMIZED; if (ste->ste_nested) @@ -4143,7 +4229,7 @@ makecode(struct compiler *c, struct assembler *a) nlocals, stackdepth(c), flags, bytecode, consts, names, varnames, freevars, cellvars, - c->c_filename_obj, c->u->u_name, + c->c_filename, c->u->u_name, c->u->u_firstlineno, a->a_lnotab); error: diff --git a/Python/condvar.h b/Python/condvar.h index bbb40ba..e022dc7 100644 --- a/Python/condvar.h +++ b/Python/condvar.h @@ -241,7 +241,7 @@ _PyCOND_WAIT_MS(PyCOND_T *cv, PyMUTEX_T *cs, DWORD ms) * but we are safe because we are using a semaphore wich has an internal * count. */ - wait = WaitForSingleObject(cv->sem, ms); + wait = WaitForSingleObjectEx(cv->sem, ms, FALSE); PyMUTEX_LOCK(cs); if (wait != WAIT_OBJECT_0) --cv->waiting; diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c index f40a0be..5ac30ed 100644 --- a/Python/dynload_aix.c +++ b/Python/dynload_aix.c @@ -30,11 +30,11 @@ const char *_PyImport_DynLoadFiletab[] = {".so", NULL}; static int aix_getoldmodules(void **modlistptr) { - register ModulePtr modptr, prevmodptr; - register struct ld_info *ldiptr; - register char *ldibuf; - register int errflag, bufsize = 1024; - register unsigned int offset; + ModulePtr modptr, prevmodptr; + struct ld_info *ldiptr; + char *ldibuf; + int errflag, bufsize = 1024; + unsigned int offset; char *progname = Py_GetProgramName(); /* @@ -106,7 +106,7 @@ aix_loaderror(const char *pathname) char *message[1024], errbuf[1024]; PyObject *pathname_ob = NULL; PyObject *errbuf_ob = NULL; - register int i,j; + int i,j; struct errtab { int errNo; diff --git a/Python/dynload_os2.c b/Python/dynload_os2.c deleted file mode 100644 index 0e1b907..0000000 --- a/Python/dynload_os2.c +++ /dev/null @@ -1,42 +0,0 @@ - -/* Support for dynamic loading of extension modules */ - -#define INCL_DOSERRORS -#define INCL_DOSMODULEMGR -#include <os2.h> - -#include "Python.h" -#include "importdl.h" - - -const char *_PyImport_DynLoadFiletab[] = {".pyd", ".dll", NULL}; - -dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname, - const char *pathname, FILE *fp) -{ - dl_funcptr p; - APIRET rc; - HMODULE hDLL; - char failreason[256]; - char funcname[258]; - - rc = DosLoadModule(failreason, - sizeof(failreason), - pathname, - &hDLL); - - if (rc != NO_ERROR) { - char errBuf[256]; - PyOS_snprintf(errBuf, sizeof(errBuf), - "DLL load failed, rc = %d: %.200s", - rc, failreason); - PyErr_SetString(PyExc_ImportError, errBuf); - return NULL; - } - - PyOS_snprintf(funcname, sizeof(funcname), "PyInit_%.200s", shortname); - rc = DosQueryProcAddr(hDLL, 0L, funcname, &p); - if (rc != NO_ERROR) - p = NULL; /* Signify Failure to Acquire Entrypoint */ - return p; -} diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c index 75544ed..888fbfc 100644 --- a/Python/dynload_shlib.c +++ b/Python/dynload_shlib.c @@ -18,10 +18,6 @@ #ifdef HAVE_DLFCN_H #include <dlfcn.h> -#else -#if defined(PYOS_OS2) && defined(PYCC_GCC) -#include "dlfcn.h" -#endif #endif #if (defined(__OpenBSD__) || defined(__NetBSD__)) && !defined(__ELF__) @@ -40,10 +36,6 @@ const char *_PyImport_DynLoadFiletab[] = { #ifdef __CYGWIN__ ".dll", #else /* !__CYGWIN__ */ -#if defined(PYOS_OS2) && defined(PYCC_GCC) - ".pyd", - ".dll", -#else /* !(defined(PYOS_OS2) && defined(PYCC_GCC)) */ #ifdef __VMS ".exe", ".EXE", @@ -52,7 +44,6 @@ const char *_PyImport_DynLoadFiletab[] = { ".abi" PYTHON_ABI_STRING ".so", ".so", #endif /* __VMS */ -#endif /* defined(PYOS_OS2) && defined(PYCC_GCC) */ #endif /* __CYGWIN__ */ NULL, }; @@ -114,9 +105,7 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname, } } -#if !(defined(PYOS_OS2) && defined(PYCC_GCC)) dlopenflags = PyThreadState_GET()->interp->dlopenflags; -#endif #ifdef __VMS /* VMS currently don't allow a pathname, use a logical name instead */ @@ -132,19 +121,30 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname, handle = dlopen(pathname, dlopenflags); if (handle == NULL) { - PyObject *mod_name = NULL; - PyObject *path = NULL; - PyObject *error_ob = NULL; + PyObject *mod_name; + PyObject *path; + PyObject *error_ob; const char *error = dlerror(); if (error == NULL) error = "unknown dlopen() error"; error_ob = PyUnicode_FromString(error); - path = PyUnicode_FromString(pathname); + if (error_ob == NULL) + return NULL; mod_name = PyUnicode_FromString(shortname); + if (mod_name == NULL) { + Py_DECREF(error_ob); + return NULL; + } + path = PyUnicode_FromString(pathname); + if (path == NULL) { + Py_DECREF(error_ob); + Py_DECREF(mod_name); + return NULL; + } PyErr_SetImportError(error_ob, mod_name, path); - Py_XDECREF(error_ob); - Py_XDECREF(path); - Py_XDECREF(mod_name); + Py_DECREF(error_ob); + Py_DECREF(mod_name); + Py_DECREF(path); return NULL; } if (fp != NULL && nhandles < 128) diff --git a/Python/errors.c b/Python/errors.c index 626b16e..1832b5b 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -71,6 +71,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 */ + PyErr_Clear(); +#endif if (value == NULL || value == Py_None) args = PyTuple_New(0); else if (PyTuple_Check(value)) { @@ -112,6 +117,20 @@ PyErr_SetObject(PyObject *exception, PyObject *value) PyErr_Restore(exception, value, tb); } +/* Set a key error with the specified argument, wrapping it in a + * tuple automatically so that tuple keys are not unpacked as the + * exception arguments. */ +void +_PyErr_SetKeyError(PyObject *arg) +{ + PyObject *tup; + tup = PyTuple_Pack(1, arg); + if (!tup) + return; /* caller will expect error to be set anyway */ + PyErr_SetObject(PyExc_KeyError, tup); + Py_DECREF(tup); +} + void PyErr_SetNone(PyObject *exception) { @@ -227,12 +246,21 @@ PyErr_NormalizeException(PyObject **exc, PyObject **val, PyObject **tb) value will be an instance. */ if (PyExceptionClass_Check(type)) { + int is_subclass; + if (inclass) { + is_subclass = PyObject_IsSubclass(inclass, type); + if (is_subclass < 0) + goto finally; + } + else + is_subclass = 0; + /* if the value was not an instance, or is not an instance whose class is (or is derived from) type, then use the value as an argument to instantiation of the type class. */ - if (!inclass || !PyObject_IsSubclass(inclass, type)) { + if (!inclass || !is_subclass) { PyObject *args, *res; if (value == Py_None) @@ -366,6 +394,12 @@ PyErr_BadArgument(void) PyObject * PyErr_NoMemory(void) { + if (Py_TYPE(PyExc_MemoryError) == NULL) { + /* PyErr_NoMemory() has been called before PyExc_MemoryError has been + initialized by _PyExc_Init() */ + Py_FatalError("Out of memory and PyExc_MemoryError is not " + "initialized yet"); + } PyErr_SetNone(PyExc_MemoryError); return NULL; } @@ -588,7 +622,7 @@ PyObject *PyErr_SetExcFromWindowsErr(PyObject *exc, int ierr) PyObject *PyErr_SetFromWindowsErr(int ierr) { - return PyErr_SetExcFromWindowsErrWithFilename(PyExc_WindowsError, + return PyErr_SetExcFromWindowsErrWithFilename(PyExc_OSError, ierr, NULL); } PyObject *PyErr_SetFromWindowsErrWithFilename( @@ -597,7 +631,7 @@ PyObject *PyErr_SetFromWindowsErrWithFilename( { PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL; PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( - PyExc_WindowsError, + PyExc_OSError, ierr, name); Py_XDECREF(name); return result; @@ -611,7 +645,7 @@ PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename( PyUnicode_FromUnicode(filename, wcslen(filename)) : NULL; PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( - PyExc_WindowsError, + PyExc_OSError, ierr, name); Py_XDECREF(name); return result; @@ -646,8 +680,11 @@ PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path) Py_INCREF(msg); PyTuple_SET_ITEM(args, 0, msg); - PyDict_SetItemString(kwargs, "name", name); - PyDict_SetItemString(kwargs, "path", path); + + if (PyDict_SetItemString(kwargs, "name", name) < 0) + return NULL; + if (PyDict_SetItemString(kwargs, "path", path) < 0) + return NULL; error = PyObject_Call(PyExc_ImportError, args, kwargs); if (error != NULL) { @@ -675,6 +712,7 @@ _PyErr_BadInternalCall(const char *filename, int lineno) void PyErr_BadInternalCall(void) { + assert(0 && "bad argument to internal function"); PyErr_Format(PyExc_SystemError, "bad argument to internal function"); } @@ -694,6 +732,12 @@ PyErr_Format(PyObject *exception, const char *format, ...) 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); @@ -795,60 +839,84 @@ PyErr_WriteUnraisable(PyObject *obj) { _Py_IDENTIFIER(__module__); PyObject *f, *t, *v, *tb; + PyObject *moduleName = NULL; + char* className; + PyErr_Fetch(&t, &v, &tb); + f = PySys_GetObject("stderr"); - if (f != NULL && f != Py_None) { - PyFile_WriteString("Exception ", f); - if (t) { - PyObject* moduleName; - char* className; - assert(PyExceptionClass_Check(t)); - className = PyExceptionClass_Name(t); - if (className != NULL) { - char *dot = strrchr(className, '.'); - if (dot != NULL) - className = dot+1; - } + if (f == NULL || f == Py_None) + goto done; + + if (obj) { + if (PyFile_WriteString("Exception ignored in: ", f) < 0) + goto done; + if (PyFile_WriteObject(obj, f, 0) < 0) + goto done; + if (PyFile_WriteString("\n", f) < 0) + goto done; + } - moduleName = _PyObject_GetAttrId(t, &PyId___module__); - if (moduleName == NULL) - PyFile_WriteString("<unknown>", f); - else { - char* modstr = _PyUnicode_AsString(moduleName); - if (modstr && - strcmp(modstr, "builtins") != 0) - { - PyFile_WriteString(modstr, f); - PyFile_WriteString(".", f); - } - } - if (className == NULL) - PyFile_WriteString("<unknown>", f); - else - PyFile_WriteString(className, f); - if (v && v != Py_None) { - PyFile_WriteString(": ", f); - PyFile_WriteObject(v, f, 0); - } - Py_XDECREF(moduleName); - } - if (obj) { - PyFile_WriteString(" in ", f); - PyFile_WriteObject(obj, f, 0); + if (PyTraceBack_Print(tb, f) < 0) + goto done; + + if (!t) + goto done; + + assert(PyExceptionClass_Check(t)); + className = PyExceptionClass_Name(t); + if (className != NULL) { + char *dot = strrchr(className, '.'); + if (dot != NULL) + className = dot+1; + } + + moduleName = _PyObject_GetAttrId(t, &PyId___module__); + if (moduleName == NULL) { + PyErr_Clear(); + if (PyFile_WriteString("<unknown>", f) < 0) + goto done; + } + else { + if (PyUnicode_CompareWithASCIIString(moduleName, "builtins") != 0) { + if (PyFile_WriteObject(moduleName, f, Py_PRINT_RAW) < 0) + goto done; + if (PyFile_WriteString(".", f) < 0) + goto done; } - PyFile_WriteString(" ignored\n", f); - PyErr_Clear(); /* Just in case */ } + if (className == NULL) { + if (PyFile_WriteString("<unknown>", f) < 0) + goto done; + } + else { + if (PyFile_WriteString(className, f) < 0) + goto done; + } + + if (v && v != Py_None) { + if (PyFile_WriteString(": ", f) < 0) + goto done; + if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) + goto done; + } + if (PyFile_WriteString("\n", f) < 0) + goto done; + +done: + Py_XDECREF(moduleName); Py_XDECREF(t); Py_XDECREF(v); Py_XDECREF(tb); + PyErr_Clear(); /* Just in case */ } extern PyObject *PyModule_GetWarningsModule(void); void -PyErr_SyntaxLocation(const char *filename, int lineno) { +PyErr_SyntaxLocation(const char *filename, int lineno) +{ PyErr_SyntaxLocationEx(filename, lineno, -1); } @@ -858,7 +926,7 @@ PyErr_SyntaxLocation(const char *filename, int lineno) { to make printing of exceptions believe it is a syntax error. */ void -PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) +PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) { PyObject *exc, *v, *tb, *tmp; _Py_IDENTIFIER(filename); @@ -892,16 +960,10 @@ PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) } } if (filename != NULL) { - tmp = PyUnicode_DecodeFSDefault(filename); - if (tmp == NULL) + if (_PyObject_SetAttrId(v, &PyId_filename, filename)) PyErr_Clear(); - else { - if (_PyObject_SetAttrId(v, &PyId_filename, tmp)) - PyErr_Clear(); - Py_DECREF(tmp); - } - tmp = PyErr_ProgramText(filename, lineno); + tmp = PyErr_ProgramTextObject(filename, lineno); if (tmp) { if (_PyObject_SetAttrId(v, &PyId_text, tmp)) PyErr_Clear(); @@ -931,22 +993,33 @@ PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) PyErr_Restore(exc, v, tb); } +void +PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) +{ + PyObject *fileobj; + if (filename != NULL) { + fileobj = PyUnicode_DecodeFSDefault(filename); + if (fileobj == NULL) + PyErr_Clear(); + } + else + fileobj = NULL; + PyErr_SyntaxLocationObject(fileobj, lineno, col_offset); + Py_XDECREF(fileobj); +} + /* Attempt to load the line of text that the exception refers to. If it fails, it will return NULL but will not set an exception. XXX The functionality of this function is quite similar to the functionality in tb_displayline() in traceback.c. */ -PyObject * -PyErr_ProgramText(const char *filename, int lineno) +static PyObject * +err_programtext(FILE *fp, int lineno) { - FILE *fp; int i; char linebuf[1000]; - if (filename == NULL || *filename == '\0' || lineno <= 0) - return NULL; - fp = fopen(filename, "r" PY_STDIOTEXTMODE); if (fp == NULL) return NULL; for (i = 0; i < lineno; i++) { @@ -977,6 +1050,26 @@ PyErr_ProgramText(const char *filename, int lineno) return NULL; } +PyObject * +PyErr_ProgramText(const char *filename, int lineno) +{ + FILE *fp; + if (filename == NULL || *filename == '\0' || lineno <= 0) + return NULL; + fp = _Py_fopen(filename, "r" PY_STDIOTEXTMODE); + return err_programtext(fp, lineno); +} + +PyObject * +PyErr_ProgramTextObject(PyObject *filename, int lineno) +{ + FILE *fp; + if (filename == NULL || lineno <= 0) + return NULL; + fp = _Py_fopen_obj(filename, "r" PY_STDIOTEXTMODE); + return err_programtext(fp, lineno); +} + #ifdef __cplusplus } #endif diff --git a/Python/fileutils.c b/Python/fileutils.c index b7c42e8..eecbb3b 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -9,20 +9,39 @@ #include <langinfo.h> #endif +#ifdef HAVE_SYS_IOCTL_H +#include <sys/ioctl.h> +#endif + +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif /* HAVE_FCNTL_H */ + #ifdef __APPLE__ extern wchar_t* _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size); #endif +#ifdef O_CLOEXEC +/* Does open() support the O_CLOEXEC flag? Possible values: + + -1: unknown + 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() */ +int _Py_open_cloexec_works = -1; +#endif + PyObject * _Py_device_encoding(int fd) { -#if defined(MS_WINDOWS) || defined(MS_WIN64) +#if defined(MS_WINDOWS) UINT cp; #endif if (!_PyVerify_fd(fd) || !isatty(fd)) { Py_RETURN_NONE; } -#if defined(MS_WINDOWS) || defined(MS_WIN64) +#if defined(MS_WINDOWS) if (fd == 0) cp = GetConsoleCP(); else if (fd == 1 || fd == 2) @@ -60,7 +79,7 @@ extern int _Py_normalize_encoding(const char *, char *, size_t); workaround is also enabled on error, for example if getting the locale failed. - Values of locale_is_ascii: + Values of force_ascii: 1: the workaround is used: _Py_wchar2char() uses encode_ascii_surrogateescape() and _Py_char2wchar() uses @@ -201,7 +220,7 @@ decode_ascii_surrogateescape(const char *arg, size_t *size) unsigned char *in; wchar_t *out; - res = PyMem_Malloc((strlen(arg)+1)*sizeof(wchar_t)); + res = PyMem_RawMalloc((strlen(arg)+1)*sizeof(wchar_t)); if (!res) return NULL; @@ -229,7 +248,7 @@ decode_ascii_surrogateescape(const char *arg, size_t *size) 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_Free() to free the memory) and write the number of written wide + 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 @@ -254,9 +273,9 @@ _Py_char2wchar(const char* arg, size_t *size) wchar_t *res; size_t argsize; size_t count; +#ifdef HAVE_MBRTOWC unsigned char *in; wchar_t *out; -#ifdef HAVE_MBRTOWC mbstate_t mbs; #endif @@ -283,7 +302,7 @@ _Py_char2wchar(const char* arg, size_t *size) argsize = mbstowcs(NULL, arg, 0); #endif if (argsize != (size_t)-1) { - res = (wchar_t *)PyMem_Malloc((argsize+1)*sizeof(wchar_t)); + res = (wchar_t *)PyMem_RawMalloc((argsize+1)*sizeof(wchar_t)); if (!res) goto oom; count = mbstowcs(res, arg, argsize+1); @@ -292,7 +311,7 @@ _Py_char2wchar(const char* arg, size_t *size) /* Only use the result if it contains no surrogate characters. */ for (tmp = res; *tmp != 0 && - (*tmp < 0xd800 || *tmp > 0xdfff); tmp++) + !Py_UNICODE_IS_SURROGATE(*tmp); tmp++) ; if (*tmp == 0) { if (size != NULL) @@ -300,7 +319,7 @@ _Py_char2wchar(const char* arg, size_t *size) return res; } } - PyMem_Free(res); + PyMem_RawFree(res); } /* Conversion failed. Fall back to escaping with surrogateescape. */ #ifdef HAVE_MBRTOWC @@ -309,7 +328,7 @@ _Py_char2wchar(const char* arg, size_t *size) /* Overallocate; as multi-byte characters are in the argument, the actual output could use less memory. */ argsize = strlen(arg) + 1; - res = (wchar_t*)PyMem_Malloc(argsize*sizeof(wchar_t)); + res = (wchar_t*)PyMem_RawMalloc(argsize*sizeof(wchar_t)); if (!res) goto oom; in = (unsigned char*)arg; @@ -325,7 +344,7 @@ _Py_char2wchar(const char* arg, size_t *size) since we provide everything that we have - unless there is a bug in the C library, or I misunderstood how mbrtowc works. */ - PyMem_Free(res); + PyMem_RawFree(res); if (size != NULL) *size = (size_t)-2; return NULL; @@ -338,7 +357,7 @@ _Py_char2wchar(const char* arg, size_t *size) memset(&mbs, 0, sizeof mbs); continue; } - if (*out >= 0xd800 && *out <= 0xdfff) { + if (Py_UNICODE_IS_SURROGATE(*out)) { /* Surrogate character. Escape the original byte sequence with surrogateescape. */ argsize -= converted; @@ -547,14 +566,215 @@ _Py_stat(PyObject *path, struct stat *statbuf) #endif -/* Open a file. Use _wfopen() on Windows, encode the path to the locale - encoding and use fopen() otherwise. */ +static int +get_inheritable(int fd, int raise) +{ +#ifdef MS_WINDOWS + HANDLE handle; + DWORD flags; + + if (!_PyVerify_fd(fd)) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + handle = (HANDLE)_get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) { + if (raise) + PyErr_SetFromWindowsErr(0); + return -1; + } + + if (!GetHandleInformation(handle, &flags)) { + if (raise) + PyErr_SetFromWindowsErr(0); + return -1; + } + + return (flags & HANDLE_FLAG_INHERIT); +#else + int flags; + + flags = fcntl(fd, F_GETFD, 0); + if (flags == -1) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return !(flags & FD_CLOEXEC); +#endif +} + +/* Get the inheritable flag of the specified file descriptor. + Return 1 if the file descriptor can be inherited, 0 if it cannot, + raise an exception and return -1 on error. */ +int +_Py_get_inheritable(int fd) +{ + return get_inheritable(fd, 1); +} + +static int +set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) +{ +#ifdef MS_WINDOWS + HANDLE handle; + DWORD flags; +#elif defined(HAVE_SYS_IOCTL_H) && defined(FIOCLEX) && defined(FIONCLEX) + int request; + int err; +#elif defined(HAVE_FCNTL_H) + int flags; + int res; +#endif + + /* atomic_flag_works can only be used to make the file descriptor + non-inheritable */ + assert(!(atomic_flag_works != NULL && inheritable)); + + if (atomic_flag_works != NULL && !inheritable) { + if (*atomic_flag_works == -1) { + int inheritable = get_inheritable(fd, raise); + if (inheritable == -1) + return -1; + *atomic_flag_works = !inheritable; + } + + if (*atomic_flag_works) + return 0; + } + +#ifdef MS_WINDOWS + if (!_PyVerify_fd(fd)) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + handle = (HANDLE)_get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) { + if (raise) + PyErr_SetFromWindowsErr(0); + return -1; + } + + if (inheritable) + flags = HANDLE_FLAG_INHERIT; + else + flags = 0; + if (!SetHandleInformation(handle, HANDLE_FLAG_INHERIT, flags)) { + if (raise) + PyErr_SetFromWindowsErr(0); + return -1; + } + return 0; + +#elif defined(HAVE_SYS_IOCTL_H) && defined(FIOCLEX) && defined(FIONCLEX) + if (inheritable) + request = FIONCLEX; + else + request = FIOCLEX; + err = ioctl(fd, request); + if (err) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; + +#else + flags = fcntl(fd, F_GETFD); + if (flags < 0) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + if (inheritable) + flags &= ~FD_CLOEXEC; + else + flags |= FD_CLOEXEC; + res = fcntl(fd, F_SETFD, flags); + if (res < 0) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#endif +} + +/* Make the file descriptor non-inheritable. + Return 0 on success, set errno and return -1 on error. */ +static int +make_non_inheritable(int fd) +{ + return set_inheritable(fd, 0, 0, NULL); +} + +/* Set the inheritable flag of the specified file descriptor. + On success: return 0, on error: raise an exception if raise is nonzero + and return -1. + + If atomic_flag_works is not NULL: + + * if *atomic_flag_works==-1, check if the inheritable is set on the file + descriptor: if yes, set *atomic_flag_works to 1, otherwise set to 0 and + set the inheritable flag + * if *atomic_flag_works==1: do nothing + * if *atomic_flag_works==0: set inheritable flag to False + + Set atomic_flag_works to NULL if no atomic flag was used to create the + file descriptor. + + atomic_flag_works can only be used to make a file descriptor + non-inheritable: atomic_flag_works must be NULL if inheritable=1. */ +int +_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) +{ + int fd; +#ifdef MS_WINDOWS + fd = open(pathname, flags | O_NOINHERIT); + if (fd < 0) + return fd; +#else + + int *atomic_flag_works; +#ifdef 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) { + close(fd); + return -1; + } +#endif /* !MS_WINDOWS */ + return fd; +} +/* 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. */ FILE * _Py_wfopen(const wchar_t *path, const wchar_t *mode) { -#ifndef MS_WINDOWS FILE *f; +#ifndef MS_WINDOWS char *cpath; char cmode[10]; size_t r; @@ -568,21 +788,42 @@ _Py_wfopen(const wchar_t *path, const wchar_t *mode) return NULL; f = fopen(cpath, cmode); PyMem_Free(cpath); - return f; #else - return _wfopen(path, mode); + f = _wfopen(path, mode); #endif + if (f == NULL) + return NULL; + if (make_non_inheritable(fileno(f)) < 0) { + fclose(f); + return NULL; + } + return f; } -/* Call _wfopen() on Windows, or encode the path to the filesystem encoding and - call fopen() otherwise. +/* Wrapper to fopen(). The file descriptor is created non-inheritable. */ +FILE* +_Py_fopen(const char *pathname, const char *mode) +{ + FILE *f = fopen(pathname, mode); + if (f == NULL) + return NULL; + if (make_non_inheritable(fileno(f)) < 0) { + fclose(f); + return NULL; + } + return f; +} - Return the new file object on success, or NULL if the file cannot be open or - (if PyErr_Occurred()) on unicode error */ +/* 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. + Return the new file object on success, or NULL if the file cannot be open or + (if PyErr_Occurred()) on unicode error. */ FILE* -_Py_fopen(PyObject *path, const char *mode) +_Py_fopen_obj(PyObject *path, const char *mode) { + FILE *f; #ifdef MS_WINDOWS wchar_t *wpath; wchar_t wmode[10]; @@ -602,16 +843,21 @@ _Py_fopen(PyObject *path, const char *mode) if (usize == 0) return NULL; - return _wfopen(wpath, wmode); + f = _wfopen(wpath, wmode); #else - FILE *f; PyObject *bytes; if (!PyUnicode_FSConverter(path, &bytes)) return NULL; f = fopen(PyBytes_AS_STRING(bytes), mode); Py_DECREF(bytes); - return f; #endif + if (f == NULL) + return NULL; + if (make_non_inheritable(fileno(f)) < 0) { + fclose(f); + return NULL; + } + return f; } #ifdef HAVE_READLINK @@ -648,12 +894,12 @@ _Py_wreadlink(const wchar_t *path, wchar_t *buf, size_t bufsiz) return -1; } if (bufsiz <= r1) { - PyMem_Free(wbuf); + PyMem_RawFree(wbuf); errno = EINVAL; return -1; } wcsncpy(buf, wbuf, bufsiz); - PyMem_Free(wbuf); + PyMem_RawFree(wbuf); return (int)r1; } #endif @@ -689,12 +935,12 @@ _Py_wrealpath(const wchar_t *path, return NULL; } if (resolved_path_size <= r) { - PyMem_Free(wresolved_path); + PyMem_RawFree(wresolved_path); errno = EINVAL; return NULL; } wcsncpy(resolved_path, wresolved_path, resolved_path_size); - PyMem_Free(wresolved_path); + PyMem_RawFree(wresolved_path); return resolved_path; } #endif @@ -707,7 +953,8 @@ wchar_t* _Py_wgetcwd(wchar_t *buf, size_t size) { #ifdef MS_WINDOWS - return _wgetcwd(buf, size); + int isize = (int)Py_MIN(size, INT_MAX); + return _wgetcwd(buf, isize); #else char fname[PATH_MAX]; wchar_t *wname; @@ -719,12 +966,81 @@ _Py_wgetcwd(wchar_t *buf, size_t size) if (wname == NULL) return NULL; if (size <= len) { - PyMem_Free(wname); + PyMem_RawFree(wname); return NULL; } wcsncpy(buf, wname, size); - PyMem_Free(wname); + PyMem_RawFree(wname); return buf; #endif } +/* Duplicate a file descriptor. The new file descriptor is created as + non-inheritable. Return a new file descriptor on success, raise an OSError + exception and return -1 on error. + + The GIL is released to call dup(). The caller must hold the GIL. */ +int +_Py_dup(int fd) +{ +#ifdef MS_WINDOWS + HANDLE handle; + DWORD ftype; +#endif + + if (!_PyVerify_fd(fd)) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + +#ifdef MS_WINDOWS + handle = (HANDLE)_get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) { + PyErr_SetFromWindowsErr(0); + return -1; + } + + /* get the file type, ignore the error if it failed */ + ftype = GetFileType(handle); + + Py_BEGIN_ALLOW_THREADS + fd = dup(fd); + Py_END_ALLOW_THREADS + if (fd < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + /* Character files like console cannot be make non-inheritable */ + if (ftype != FILE_TYPE_CHAR) { + if (_Py_set_inheritable(fd, 0, NULL) < 0) { + close(fd); + return -1; + } + } +#elif defined(HAVE_FCNTL_H) && defined(F_DUPFD_CLOEXEC) + Py_BEGIN_ALLOW_THREADS + fd = fcntl(fd, F_DUPFD_CLOEXEC, 0); + Py_END_ALLOW_THREADS + if (fd < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + +#else + Py_BEGIN_ALLOW_THREADS + fd = dup(fd); + Py_END_ALLOW_THREADS + if (fd < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + if (_Py_set_inheritable(fd, 0, NULL) < 0) { + close(fd); + return -1; + } +#endif + return fd; +} + diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index a6516dc..e68087f 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -315,7 +315,7 @@ calc_padding(Py_ssize_t nchars, Py_ssize_t width, Py_UCS4 align, /* Do the padding, and return a pointer to where the caller-supplied content goes. */ -static Py_ssize_t +static int fill_padding(_PyUnicodeWriter *writer, Py_ssize_t nchars, Py_UCS4 fill_char, Py_ssize_t n_lpadding, @@ -556,7 +556,7 @@ fill_number(_PyUnicodeWriter *writer, const NumberFieldWidths *spec, { /* Used to keep track of digits, decimal, and remainder. */ Py_ssize_t d_pos = d_start; - const enum PyUnicode_Kind kind = writer->kind; + const unsigned int kind = writer->kind; const void *data = writer->data; Py_ssize_t r; @@ -757,7 +757,8 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format, goto done; } - if (format->width == -1 && format->precision == -1) { + if ((format->width == -1 || format->width <= len) + && (format->precision == -1 || format->precision >= len)) { /* Fast path */ return _PyUnicodeWriter_WriteStr(writer, value); } @@ -770,9 +771,13 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format, calc_padding(len, format->width, format->align, &lpad, &rpad, &total); - maxchar = _PyUnicode_FindMaxChar(value, 0, len); + maxchar = writer->maxchar; if (lpad != 0 || rpad != 0) maxchar = Py_MAX(maxchar, format->fill_char); + if (PyUnicode_MAX_CHAR_VALUE(value) > maxchar) { + Py_UCS4 valmaxchar = _PyUnicode_FindMaxChar(value, 0, len); + maxchar = Py_MAX(maxchar, valmaxchar); + } /* allocate the resulting string */ if (_PyUnicodeWriter_Prepare(writer, total, maxchar) == -1) @@ -977,8 +982,7 @@ format_float_internal(PyObject *value, Py_ssize_t n_total; int has_decimal; double val; - Py_ssize_t precision; - Py_ssize_t default_precision = 6; + int precision, default_precision = 6; Py_UCS4 type = format->type; int add_pct = 0; Py_ssize_t index; @@ -1133,8 +1137,7 @@ format_complex_internal(PyObject *value, Py_ssize_t n_im_total; int re_has_decimal; int im_has_decimal; - int precision; - Py_ssize_t default_precision = 6; + int precision, default_precision = 6; Py_UCS4 type = format->type; Py_ssize_t i_re; Py_ssize_t i_im; diff --git a/Python/frozen.c b/Python/frozen.c index 25fdc17..9bc662b 100644 --- a/Python/frozen.c +++ b/Python/frozen.c @@ -28,7 +28,7 @@ static unsigned char M___hello__[] = { #define SIZE (int)sizeof(M___hello__) -static struct _frozen _PyImport_FrozenModules[] = { +static const struct _frozen _PyImport_FrozenModules[] = { /* importlib */ {"_frozen_importlib", _Py_M__importlib, (int)sizeof(_Py_M__importlib)}, /* Test module */ @@ -42,4 +42,4 @@ static struct _frozen _PyImport_FrozenModules[] = { /* Embedding apps may change this pointer to point to their favorite collection of frozen modules: */ -struct _frozen *PyImport_FrozenModules = _PyImport_FrozenModules; +const struct _frozen *PyImport_FrozenModules = _PyImport_FrozenModules; diff --git a/Python/frozenmain.c b/Python/frozenmain.c index 8b1f2d4..55d05fc 100644 --- a/Python/frozenmain.c +++ b/Python/frozenmain.c @@ -16,19 +16,19 @@ int Py_FrozenMain(int argc, char **argv) { char *p; - int i, n, sts; + int i, n, sts = 1; int inspect = 0; int unbuffered = 0; - char *oldloc; - wchar_t **argv_copy; + char *oldloc = NULL; + wchar_t **argv_copy = NULL; /* We need a second copies, as Python might modify the first one. */ - wchar_t **argv_copy2; + wchar_t **argv_copy2 = NULL; - argv_copy = PyMem_Malloc(sizeof(wchar_t*)*argc); - argv_copy2 = PyMem_Malloc(sizeof(wchar_t*)*argc); + argv_copy = PyMem_RawMalloc(sizeof(wchar_t*) * argc); + argv_copy2 = PyMem_RawMalloc(sizeof(wchar_t*) * argc); if (!argv_copy || !argv_copy2) { fprintf(stderr, "out of memory\n"); - return 1; + goto error; } Py_FrozenFlag = 1; /* Suppress errors from getpath.c */ @@ -44,32 +44,26 @@ Py_FrozenMain(int argc, char **argv) setbuf(stderr, (char *)NULL); } - oldloc = setlocale(LC_ALL, NULL); + oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL)); + if (!oldloc) { + fprintf(stderr, "out of memory\n"); + goto error; + } + setlocale(LC_ALL, ""); for (i = 0; i < argc; i++) { -#ifdef HAVE_BROKEN_MBSTOWCS - size_t argsize = strlen(argv[i]); -#else - size_t argsize = mbstowcs(NULL, argv[i], 0); -#endif - size_t count; - if (argsize == (size_t)-1) { - fprintf(stderr, "Could not convert argument %d to string\n", i); - return 1; - } - argv_copy[i] = PyMem_Malloc((argsize+1)*sizeof(wchar_t)); + argv_copy[i] = _Py_char2wchar(argv[i], NULL); argv_copy2[i] = argv_copy[i]; if (!argv_copy[i]) { - fprintf(stderr, "out of memory\n"); - return 1; - } - count = mbstowcs(argv_copy[i], argv[i], argsize+1); - if (count == (size_t)-1) { - fprintf(stderr, "Could not convert argument %d to string\n", i); - return 1; + fprintf(stderr, "Unable to decode the command line argument #%i\n", + i + 1); + argc = i; + goto error; } } setlocale(LC_ALL, oldloc); + PyMem_RawFree(oldloc); + oldloc = NULL; #ifdef MS_WINDOWS PyInitFrozenExtensions(); @@ -103,10 +97,14 @@ Py_FrozenMain(int argc, char **argv) PyWinFreeze_ExeTerm(); #endif Py_Finalize(); - for (i = 0; i < argc; i++) { - PyMem_Free(argv_copy2[i]); + +error: + PyMem_RawFree(argv_copy); + if (argv_copy2) { + for (i = 0; i < argc; i++) + PyMem_RawFree(argv_copy2[i]); + PyMem_RawFree(argv_copy2); } - PyMem_Free(argv_copy); - PyMem_Free(argv_copy2); + PyMem_RawFree(oldloc); return sts; } diff --git a/Python/future.c b/Python/future.c index d24ae41..81eab54 100644 --- a/Python/future.c +++ b/Python/future.c @@ -11,7 +11,7 @@ "from __future__ imports must occur at the beginning of the file" static int -future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) +future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename) { int i; asdl_seq *names; @@ -43,12 +43,12 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance"); - PyErr_SyntaxLocationEx(filename, s->lineno, s->col_offset); + PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); return 0; } else { PyErr_Format(PyExc_SyntaxError, UNDEFINED_FUTURE_FEATURE, feature); - PyErr_SyntaxLocationEx(filename, s->lineno, s->col_offset); + PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); return 0; } } @@ -56,13 +56,17 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) } static int -future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) +future_parse(PyFutureFeatures *ff, mod_ty mod, PyObject *filename) { - int i, found_docstring = 0, done = 0, prev_line = 0; + int i, done = 0, prev_line = 0; + stmt_ty first; if (!(mod->kind == Module_kind || mod->kind == Interactive_kind)) return 1; + if (asdl_seq_LEN(mod->v.Module.body) == 0) + return 1; + /* A subsequent pass will detect future imports that don't appear at the beginning of the file. There's one case, however, that is easier to handle here: A series of imports @@ -71,8 +75,13 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) but is preceded by a regular import. */ + i = 0; + first = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); + if (first->kind == Expr_kind && first->v.Expr.value->kind == Str_kind) + i++; - for (i = 0; i < asdl_seq_LEN(mod->v.Module.body); i++) { + + for (; i < asdl_seq_LEN(mod->v.Module.body); i++) { stmt_ty s = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); if (done && s->lineno > prev_line) @@ -92,32 +101,27 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) if (done) { PyErr_SetString(PyExc_SyntaxError, ERR_LATE_FUTURE); - PyErr_SyntaxLocationEx(filename, s->lineno, s->col_offset); + PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); return 0; } if (!future_check_features(ff, s, filename)) return 0; ff->ff_lineno = s->lineno; } - else - done = 1; - } - else if (s->kind == Expr_kind && !found_docstring) { - expr_ty e = s->v.Expr.value; - if (e->kind != Str_kind) + else { done = 1; - else - found_docstring = 1; + } } - else + else { done = 1; + } } return 1; } PyFutureFeatures * -PyFuture_FromAST(mod_ty mod, const char *filename) +PyFuture_FromASTObject(mod_ty mod, PyObject *filename) { PyFutureFeatures *ff; @@ -135,3 +139,18 @@ PyFuture_FromAST(mod_ty mod, const char *filename) } return ff; } + + +PyFutureFeatures * +PyFuture_FromAST(mod_ty mod, const char *filename_str) +{ + PyFutureFeatures *ff; + PyObject *filename; + + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + ff = PyFuture_FromASTObject(mod, filename); + Py_DECREF(filename); + return ff; +} diff --git a/Python/getargs.c b/Python/getargs.c index ae931b9..9d72752 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -46,14 +46,16 @@ typedef struct { } freelistentry_t; typedef struct { - int first_available; freelistentry_t *entries; + int first_available; + int entries_malloced; } freelist_t; +#define STATIC_FREELIST_ENTRIES 8 /* Forward */ static int vgetargs1(PyObject *, const char *, va_list *, int); -static void seterror(int, const char *, int *, const char *, const char *); +static void seterror(Py_ssize_t, const char *, int *, const char *, const char *); static char *convertitem(PyObject *, const char **, va_list *, int, int *, char *, size_t, freelist_t *); static char *converttuple(PyObject *, const char **, va_list *, int, @@ -187,7 +189,8 @@ cleanreturn(int retval, freelist_t *freelist) freelist->entries[index].item); } } - PyMem_FREE(freelist->entries); + if (freelist->entries_malloced) + PyMem_FREE(freelist->entries); return retval; } @@ -197,6 +200,8 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) { char msgbuf[256]; int levels[32]; + freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; + freelist_t freelist = {static_entries, 0, 0}; const char *fname = NULL; const char *message = NULL; int min = -1; @@ -206,7 +211,6 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) const char *formatsave = format; Py_ssize_t i, len; char *msg; - freelist_t freelist = {0, NULL}; int compat = flags & FLAG_COMPAT; assert(compat || (args != (PyObject*)NULL)); @@ -240,15 +244,15 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) message = format; endfmt = 1; break; + case '|': + if (level == 0) + min = max; + break; default: if (level == 0) { - if (c == 'O') - max++; - else if (Py_ISALPHA(Py_CHARMASK(c))) { + if (Py_ISALPHA(Py_CHARMASK(c))) if (c != 'e') /* skip encoded */ max++; - } else if (c == '|') - min = max; } break; } @@ -262,10 +266,13 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) format = formatsave; - freelist.entries = PyMem_NEW(freelistentry_t, max); - if (freelist.entries == NULL) { - PyErr_NoMemory(); - return 0; + if (max > STATIC_FREELIST_ENTRIES) { + freelist.entries = PyMem_NEW(freelistentry_t, max); + if (freelist.entries == NULL) { + PyErr_NoMemory(); + return 0; + } + freelist.entries_malloced = 1; } if (compat) { @@ -350,7 +357,7 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) static void -seterror(int iarg, const char *msg, int *levels, const char *fname, +seterror(Py_ssize_t iarg, const char *msg, int *levels, const char *fname, const char *message) { char buf[512]; @@ -366,10 +373,10 @@ seterror(int iarg, const char *msg, int *levels, const char *fname, } if (iarg != 0) { PyOS_snprintf(p, sizeof(buf) - (p - buf), - "argument %d", iarg); + "argument %" PY_FORMAT_SIZE_T "d", iarg); i = 0; p += strlen(p); - while (levels[i] > 0 && i < 32 && (int)(p-buf) < 220) { + while (i < 32 && levels[i] > 0 && (int)(p-buf) < 220) { PyOS_snprintf(p, sizeof(buf) - (p - buf), ", item %d", levels[i]-1); p += strlen(p); @@ -563,7 +570,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, "size does not fit in an int"); \ return converterr("", arg, msgbuf, bufsize); \ } \ - *q=s; \ + *q = (int)s; \ } #define BUFFER_LEN ((flags & FLAG_SIZE_T) ? *q2:*q) #define RETURN_ERR_OCCURRED return msgbuf @@ -1421,7 +1428,8 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, int max = INT_MAX; int i, len, nargs, nkeywords; PyObject *current_arg; - freelist_t freelist = {0, NULL}; + freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; + freelist_t freelist = {static_entries, 0, 0}; assert(args != NULL && PyTuple_Check(args)); assert(keywords == NULL || PyDict_Check(keywords)); @@ -1445,10 +1453,13 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, for (len=0; kwlist[len]; len++) continue; - freelist.entries = PyMem_NEW(freelistentry_t, len); - if (freelist.entries == NULL) { - PyErr_NoMemory(); - return 0; + if (len > STATIC_FREELIST_ENTRIES) { + freelist.entries = PyMem_NEW(freelistentry_t, len); + if (freelist.entries == NULL) { + PyErr_NoMemory(); + return 0; + } + freelist.entries_malloced = 1; } nargs = PyTuple_GET_SIZE(args); @@ -1574,20 +1585,16 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, Py_ssize_t pos = 0; while (PyDict_Next(keywords, &pos, &key, &value)) { int match = 0; - char *ks; if (!PyUnicode_Check(key)) { PyErr_SetString(PyExc_TypeError, "keywords must be strings"); return cleanreturn(0, &freelist); } /* check that _PyUnicode_AsString() result is not NULL */ - ks = _PyUnicode_AsString(key); - if (ks != NULL) { - for (i = 0; i < len; i++) { - if (!strcmp(ks, kwlist[i])) { - match = 1; - break; - } + for (i = 0; i < len; i++) { + if (!PyUnicode_CompareWithASCIIString(key, kwlist[i])) { + match = 1; + break; } } if (!match) { diff --git a/Python/getcwd.c b/Python/getcwd.c deleted file mode 100644 index 4bedbd1..0000000 --- a/Python/getcwd.c +++ /dev/null @@ -1,83 +0,0 @@ - -/* Two PD getcwd() implementations. - Author: Guido van Rossum, CWI Amsterdam, Jan 1991, <guido@cwi.nl>. */ - -#include <stdio.h> -#include <errno.h> - -#ifdef HAVE_GETWD - -/* Version for BSD systems -- use getwd() */ - -#ifdef HAVE_SYS_PARAM_H -#include <sys/param.h> -#endif - -#ifndef MAXPATHLEN -#if defined(PATH_MAX) && PATH_MAX > 1024 -#define MAXPATHLEN PATH_MAX -#else -#define MAXPATHLEN 1024 -#endif -#endif - -extern char *getwd(char *); - -char * -getcwd(char *buf, int size) -{ - char localbuf[MAXPATHLEN+1]; - char *ret; - - if (size <= 0) { - errno = EINVAL; - return NULL; - } - ret = getwd(localbuf); - if (ret != NULL && strlen(localbuf) >= (size_t)size) { - errno = ERANGE; - return NULL; - } - if (ret == NULL) { - errno = EACCES; /* Most likely error */ - return NULL; - } - strncpy(buf, localbuf, size); - return buf; -} - -#else /* !HAVE_GETWD */ - -/* Version for really old UNIX systems -- use pipe from pwd */ - -#ifndef PWD_CMD -#define PWD_CMD "/bin/pwd" -#endif - -char * -getcwd(char *buf, int size) -{ - FILE *fp; - char *p; - int sts; - if (size <= 0) { - errno = EINVAL; - return NULL; - } - if ((fp = popen(PWD_CMD, "r")) == NULL) - return NULL; - if (fgets(buf, size, fp) == NULL || (sts = pclose(fp)) != 0) { - errno = EACCES; /* Most likely error */ - return NULL; - } - for (p = buf; *p != '\n'; p++) { - if (*p == '\0') { - errno = ERANGE; - return NULL; - } - } - *p = '\0'; - return buf; -} - -#endif /* !HAVE_GETWD */ diff --git a/Python/import.c b/Python/import.c index e91cef8..c96106f 100644 --- a/Python/import.c +++ b/Python/import.c @@ -19,22 +19,11 @@ extern "C" { #endif -#ifdef MS_WINDOWS -/* for stat.st_mode */ -typedef unsigned short mode_t; -/* for _mkdir */ -#include <direct.h> -#endif - - #define CACHEDIR "__pycache__" /* See _PyImport_FixupExtensionObject() below */ static PyObject *extensions = NULL; -/* Function from Parser/tokenizer.c */ -extern char * PyTokenizer_FindEncodingFilename(int, PyObject *); - /* This table is defined in config.c: */ extern struct _inittab _PyImport_Inittab[]; @@ -93,8 +82,10 @@ _PyImportZip_Init(void) int err = 0; path_hooks = PySys_GetObject("path_hooks"); - if (path_hooks == NULL) + if (path_hooks == NULL) { + PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path_hooks"); goto error; + } if (Py_VerboseFlag) PySys_WriteStderr("# installing zipimport hook\n"); @@ -204,8 +195,11 @@ _PyImport_ReInitLock(void) if (import_lock_level > 1) { /* Forked as a side effect of import */ long me = PyThread_get_thread_ident(); - PyThread_acquire_lock(import_lock, 0); - /* XXX: can the previous line fail? */ + /* The following could fail if the lock is already held, but forking as + a side-effect of an import is a) rare, b) nuts, and c) difficult to + do thanks to the lock only being held when doing individual module + locks per import. */ + PyThread_acquire_lock(import_lock, NOWAIT_LOCK); import_lock_thread = me; import_lock_level--; } else { @@ -280,6 +274,7 @@ static char* sys_deletes[] = { "path", "argv", "ps1", "ps2", "last_type", "last_value", "last_traceback", "path_hooks", "path_importer_cache", "meta_path", + "__interactivehook__", /* misc stuff */ "flags", "float_info", NULL @@ -292,16 +287,17 @@ static char* sys_files[] = { NULL }; - /* Un-initialize things, as good as we can */ void PyImport_Cleanup(void) { - Py_ssize_t pos, ndone; + Py_ssize_t pos; PyObject *key, *value, *dict; PyInterpreterState *interp = PyThreadState_GET()->interp; PyObject *modules = interp->modules; + PyObject *builtins = interp->builtins; + PyObject *weaklist = NULL; if (modules == NULL) return; /* Already done */ @@ -312,6 +308,8 @@ PyImport_Cleanup(void) deleted *last* of all, they would come too late in the normal destruction order. Sigh. */ + /* XXX Perhaps these precautions are obsolete. Who knows? */ + value = PyDict_GetItemString(modules, "builtins"); if (value != NULL && PyModule_Check(value)) { dict = PyModule_GetDict(value); @@ -339,87 +337,87 @@ PyImport_Cleanup(void) } } - /* First, delete __main__ */ - value = PyDict_GetItemString(modules, "__main__"); - if (value != NULL && PyModule_Check(value)) { - if (Py_VerboseFlag) - PySys_WriteStderr("# cleanup __main__\n"); - _PyModule_Clear(value); - PyDict_SetItemString(modules, "__main__", Py_None); - } - - /* The special treatment of "builtins" here is because even - when it's not referenced as a module, its dictionary is - referenced by almost every module's __builtins__. Since - deleting a module clears its dictionary (even if there are - references left to it), we need to delete the "builtins" - module last. Likewise, we don't delete sys until the very - end because it is implicitly referenced (e.g. by print). - - Also note that we 'delete' modules by replacing their entry - in the modules dict with None, rather than really deleting - them; this avoids a rehash of the modules dictionary and - also marks them as "non existent" so they won't be - re-imported. */ - - /* Next, repeatedly delete modules with a reference count of - one (skipping builtins and sys) and delete them */ - do { - ndone = 0; - pos = 0; - while (PyDict_Next(modules, &pos, &key, &value)) { - if (value->ob_refcnt != 1) - continue; - if (PyUnicode_Check(key) && PyModule_Check(value)) { - if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0) - continue; - if (PyUnicode_CompareWithASCIIString(key, "sys") == 0) - continue; - if (Py_VerboseFlag) - PySys_FormatStderr( - "# cleanup[1] %U\n", key); - _PyModule_Clear(value); - PyDict_SetItem(modules, key, Py_None); - ndone++; - } - } - } while (ndone > 0); + /* We prepare a list which will receive (name, weakref) tuples of + modules when they are removed from sys.modules. The name is used + for diagnosis messages (in verbose mode), while the weakref helps + detect those modules which have been held alive. */ + weaklist = PyList_New(0); + if (weaklist == NULL) + PyErr_Clear(); - /* Next, delete all modules (still skipping builtins and sys) */ +#define STORE_MODULE_WEAKREF(name, mod) \ + if (weaklist != NULL) { \ + PyObject *wr = PyWeakref_NewRef(mod, NULL); \ + if (name && wr) { \ + PyObject *tup = PyTuple_Pack(2, name, wr); \ + PyList_Append(weaklist, tup); \ + Py_XDECREF(tup); \ + } \ + Py_XDECREF(wr); \ + if (PyErr_Occurred()) \ + PyErr_Clear(); \ + } + + /* Remove all modules from sys.modules, hoping that garbage collection + can reclaim most of them. */ pos = 0; while (PyDict_Next(modules, &pos, &key, &value)) { - if (PyUnicode_Check(key) && PyModule_Check(value)) { - if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0) - continue; - if (PyUnicode_CompareWithASCIIString(key, "sys") == 0) - continue; - if (Py_VerboseFlag) - PySys_FormatStderr("# cleanup[2] %U\n", key); - _PyModule_Clear(value); + if (PyModule_Check(value)) { + if (Py_VerboseFlag && PyUnicode_Check(key)) + PySys_FormatStderr("# cleanup[2] removing %U\n", key, value); + STORE_MODULE_WEAKREF(key, value); PyDict_SetItem(modules, key, Py_None); } } - /* Next, delete sys and builtins (in that order) */ - value = PyDict_GetItemString(modules, "sys"); - if (value != NULL && PyModule_Check(value)) { - if (Py_VerboseFlag) - PySys_WriteStderr("# cleanup sys\n"); - _PyModule_Clear(value); - PyDict_SetItemString(modules, "sys", Py_None); - } - value = PyDict_GetItemString(modules, "builtins"); - if (value != NULL && PyModule_Check(value)) { - if (Py_VerboseFlag) - PySys_WriteStderr("# cleanup builtins\n"); - _PyModule_Clear(value); - PyDict_SetItemString(modules, "builtins", Py_None); + /* Clear the modules dict. */ + PyDict_Clear(modules); + /* Replace the interpreter's reference to builtins with an empty dict + (module globals still have a reference to the original builtins). */ + builtins = interp->builtins; + interp->builtins = PyDict_New(); + Py_DECREF(builtins); + /* Clear module dict copies stored in the interpreter state */ + _PyState_ClearModules(); + /* Collect references */ + _PyGC_CollectNoFail(); + /* Dump GC stats before it's too late, since it uses the warnings + machinery. */ + _PyGC_DumpShutdownStats(); + + /* Now, if there are any modules left alive, clear their globals to + minimize potential leaks. All C extension modules actually end + up here, since they are kept alive in the interpreter state. */ + if (weaklist != NULL) { + Py_ssize_t i, n; + n = PyList_GET_SIZE(weaklist); + for (i = 0; i < n; i++) { + PyObject *tup = PyList_GET_ITEM(weaklist, i); + PyObject *name = PyTuple_GET_ITEM(tup, 0); + PyObject *mod = PyWeakref_GET_OBJECT(PyTuple_GET_ITEM(tup, 1)); + if (mod == Py_None) + continue; + Py_INCREF(mod); + assert(PyModule_Check(mod)); + if (Py_VerboseFlag && PyUnicode_Check(name)) + PySys_FormatStderr("# cleanup[3] wiping %U\n", + name, mod); + _PyModule_Clear(mod); + Py_DECREF(mod); + } + Py_DECREF(weaklist); } - /* Finally, clear and delete the modules directory */ - PyDict_Clear(modules); + /* Clear and delete the modules directory. Actual modules will + still be there only if imported during the execution of some + destructor. */ interp->modules = NULL; Py_DECREF(modules); + + /* Once more */ + _PyGC_CollectNoFail(); + +#undef STORE_MODULE_WEAKREF } @@ -451,12 +449,12 @@ PyImport_GetMagicTag(void) /* Magic for extension modules (built-in as well as dynamically loaded). To prevent initializing an extension module more than - once, we keep a static dictionary 'extensions' keyed by module name - (for built-in modules) or by filename (for dynamically loaded - modules), containing these modules. A copy of the module's - dictionary is stored by calling _PyImport_FixupExtensionObject() - immediately after the module initialization function succeeds. A - copy can be retrieved from there by calling + once, we keep a static dictionary 'extensions' keyed by the tuple + (module name, module name) (for built-in modules) or by + (filename, module name) (for dynamically loaded modules), containing these + modules. A copy of the module's dictionary is stored by calling + _PyImport_FixupExtensionObject() immediately after the module initialization + function succeeds. A copy can be retrieved from there by calling _PyImport_FindExtensionObject(). Modules which do support multiple initialization set their m_size @@ -469,8 +467,9 @@ int _PyImport_FixupExtensionObject(PyObject *mod, PyObject *name, PyObject *filename) { - PyObject *modules, *dict; + PyObject *modules, *dict, *key; struct PyModuleDef *def; + int res; if (extensions == NULL) { extensions = PyDict_New(); if (extensions == NULL) @@ -507,12 +506,18 @@ _PyImport_FixupExtensionObject(PyObject *mod, PyObject *name, if (def->m_base.m_copy == NULL) return -1; } - PyDict_SetItem(extensions, filename, (PyObject*)def); + key = PyTuple_Pack(2, filename, name); + if (key == NULL) + return -1; + res = PyDict_SetItem(extensions, key, (PyObject *)def); + Py_DECREF(key); + if (res < 0) + return -1; return 0; } int -_PyImport_FixupBuiltin(PyObject *mod, char *name) +_PyImport_FixupBuiltin(PyObject *mod, const char *name) { int res; PyObject *nameobj; @@ -527,11 +532,15 @@ _PyImport_FixupBuiltin(PyObject *mod, char *name) PyObject * _PyImport_FindExtensionObject(PyObject *name, PyObject *filename) { - PyObject *mod, *mdict; + PyObject *mod, *mdict, *key; PyModuleDef* def; if (extensions == NULL) return NULL; - def = (PyModuleDef*)PyDict_GetItem(extensions, filename); + key = PyTuple_Pack(2, filename, name); + if (key == NULL) + return NULL; + def = (PyModuleDef *)PyDict_GetItem(extensions, key); + Py_DECREF(key); if (def == NULL) return NULL; if (def->m_size == -1) { @@ -647,22 +656,23 @@ remove_module(PyObject *name) * interface. The other two exist primarily for backward compatibility. */ PyObject * -PyImport_ExecCodeModule(char *name, PyObject *co) +PyImport_ExecCodeModule(const char *name, PyObject *co) { return PyImport_ExecCodeModuleWithPathnames( name, co, (char *)NULL, (char *)NULL); } PyObject * -PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname) +PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname) { return PyImport_ExecCodeModuleWithPathnames( name, co, pathname, (char *)NULL); } PyObject * -PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname, - char *cpathname) +PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, + const char *pathname, + const char *cpathname) { PyObject *m = NULL; PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL; @@ -693,7 +703,7 @@ PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname, "no interpreter!"); } - pathobj = _PyObject_CallMethodObjIdArgs(interp->importlib, + pathobj = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__get_sourcefile, cpathobj, NULL); if (pathobj == NULL) @@ -835,7 +845,7 @@ imp_fix_co_filename(PyObject *self, PyObject *args) /* Forward */ -static struct _frozen * find_frozen(PyObject *); +static const struct _frozen * find_frozen(PyObject *); /* Helper to test for built-in module */ @@ -917,11 +927,11 @@ PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path) { PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL; - if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) { - if ((path_hooks = PySys_GetObject("path_hooks"))) { - importer = get_path_importer(path_importer_cache, - path_hooks, path); - } + path_importer_cache = PySys_GetObject("path_importer_cache"); + path_hooks = PySys_GetObject("path_hooks"); + if (path_importer_cache != NULL && path_hooks != NULL) { + importer = get_path_importer(path_importer_cache, + path_hooks, path); } Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */ return importer; @@ -972,10 +982,10 @@ init_builtin(PyObject *name) /* Frozen modules */ -static struct _frozen * +static const struct _frozen * find_frozen(PyObject *name) { - struct _frozen *p; + const struct _frozen *p; if (name == NULL) return NULL; @@ -992,7 +1002,7 @@ find_frozen(PyObject *name) static PyObject * get_frozen_object(PyObject *name) { - struct _frozen *p = find_frozen(name); + const struct _frozen *p = find_frozen(name); int size; if (p == NULL) { @@ -1010,13 +1020,13 @@ get_frozen_object(PyObject *name) size = p->size; if (size < 0) size = -size; - return PyMarshal_ReadObjectFromString((char *)p->code, size); + return PyMarshal_ReadObjectFromString((const char *)p->code, size); } static PyObject * is_frozen_package(PyObject *name) { - struct _frozen *p = find_frozen(name); + const struct _frozen *p = find_frozen(name); int size; if (p == NULL) { @@ -1043,7 +1053,7 @@ is_frozen_package(PyObject *name) int PyImport_ImportFrozenModuleObject(PyObject *name) { - struct _frozen *p; + const struct _frozen *p; PyObject *co, *m, *path; int ispackage; int size; @@ -1062,7 +1072,7 @@ PyImport_ImportFrozenModuleObject(PyObject *name) ispackage = (size < 0); if (ispackage) size = -size; - co = PyMarshal_ReadObjectFromString((char *)p->code, size); + co = PyMarshal_ReadObjectFromString((const char *)p->code, size); if (co == NULL) return -1; if (!PyCode_Check(co)) { @@ -1072,19 +1082,17 @@ PyImport_ImportFrozenModuleObject(PyObject *name) goto err_return; } if (ispackage) { - /* Set __path__ to the package name */ + /* Set __path__ to the empty list */ PyObject *d, *l; int err; m = PyImport_AddModuleObject(name); if (m == NULL) goto err_return; d = PyModule_GetDict(m); - l = PyList_New(1); + l = PyList_New(0); if (l == NULL) { goto err_return; } - Py_INCREF(name); - PyList_SET_ITEM(l, 0, name); err = PyDict_SetItemString(d, "__path__", l); Py_DECREF(l); if (err != 0) @@ -1106,7 +1114,7 @@ err_return: } int -PyImport_ImportFrozenModule(char *name) +PyImport_ImportFrozenModule(const char *name) { PyObject *nameobj; int ret; @@ -1430,7 +1438,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } if (initializing > 0) { /* _bootstrap._lock_unlock_module() releases the import lock */ - value = _PyObject_CallMethodObjIdArgs(interp->importlib, + value = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__lock_unlock_module, abs_name, NULL); if (value == NULL) @@ -1448,7 +1456,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } else { /* _bootstrap._find_and_load() releases the import lock */ - mod = _PyObject_CallMethodObjIdArgs(interp->importlib, + mod = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__find_and_load, abs_name, builtins_import, NULL); if (mod == NULL) { @@ -1517,7 +1525,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } } else { - final_mod = _PyObject_CallMethodObjIdArgs(interp->importlib, + final_mod = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__handle_fromlist, mod, fromlist, builtins_import, NULL); @@ -1771,7 +1779,7 @@ static PyObject * imp_is_frozen(PyObject *self, PyObject *args) { PyObject *name; - struct _frozen *p; + const struct _frozen *p; if (!PyArg_ParseTuple(args, "U:is_frozen", &name)) return NULL; p = find_frozen(name); @@ -1790,7 +1798,7 @@ imp_load_dynamic(PyObject *self, PyObject *args) &name, PyUnicode_FSDecoder, &pathname, &fob)) return NULL; if (fob != NULL) { - fp = _Py_fopen(pathname, "r"); + fp = _Py_fopen_obj(pathname, "r"); if (fp == NULL) { Py_DECREF(pathname); if (!PyErr_Occurred()) diff --git a/Python/importdl.c b/Python/importdl.c index 0ea954c..b60f1c7 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -77,6 +77,8 @@ _PyImport_LoadDynamicModule(PyObject *name, PyObject *path, FILE *fp) PyObject *msg = PyUnicode_FromFormat("dynamic module does not define " "init function (PyInit_%s)", shortname); + if (msg == NULL) + goto error; PyErr_SetImportError(msg, name, path); Py_DECREF(msg); goto error; diff --git a/Python/importdl.h b/Python/importdl.h index 6b9cf75..6a51a91 100644 --- a/Python/importdl.h +++ b/Python/importdl.h @@ -18,13 +18,8 @@ extern PyObject *_PyImport_LoadDynamicModule(PyObject *name, PyObject *pathname, #include <windows.h> typedef FARPROC dl_funcptr; #else -#if defined(PYOS_OS2) && !defined(PYCC_GCC) -#include <os2def.h> -typedef int (* APIENTRY dl_funcptr)(); -#else typedef void (*dl_funcptr)(void); #endif -#endif #ifdef __cplusplus diff --git a/Python/importlib.h b/Python/importlib.h index cb6afc5..40e204c 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1,8 +1,8 @@ /* Auto-generated by Modules/_freeze_importlib.c */ -unsigned char _Py_M__importlib[] = { +const unsigned char _Py_M__importlib[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,64,0,0,0,115,206,3,0,0,100,0,0,90,0,0, - 100,131,0,90,1,0,100,4,0,100,5,0,132,0,0,90, + 0,64,0,0,0,115,72,4,0,0,100,0,0,90,0,0, + 100,145,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, @@ -11,457 +11,356 @@ unsigned char _Py_M__importlib[] = { 132,0,0,90,9,0,100,20,0,100,21,0,100,22,0,132, 1,0,90,10,0,100,23,0,100,24,0,132,0,0,90,11, 0,101,12,0,101,11,0,106,13,0,131,1,0,90,14,0, - 100,25,0,100,26,0,132,0,0,90,15,0,105,0,0,90, - 16,0,105,0,0,90,17,0,71,100,27,0,100,28,0,132, - 0,0,100,28,0,101,18,0,131,3,0,90,19,0,71,100, - 29,0,100,30,0,132,0,0,100,30,0,131,2,0,90,20, - 0,71,100,31,0,100,32,0,132,0,0,100,32,0,131,2, + 105,0,0,90,15,0,105,0,0,90,16,0,71,100,25,0, + 100,26,0,132,0,0,100,26,0,101,17,0,131,3,0,90, + 18,0,71,100,27,0,100,28,0,132,0,0,100,28,0,131, + 2,0,90,19,0,71,100,29,0,100,30,0,132,0,0,100, + 30,0,131,2,0,90,20,0,100,31,0,100,32,0,132,0, 0,90,21,0,100,33,0,100,34,0,132,0,0,90,22,0, - 100,35,0,100,36,0,132,0,0,90,23,0,100,37,0,100, - 38,0,132,0,0,90,24,0,100,39,0,101,25,0,100,40, - 0,131,1,0,100,41,0,62,66,101,25,0,100,42,0,131, - 1,0,100,43,0,62,66,90,26,0,101,27,0,100,44,0, - 100,45,0,132,0,0,101,28,0,100,46,0,100,47,0,100, - 48,0,131,3,0,68,131,1,0,131,1,0,90,29,0,100, - 49,0,90,30,0,100,50,0,103,1,0,90,31,0,100,51, - 0,103,1,0,90,32,0,100,52,0,103,1,0,90,33,0, - 100,130,0,100,53,0,100,54,0,132,1,0,90,35,0,100, - 55,0,100,56,0,132,0,0,90,36,0,100,57,0,100,58, - 0,132,0,0,90,37,0,100,59,0,100,60,0,100,61,0, - 100,62,0,132,0,1,90,38,0,100,63,0,100,64,0,132, - 0,0,90,39,0,100,65,0,100,66,0,132,0,0,90,40, - 0,100,67,0,100,68,0,132,0,0,90,41,0,100,69,0, - 100,70,0,132,0,0,90,42,0,100,71,0,100,72,0,132, - 0,0,90,43,0,100,73,0,100,74,0,132,0,0,90,44, - 0,100,75,0,100,76,0,132,0,0,90,45,0,71,100,77, - 0,100,78,0,132,0,0,100,78,0,131,2,0,90,46,0, - 71,100,79,0,100,80,0,132,0,0,100,80,0,131,2,0, - 90,47,0,71,100,81,0,100,82,0,132,0,0,100,82,0, - 131,2,0,90,48,0,71,100,83,0,100,84,0,132,0,0, - 100,84,0,131,2,0,90,49,0,71,100,85,0,100,86,0, - 132,0,0,100,86,0,101,49,0,131,3,0,90,50,0,71, - 100,87,0,100,88,0,132,0,0,100,88,0,131,2,0,90, - 51,0,71,100,89,0,100,90,0,132,0,0,100,90,0,101, - 51,0,101,50,0,131,4,0,90,52,0,71,100,91,0,100, - 92,0,132,0,0,100,92,0,101,51,0,101,49,0,131,4, - 0,90,53,0,103,0,0,90,54,0,71,100,93,0,100,94, - 0,132,0,0,100,94,0,131,2,0,90,55,0,71,100,95, - 0,100,96,0,132,0,0,100,96,0,131,2,0,90,56,0, - 71,100,97,0,100,98,0,132,0,0,100,98,0,131,2,0, - 90,57,0,71,100,99,0,100,100,0,132,0,0,100,100,0, - 131,2,0,90,58,0,71,100,101,0,100,102,0,132,0,0, - 100,102,0,131,2,0,90,59,0,71,100,103,0,100,104,0, - 132,0,0,100,104,0,131,2,0,90,60,0,100,105,0,100, - 106,0,132,0,0,90,61,0,100,107,0,100,108,0,132,0, - 0,90,62,0,100,109,0,100,110,0,132,0,0,90,63,0, - 100,111,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,130, - 0,100,46,0,100,116,0,100,117,0,132,2,0,90,67,0, - 100,118,0,100,119,0,132,0,0,90,68,0,100,120,0,100, - 121,0,132,0,0,90,69,0,100,122,0,100,123,0,132,0, - 0,90,70,0,100,130,0,100,130,0,102,0,0,100,46,0, - 100,124,0,100,125,0,132,4,0,90,71,0,100,126,0,100, - 127,0,132,0,0,90,72,0,100,128,0,100,129,0,132,0, - 0,90,73,0,100,130,0,83,40,132,0,0,0,117,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,117,3,0,0,0,119,105,110,117,6,0, - 0,0,99,121,103,119,105,110,117,6,0,0,0,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,40,4, - 0,0,0,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,40,2,0,0,0, - 117,53,0,0,0,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,40,2,0,0,0, - 117,3,0,0,0,95,111,115,117,7,0,0,0,101,110,118, - 105,114,111,110,40,0,0,0,0,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,11,0,0,0,95,114,101,108,97,120, - 95,99,97,115,101,34,0,0,0,115,2,0,0,0,0,2, - 117,37,0,0,0,95,109,97,107,101,95,114,101,108,97,120, + 100,35,0,100,36,0,132,0,0,90,23,0,100,37,0,106, + 24,0,100,38,0,100,39,0,131,2,0,100,40,0,23,90, + 25,0,101,26,0,106,27,0,101,25,0,100,39,0,131,2, + 0,90,28,0,100,41,0,90,29,0,100,42,0,103,1,0, + 90,30,0,100,43,0,103,1,0,90,31,0,100,44,0,103, + 1,0,90,32,0,100,45,0,100,46,0,100,47,0,132,1, + 0,90,33,0,100,48,0,100,49,0,132,0,0,90,34,0, + 100,50,0,100,51,0,132,0,0,90,35,0,100,52,0,100, + 53,0,132,0,0,90,36,0,100,54,0,100,55,0,100,56, + 0,100,57,0,132,0,1,90,37,0,71,100,58,0,100,59, + 0,132,0,0,100,59,0,131,2,0,90,38,0,71,100,60, + 0,100,61,0,132,0,0,100,61,0,101,38,0,131,3,0, + 90,39,0,100,62,0,100,63,0,100,64,0,100,65,0,132, + 0,1,90,40,0,100,66,0,100,67,0,132,0,0,90,41, + 0,100,68,0,100,69,0,132,0,0,90,42,0,100,70,0, + 100,71,0,132,0,0,90,43,0,100,72,0,100,73,0,132, + 0,0,90,44,0,100,74,0,100,75,0,132,0,0,90,45, + 0,100,76,0,100,77,0,132,0,0,90,46,0,100,78,0, + 100,79,0,132,0,0,90,47,0,100,80,0,100,81,0,132, + 0,0,90,48,0,100,45,0,100,45,0,100,45,0,100,82, + 0,100,83,0,132,3,0,90,49,0,100,45,0,100,45,0, + 100,45,0,100,84,0,100,85,0,132,3,0,90,50,0,100, + 86,0,100,86,0,100,87,0,100,88,0,132,2,0,90,51, + 0,100,89,0,100,90,0,132,0,0,90,52,0,71,100,91, + 0,100,92,0,132,0,0,100,92,0,131,2,0,90,53,0, + 71,100,93,0,100,94,0,132,0,0,100,94,0,131,2,0, + 90,54,0,71,100,95,0,100,96,0,132,0,0,100,96,0, + 131,2,0,90,55,0,71,100,97,0,100,98,0,132,0,0, + 100,98,0,131,2,0,90,56,0,71,100,99,0,100,100,0, + 132,0,0,100,100,0,101,56,0,131,3,0,90,57,0,71, + 100,101,0,100,102,0,132,0,0,100,102,0,131,2,0,90, + 58,0,71,100,103,0,100,104,0,132,0,0,100,104,0,101, + 58,0,101,57,0,131,4,0,90,59,0,71,100,105,0,100, + 106,0,132,0,0,100,106,0,101,58,0,101,56,0,131,4, + 0,90,60,0,103,0,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, + 131,2,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,131,2,0,90,67,0,100,119,0,100, + 120,0,132,0,0,90,68,0,100,121,0,100,122,0,132,0, + 0,90,69,0,100,123,0,100,124,0,132,0,0,90,70,0, + 100,125,0,90,71,0,101,71,0,100,126,0,23,90,72,0, + 100,127,0,100,128,0,132,0,0,90,73,0,100,129,0,100, + 130,0,132,0,0,90,74,0,100,45,0,100,86,0,100,131, + 0,100,132,0,132,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,137,0,100,138,0,132,0,0,90,78,0,100,45, + 0,100,45,0,102,0,0,100,86,0,100,139,0,100,140,0, + 132,4,0,90,79,0,100,141,0,100,142,0,132,0,0,90, + 80,0,100,143,0,100,144,0,132,0,0,90,81,0,100,45, + 0,83,41,146,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,40,2,0,0,0,117,53,0, - 0,0,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,40,1,0,0,0,117,5,0, - 0,0,70,97,108,115,101,40,0,0,0,0,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0,0,95,114,101, - 108,97,120,95,99,97,115,101,38,0,0,0,115,2,0,0, - 0,0,2,40,4,0,0,0,117,3,0,0,0,115,121,115, - 117,8,0,0,0,112,108,97,116,102,111,114,109,117,10,0, - 0,0,115,116,97,114,116,115,119,105,116,104,117,27,0,0, - 0,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,40,1,0,0, - 0,117,11,0,0,0,95,114,101,108,97,120,95,99,97,115, - 101,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, - 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,117,16,0, - 0,0,95,109,97,107,101,95,114,101,108,97,120,95,99,97, - 115,101,32,0,0,0,115,8,0,0,0,0,1,18,1,15, - 4,12,3,117,16,0,0,0,95,109,97,107,101,95,114,101, - 108,97,120,95,99,97,115,101,99,1,0,0,0,0,0,0, - 0,2,0,0,0,3,0,0,0,67,0,0,0,115,108,0, - 0,0,116,0,0,124,0,0,131,1,0,125,0,0,103,0, - 0,125,1,0,124,1,0,106,1,0,124,0,0,100,1,0, - 64,131,1,0,1,124,1,0,106,1,0,124,0,0,100,2, - 0,63,100,1,0,64,131,1,0,1,124,1,0,106,1,0, - 124,0,0,100,3,0,63,100,1,0,64,131,1,0,1,124, - 1,0,106,1,0,124,0,0,100,4,0,63,100,1,0,64, - 131,1,0,1,116,2,0,124,1,0,131,1,0,83,40,5, - 0,0,0,117,111,0,0,0,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,10,10,32,32,32,32,88,88,88,32,84,101,109,112, - 111,114,97,114,121,32,117,110,116,105,108,32,109,97,114,115, - 104,97,108,39,115,32,108,111,110,103,32,102,117,110,99,116, - 105,111,110,115,32,97,114,101,32,101,120,112,111,115,101,100, - 46,10,10,32,32,32,32,105,255,0,0,0,105,8,0,0, - 0,105,16,0,0,0,105,24,0,0,0,40,3,0,0,0, - 117,3,0,0,0,105,110,116,117,6,0,0,0,97,112,112, - 101,110,100,117,9,0,0,0,98,121,116,101,97,114,114,97, - 121,40,2,0,0,0,117,1,0,0,0,120,117,9,0,0, - 0,105,110,116,95,98,121,116,101,115,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,7,0,0,0,95,119,95,108,111, - 110,103,45,0,0,0,115,14,0,0,0,0,6,12,1,6, - 1,17,1,21,1,21,1,21,1,117,7,0,0,0,95,119, - 95,108,111,110,103,99,1,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,67,0,0,0,115,68,0,0,0,124, - 0,0,100,1,0,25,125,1,0,124,1,0,124,0,0,100, - 2,0,25,100,3,0,62,79,125,1,0,124,1,0,124,0, - 0,100,4,0,25,100,5,0,62,79,125,1,0,124,1,0, - 124,0,0,100,6,0,25,100,7,0,62,79,125,1,0,124, - 1,0,83,40,8,0,0,0,117,115,0,0,0,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,10,10,32,32, - 32,32,88,88,88,32,84,101,109,112,111,114,97,114,121,32, - 117,110,116,105,108,32,109,97,114,115,104,97,108,39,115,32, - 108,111,110,103,32,102,117,110,99,116,105,111,110,32,97,114, - 101,32,101,120,112,111,115,101,100,46,10,10,32,32,32,32, - 105,0,0,0,0,105,1,0,0,0,105,8,0,0,0,105, - 2,0,0,0,105,16,0,0,0,105,3,0,0,0,105,24, - 0,0,0,40,0,0,0,0,40,2,0,0,0,117,9,0, - 0,0,105,110,116,95,98,121,116,101,115,117,1,0,0,0, - 120,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, - 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,117,7,0, - 0,0,95,114,95,108,111,110,103,61,0,0,0,115,10,0, - 0,0,0,6,10,1,18,1,18,1,18,1,117,7,0,0, - 0,95,114,95,108,111,110,103,99,0,0,0,0,0,0,0, - 0,3,0,0,0,4,0,0,0,71,0,0,0,115,103,0, - 0,0,103,0,0,125,1,0,120,71,0,124,0,0,68,93, - 63,0,125,2,0,124,2,0,115,31,0,113,13,0,110,0, - 0,124,1,0,106,0,0,124,2,0,131,1,0,1,124,2, - 0,100,4,0,25,116,1,0,107,7,0,114,13,0,124,1, - 0,106,0,0,116,2,0,131,1,0,1,113,13,0,113,13, - 0,87,100,2,0,106,3,0,124,1,0,100,3,0,100,5, - 0,133,2,0,25,131,1,0,83,40,6,0,0,0,117,31, - 0,0,0,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,105,1,0,0,0,117,0,0,0,0,78,105,255,255, - 255,255,105,255,255,255,255,40,4,0,0,0,117,6,0,0, - 0,97,112,112,101,110,100,117,15,0,0,0,112,97,116,104, - 95,115,101,112,97,114,97,116,111,114,115,117,8,0,0,0, - 112,97,116,104,95,115,101,112,117,4,0,0,0,106,111,105, - 110,40,3,0,0,0,117,10,0,0,0,112,97,116,104,95, - 112,97,114,116,115,117,9,0,0,0,110,101,119,95,112,97, - 114,116,115,117,4,0,0,0,112,97,114,116,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,95,112,97, - 116,104,95,106,111,105,110,74,0,0,0,115,16,0,0,0, - 0,2,6,1,13,1,6,1,6,1,13,1,16,1,20,1, - 117,10,0,0,0,95,112,97,116,104,95,106,111,105,110,99, - 1,0,0,0,0,0,0,0,6,0,0,0,3,0,0,0, - 67,0,0,0,115,85,0,0,0,120,48,0,116,0,0,124, - 0,0,131,1,0,68,93,28,0,125,1,0,124,1,0,116, - 1,0,107,6,0,114,13,0,124,1,0,125,2,0,80,113, - 13,0,113,13,0,87,116,2,0,125,2,0,124,0,0,106, - 3,0,124,2,0,131,1,0,92,3,0,125,3,0,125,4, - 0,125,5,0,124,3,0,124,5,0,102,2,0,83,40,1, - 0,0,0,117,32,0,0,0,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,40,4,0,0,0,117,8,0, - 0,0,114,101,118,101,114,115,101,100,117,15,0,0,0,112, - 97,116,104,95,115,101,112,97,114,97,116,111,114,115,117,8, - 0,0,0,112,97,116,104,95,115,101,112,117,10,0,0,0, - 114,112,97,114,116,105,116,105,111,110,40,6,0,0,0,117, - 4,0,0,0,112,97,116,104,117,1,0,0,0,120,117,3, - 0,0,0,115,101,112,117,5,0,0,0,102,114,111,110,116, - 117,1,0,0,0,95,117,4,0,0,0,116,97,105,108,40, - 0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0,0, - 95,112,97,116,104,95,115,112,108,105,116,86,0,0,0,115, - 14,0,0,0,0,2,19,1,12,1,6,1,8,2,6,1, - 24,1,117,11,0,0,0,95,112,97,116,104,95,115,112,108, - 105,116,99,2,0,0,0,0,0,0,0,3,0,0,0,11, - 0,0,0,67,0,0,0,115,61,0,0,0,121,19,0,116, - 0,0,106,1,0,124,0,0,131,1,0,125,2,0,87,110, - 22,0,4,116,2,0,107,10,0,114,43,0,1,1,1,100, - 2,0,83,89,110,1,0,88,124,2,0,106,4,0,100,1, - 0,64,124,1,0,107,2,0,83,40,3,0,0,0,117,49, - 0,0,0,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,105,0,240,0,0,70,40,5,0,0,0,117, - 3,0,0,0,95,111,115,117,4,0,0,0,115,116,97,116, - 117,7,0,0,0,79,83,69,114,114,111,114,117,5,0,0, - 0,70,97,108,115,101,117,7,0,0,0,115,116,95,109,111, - 100,101,40,3,0,0,0,117,4,0,0,0,112,97,116,104, - 117,4,0,0,0,109,111,100,101,117,9,0,0,0,115,116, - 97,116,95,105,110,102,111,40,0,0,0,0,40,0,0,0, - 0,117,29,0,0,0,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,117,18,0,0,0,95,112,97,116,104,95,105,115, - 95,109,111,100,101,95,116,121,112,101,98,0,0,0,115,10, - 0,0,0,0,2,3,1,19,1,13,1,9,1,117,18,0, - 0,0,95,112,97,116,104,95,105,115,95,109,111,100,101,95, - 116,121,112,101,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,40,2,0,0,0, - 117,31,0,0,0,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,40,1,0,0,0,117,18, - 0,0,0,95,112,97,116,104,95,105,115,95,109,111,100,101, - 95,116,121,112,101,40,1,0,0,0,117,4,0,0,0,112, - 97,116,104,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 12,0,0,0,95,112,97,116,104,95,105,115,102,105,108,101, - 108,0,0,0,115,2,0,0,0,0,2,117,12,0,0,0, - 95,112,97,116,104,95,105,115,102,105,108,101,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,40,2,0,0,0,117,30,0, - 0,0,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,40,3,0,0,0,117,3,0,0,0,95, - 111,115,117,6,0,0,0,103,101,116,99,119,100,117,18,0, - 0,0,95,112,97,116,104,95,105,115,95,109,111,100,101,95, - 116,121,112,101,40,1,0,0,0,117,4,0,0,0,112,97, - 116,104,40,0,0,0,0,40,0,0,0,0,117,29,0,0, - 0,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,117,11, - 0,0,0,95,112,97,116,104,95,105,115,100,105,114,114,0, - 0,0,115,6,0,0,0,0,2,6,1,15,1,117,11,0, - 0,0,95,112,97,116,104,95,105,115,100,105,114,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,40,5,0,0, - 0,117,162,0,0,0,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,117,5,0,0,0,123,125,46, - 123,125,105,182,1,0,0,117,2,0,0,0,119,98,78,40, - 13,0,0,0,117,6,0,0,0,102,111,114,109,97,116,117, - 2,0,0,0,105,100,117,3,0,0,0,95,111,115,117,4, - 0,0,0,111,112,101,110,117,6,0,0,0,79,95,69,88, - 67,76,117,7,0,0,0,79,95,67,82,69,65,84,117,8, - 0,0,0,79,95,87,82,79,78,76,89,117,3,0,0,0, - 95,105,111,117,6,0,0,0,70,105,108,101,73,79,117,5, - 0,0,0,119,114,105,116,101,117,7,0,0,0,114,101,112, - 108,97,99,101,117,7,0,0,0,79,83,69,114,114,111,114, - 117,6,0,0,0,117,110,108,105,110,107,40,6,0,0,0, - 117,4,0,0,0,112,97,116,104,117,4,0,0,0,100,97, - 116,97,117,4,0,0,0,109,111,100,101,117,8,0,0,0, - 112,97,116,104,95,116,109,112,117,2,0,0,0,102,100,117, - 4,0,0,0,102,105,108,101,40,0,0,0,0,40,0,0, - 0,0,117,29,0,0,0,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,117,13,0,0,0,95,119,114,105,116,101,95, - 97,116,111,109,105,99,121,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,117,13,0,0,0,95,119, - 114,105,116,101,95,97,116,111,109,105,99,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,40,6,0,0,0,117,47,0,0,0,83,105, + 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,2,0,0,0,0,0,0,0,3,0, + 0,0,11,0,0,0,67,0,0,0,115,61,0,0,0,121, + 19,0,116,0,0,106,1,0,124,0,0,131,1,0,125,2, + 0,87,110,22,0,4,116,2,0,107,10,0,114,43,0,1, + 1,1,100,1,0,83,89,110,1,0,88,124,2,0,106,3, + 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,4,114,3,0,0,0,218,4, + 115,116,97,116,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,68,0,0,0,115,10,0,0,0,0,2,3,1,19,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,78,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,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,84,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,91,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,117,10,0, - 0,0,95,95,109,111,100,117,108,101,95,95,117,8,0,0, - 0,95,95,110,97,109,101,95,95,117,12,0,0,0,95,95, - 113,117,97,108,110,97,109,101,95,95,117,7,0,0,0,95, - 95,100,111,99,95,95,78,40,5,0,0,0,117,7,0,0, - 0,104,97,115,97,116,116,114,117,7,0,0,0,115,101,116, - 97,116,116,114,117,7,0,0,0,103,101,116,97,116,116,114, - 117,8,0,0,0,95,95,100,105,99,116,95,95,117,6,0, - 0,0,117,112,100,97,116,101,40,3,0,0,0,117,3,0, - 0,0,110,101,119,117,3,0,0,0,111,108,100,117,7,0, - 0,0,114,101,112,108,97,99,101,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,5,0,0,0,95,119,114,97,112,143, - 0,0,0,115,8,0,0,0,0,2,25,1,15,1,32,1, - 117,5,0,0,0,95,119,114,97,112,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,40,1,0,0,0,117,75,0,0,0,67,114, - 101,97,116,101,32,97,32,110,101,119,32,109,111,100,117,108, - 101,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,101,110,116,101,114,101, - 100,32,105,110,116,111,32,115,121,115,46,109,111,100,117,108, - 101,115,46,10,10,32,32,32,32,40,2,0,0,0,117,4, - 0,0,0,116,121,112,101,117,3,0,0,0,95,105,111,40, - 1,0,0,0,117,4,0,0,0,110,97,109,101,40,0,0, - 0,0,40,0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,110,101, - 119,95,109,111,100,117,108,101,154,0,0,0,115,2,0,0, - 0,0,6,117,10,0,0,0,110,101,119,95,109,111,100,117, - 108,101,99,1,0,0,0,0,0,0,0,1,0,0,0,1, - 0,0,0,66,0,0,0,115,20,0,0,0,124,0,0,69, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,83, - 40,2,0,0,0,117,14,0,0,0,95,68,101,97,100,108, - 111,99,107,69,114,114,111,114,78,40,3,0,0,0,117,8, - 0,0,0,95,95,110,97,109,101,95,95,117,10,0,0,0, - 95,95,109,111,100,117,108,101,95,95,117,12,0,0,0,95, - 95,113,117,97,108,110,97,109,101,95,95,40,1,0,0,0, - 117,10,0,0,0,95,95,108,111,99,97,108,115,95,95,40, - 0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,14,0,0,0, - 95,68,101,97,100,108,111,99,107,69,114,114,111,114,171,0, - 0,0,115,2,0,0,0,16,1,117,14,0,0,0,95,68, - 101,97,100,108,111,99,107,69,114,114,111,114,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,66,0,0, - 0,115,86,0,0,0,124,0,0,69,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,40,13,0,0, - 0,117,11,0,0,0,95,77,111,100,117,108,101,76,111,99, - 107,117,169,0,0,0,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,6,0,100,1,0,124,0,0,95, - 7,0,100,1,0,124,0,0,95,8,0,100,0,0,83,40, - 2,0,0,0,78,105,0,0,0,0,40,9,0,0,0,117, - 7,0,0,0,95,116,104,114,101,97,100,117,13,0,0,0, - 97,108,108,111,99,97,116,101,95,108,111,99,107,117,4,0, - 0,0,108,111,99,107,117,6,0,0,0,119,97,107,101,117, - 112,117,4,0,0,0,110,97,109,101,117,4,0,0,0,78, - 111,110,101,117,5,0,0,0,111,119,110,101,114,117,5,0, - 0,0,99,111,117,110,116,117,7,0,0,0,119,97,105,116, - 101,114,115,40,2,0,0,0,117,4,0,0,0,115,101,108, - 102,117,4,0,0,0,110,97,109,101,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,8,0,0,0,95,95,105,110,105, - 116,95,95,181,0,0,0,115,12,0,0,0,0,1,15,1, - 15,1,9,1,9,1,9,1,117,20,0,0,0,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,87,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,59,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,100,0, - 0,83,40,3,0,0,0,78,70,84,40,8,0,0,0,117, - 7,0,0,0,95,116,104,114,101,97,100,117,9,0,0,0, - 103,101,116,95,105,100,101,110,116,117,5,0,0,0,111,119, - 110,101,114,117,12,0,0,0,95,98,108,111,99,107,105,110, - 103,95,111,110,117,3,0,0,0,103,101,116,117,4,0,0, - 0,78,111,110,101,117,5,0,0,0,70,97,108,115,101,117, - 4,0,0,0,84,114,117,101,40,4,0,0,0,117,4,0, - 0,0,115,101,108,102,117,2,0,0,0,109,101,117,3,0, - 0,0,116,105,100,117,4,0,0,0,108,111,99,107,40,0, - 0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,12,0,0,0,104, - 97,115,95,100,101,97,100,108,111,99,107,189,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,117,24,0,0,0,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, - 17,0,0,0,67,0,0,0,115,214,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,177,0,120,170,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,5,0,83,124,0,0, - 106,7,0,131,0,0,114,127,0,116,8,0,100,3,0,124, - 0,0,22,131,1,0,130,1,0,110,0,0,124,0,0,106, - 9,0,106,10,0,100,6,0,131,1,0,114,163,0,124,0, - 0,4,106,12,0,100,2,0,55,2,95,12,0,110,0,0, - 87,100,4,0,81,88,124,0,0,106,9,0,106,10,0,131, - 0,0,1,124,0,0,106,9,0,106,13,0,131,0,0,1, - 113,28,0,87,100,4,0,116,2,0,124,1,0,61,88,100, - 4,0,83,40,7,0,0,0,117,185,0,0,0,10,32,32, + 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,113,0,0,0,115,8,0,0,0,0,2,25,1,15,1, + 32,1,114,65,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,66,0,0,0,132,0, + 0,0,115,2,0,0,0,12,1,114,66,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,218,4,110,97,109,101,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,218,4,115,101,108,102,114,72,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,142,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,87,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,59,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,100, + 0,0,83,41,3,78,70,84,41,5,114,69,0,0,0,218, + 9,103,101,116,95,105,100,101,110,116,114,73,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,76,0,0,0,218,2,109,101,218,3,116, + 105,100,114,70,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,150,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,17,0,0,0,67,0,0,0,115,214, + 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,177,0,120,170,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,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, @@ -473,3958 +372,3070 @@ unsigned char _Py_M__importlib[] = { 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,105,0,0,0,0,105,1,0,0,0, - 117,23,0,0,0,100,101,97,100,108,111,99,107,32,100,101, - 116,101,99,116,101,100,32,98,121,32,37,114,78,84,70,40, - 14,0,0,0,117,7,0,0,0,95,116,104,114,101,97,100, - 117,9,0,0,0,103,101,116,95,105,100,101,110,116,117,12, - 0,0,0,95,98,108,111,99,107,105,110,103,95,111,110,117, - 4,0,0,0,108,111,99,107,117,5,0,0,0,99,111,117, - 110,116,117,5,0,0,0,111,119,110,101,114,117,4,0,0, - 0,84,114,117,101,117,12,0,0,0,104,97,115,95,100,101, - 97,100,108,111,99,107,117,14,0,0,0,95,68,101,97,100, - 108,111,99,107,69,114,114,111,114,117,6,0,0,0,119,97, - 107,101,117,112,117,7,0,0,0,97,99,113,117,105,114,101, - 117,5,0,0,0,70,97,108,115,101,117,7,0,0,0,119, - 97,105,116,101,114,115,117,7,0,0,0,114,101,108,101,97, - 115,101,40,2,0,0,0,117,4,0,0,0,115,101,108,102, - 117,3,0,0,0,116,105,100,40,0,0,0,0,40,0,0, - 0,0,117,29,0,0,0,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,117,7,0,0,0,97,99,113,117,105,114,101, - 201,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,20,2,117,19,0,0,0,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,8, - 0,114,155,0,124,0,0,4,106,8,0,100,3,0,56,2, - 95,8,0,124,0,0,106,9,0,106,10,0,131,0,0,1, - 113,155,0,110,0,0,87,100,0,0,81,88,100,0,0,83, - 40,4,0,0,0,78,117,31,0,0,0,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,105,0,0,0,0,105, - 1,0,0,0,40,11,0,0,0,117,7,0,0,0,95,116, - 104,114,101,97,100,117,9,0,0,0,103,101,116,95,105,100, - 101,110,116,117,4,0,0,0,108,111,99,107,117,5,0,0, - 0,111,119,110,101,114,117,12,0,0,0,82,117,110,116,105, - 109,101,69,114,114,111,114,117,5,0,0,0,99,111,117,110, - 116,117,14,0,0,0,65,115,115,101,114,116,105,111,110,69, - 114,114,111,114,117,4,0,0,0,78,111,110,101,117,7,0, - 0,0,119,97,105,116,101,114,115,117,6,0,0,0,119,97, - 107,101,117,112,117,7,0,0,0,114,101,108,101,97,115,101, - 40,2,0,0,0,117,4,0,0,0,115,101,108,102,117,3, - 0,0,0,116,105,100,40,0,0,0,0,40,0,0,0,0, - 117,29,0,0,0,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,117,7,0,0,0,114,101,108,101,97,115,101,226,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,117,19,0, - 0,0,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,23,0,0,0,100, - 1,0,124,0,0,106,0,0,116,1,0,124,0,0,131,1, - 0,102,2,0,22,83,40,2,0,0,0,78,117,21,0,0, - 0,95,77,111,100,117,108,101,76,111,99,107,40,37,114,41, - 32,97,116,32,37,100,40,2,0,0,0,117,4,0,0,0, - 110,97,109,101,117,2,0,0,0,105,100,40,1,0,0,0, - 117,4,0,0,0,115,101,108,102,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,8,0,0,0,95,95,114,101,112,114, - 95,95,239,0,0,0,115,2,0,0,0,0,1,117,20,0, - 0,0,95,77,111,100,117,108,101,76,111,99,107,46,95,95, - 114,101,112,114,95,95,78,40,9,0,0,0,117,8,0,0, - 0,95,95,110,97,109,101,95,95,117,10,0,0,0,95,95, - 109,111,100,117,108,101,95,95,117,12,0,0,0,95,95,113, - 117,97,108,110,97,109,101,95,95,117,7,0,0,0,95,95, - 100,111,99,95,95,117,8,0,0,0,95,95,105,110,105,116, - 95,95,117,12,0,0,0,104,97,115,95,100,101,97,100,108, - 111,99,107,117,7,0,0,0,97,99,113,117,105,114,101,117, - 7,0,0,0,114,101,108,101,97,115,101,117,8,0,0,0, - 95,95,114,101,112,114,95,95,40,1,0,0,0,117,10,0, - 0,0,95,95,108,111,99,97,108,115,95,95,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0,0,95,77,111, - 100,117,108,101,76,111,99,107,175,0,0,0,115,12,0,0, - 0,16,4,6,2,12,8,12,12,12,25,12,13,117,11,0, - 0,0,95,77,111,100,117,108,101,76,111,99,107,99,1,0, - 0,0,0,0,0,0,1,0,0,0,2,0,0,0,66,0, - 0,0,115,74,0,0,0,124,0,0,69,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,40,11,0,0,0,117,16,0,0,0,95,68,117,109,109, - 121,77,111,100,117,108,101,76,111,99,107,117,86,0,0,0, - 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,40,2,0,0,0,78,105,0,0,0, - 0,40,2,0,0,0,117,4,0,0,0,110,97,109,101,117, - 5,0,0,0,99,111,117,110,116,40,2,0,0,0,117,4, - 0,0,0,115,101,108,102,117,4,0,0,0,110,97,109,101, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,8,0,0, - 0,95,95,105,110,105,116,95,95,247,0,0,0,115,4,0, - 0,0,0,1,9,1,117,25,0,0,0,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,40,3,0,0,0,78,105,1,0,0,0,84,40,2,0, - 0,0,117,5,0,0,0,99,111,117,110,116,117,4,0,0, - 0,84,114,117,101,40,1,0,0,0,117,4,0,0,0,115, - 101,108,102,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 7,0,0,0,97,99,113,117,105,114,101,251,0,0,0,115, - 4,0,0,0,0,1,15,1,117,24,0,0,0,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, - 40,4,0,0,0,78,105,0,0,0,0,117,31,0,0,0, - 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,105, - 1,0,0,0,40,2,0,0,0,117,5,0,0,0,99,111, - 117,110,116,117,12,0,0,0,82,117,110,116,105,109,101,69, - 114,114,111,114,40,1,0,0,0,117,4,0,0,0,115,101, - 108,102,40,0,0,0,0,40,0,0,0,0,117,29,0,0, - 0,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,117,7, - 0,0,0,114,101,108,101,97,115,101,255,0,0,0,115,6, - 0,0,0,0,1,15,1,15,1,117,24,0,0,0,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,23,0,0,0, - 100,1,0,124,0,0,106,0,0,116,1,0,124,0,0,131, - 1,0,102,2,0,22,83,40,2,0,0,0,78,117,26,0, - 0,0,95,68,117,109,109,121,77,111,100,117,108,101,76,111, - 99,107,40,37,114,41,32,97,116,32,37,100,40,2,0,0, - 0,117,4,0,0,0,110,97,109,101,117,2,0,0,0,105, - 100,40,1,0,0,0,117,4,0,0,0,115,101,108,102,40, - 0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,8,0,0,0, - 95,95,114,101,112,114,95,95,4,1,0,0,115,2,0,0, - 0,0,1,117,25,0,0,0,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,40,8,0,0,0,117,8,0,0,0,95,95,110,97, - 109,101,95,95,117,10,0,0,0,95,95,109,111,100,117,108, - 101,95,95,117,12,0,0,0,95,95,113,117,97,108,110,97, - 109,101,95,95,117,7,0,0,0,95,95,100,111,99,95,95, - 117,8,0,0,0,95,95,105,110,105,116,95,95,117,7,0, - 0,0,97,99,113,117,105,114,101,117,7,0,0,0,114,101, - 108,101,97,115,101,117,8,0,0,0,95,95,114,101,112,114, - 95,95,40,1,0,0,0,117,10,0,0,0,95,95,108,111, - 99,97,108,115,95,95,40,0,0,0,0,40,0,0,0,0, - 117,29,0,0,0,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,117,16,0,0,0,95,68,117,109,109,121,77,111,100, - 117,108,101,76,111,99,107,243,0,0,0,115,10,0,0,0, - 16,2,6,2,12,4,12,4,12,5,117,16,0,0,0,95, - 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,99, + 32,32,32,32,32,32,114,68,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,69, + 0,0,0,114,78,0,0,0,114,79,0,0,0,114,70,0, + 0,0,114,74,0,0,0,114,73,0,0,0,114,83,0,0, + 0,114,66,0,0,0,114,71,0,0,0,218,7,97,99,113, + 117,105,114,101,114,75,0,0,0,218,7,114,101,108,101,97, + 115,101,41,2,114,76,0,0,0,114,82,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,84,0, + 0,0,162,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,20,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,68,0,0,0,114,29,0,0,0,41,10,114, + 69,0,0,0,114,78,0,0,0,114,70,0,0,0,114,73, + 0,0,0,218,12,82,117,110,116,105,109,101,69,114,114,111, + 114,114,74,0,0,0,218,14,65,115,115,101,114,116,105,111, + 110,69,114,114,111,114,114,75,0,0,0,114,71,0,0,0, + 114,85,0,0,0,41,2,114,76,0,0,0,114,82,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,85,0,0,0,187,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, + 72,0,0,0,114,48,0,0,0,41,1,114,76,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,200,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,77,0,0,0,114,83,0,0,0,114,84,0,0,0, + 114,85,0,0,0,114,88,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,67, + 0,0,0,136,0,0,0,115,12,0,0,0,12,4,6,2, + 12,8,12,12,12,25,12,13,114,67,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,68,0,0, + 0,41,2,114,72,0,0,0,114,74,0,0,0,41,2,114, + 76,0,0,0,114,72,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,77,0,0,0,208,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,74,0, + 0,0,41,1,114,76,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,84,0,0,0,212,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,68,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, + 74,0,0,0,114,86,0,0,0,41,1,114,76,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 85,0,0,0,216,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,72,0,0,0,114,48,0, + 0,0,41,1,114,76,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,88,0,0,0,221,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,77,0,0,0,114, + 84,0,0,0,114,85,0,0,0,114,88,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,0,0,0,204,0,0,0,115,10,0,0,0, + 12,2,6,2,12,4,12,4,12,5,114,89,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,3,0,125,1,0,121, - 17,0,116,1,0,136,0,0,25,131,0,0,125,1,0,87, - 110,18,0,4,116,2,0,107,10,0,114,43,0,1,1,1, - 89,110,1,0,88,124,1,0,100,3,0,107,8,0,114,138, - 0,116,3,0,100,3,0,107,8,0,114,83,0,116,4,0, - 136,0,0,131,1,0,125,1,0,110,12,0,116,5,0,136, - 0,0,131,1,0,125,1,0,135,0,0,102,1,0,100,1, - 0,100,2,0,134,0,0,125,2,0,116,6,0,106,7,0, - 124,1,0,124,2,0,131,2,0,116,1,0,136,0,0,60, - 110,0,0,124,1,0,83,40,4,0,0,0,117,109,0,0, - 0,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,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,40,1,0,0,0,78,40,1,0,0,0,117,13, - 0,0,0,95,109,111,100,117,108,101,95,108,111,99,107,115, - 40,1,0,0,0,117,1,0,0,0,95,40,1,0,0,0, - 117,4,0,0,0,110,97,109,101,40,0,0,0,0,117,29, - 0,0,0,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, - 117,2,0,0,0,99,98,24,1,0,0,115,2,0,0,0, - 0,1,117,28,0,0,0,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,78,40,8,0,0,0,117,4,0,0,0,78,111, - 110,101,117,13,0,0,0,95,109,111,100,117,108,101,95,108, - 111,99,107,115,117,8,0,0,0,75,101,121,69,114,114,111, - 114,117,7,0,0,0,95,116,104,114,101,97,100,117,16,0, - 0,0,95,68,117,109,109,121,77,111,100,117,108,101,76,111, - 99,107,117,11,0,0,0,95,77,111,100,117,108,101,76,111, - 99,107,117,8,0,0,0,95,119,101,97,107,114,101,102,117, - 3,0,0,0,114,101,102,40,3,0,0,0,117,4,0,0, - 0,110,97,109,101,117,4,0,0,0,108,111,99,107,117,2, - 0,0,0,99,98,40,0,0,0,0,40,1,0,0,0,117, - 4,0,0,0,110,97,109,101,117,29,0,0,0,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,117,16,0,0,0,95, - 103,101,116,95,109,111,100,117,108,101,95,108,111,99,107,10, - 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, - 117,16,0,0,0,95,103,101,116,95,109,111,100,117,108,101, - 95,108,111,99,107,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,40,2,0,0,0,117,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,40,6,0,0,0,117,16,0,0,0, - 95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,107, - 117,4,0,0,0,95,105,109,112,117,12,0,0,0,114,101, - 108,101,97,115,101,95,108,111,99,107,117,7,0,0,0,97, - 99,113,117,105,114,101,117,14,0,0,0,95,68,101,97,100, - 108,111,99,107,69,114,114,111,114,117,7,0,0,0,114,101, - 108,101,97,115,101,40,2,0,0,0,117,4,0,0,0,110, - 97,109,101,117,4,0,0,0,108,111,99,107,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,19,0,0,0,95,108,111, - 99,107,95,117,110,108,111,99,107,95,109,111,100,117,108,101, - 29,1,0,0,115,14,0,0,0,0,7,12,1,10,1,3, - 1,14,1,13,3,5,2,117,19,0,0,0,95,108,111,99, - 107,95,117,110,108,111,99,107,95,109,111,100,117,108,101,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,40,1,0,0,0,117,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,40,0, - 0,0,0,40,3,0,0,0,117,1,0,0,0,102,117,4, - 0,0,0,97,114,103,115,117,4,0,0,0,107,119,100,115, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,25,0,0, - 0,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,49,1,0,0,115,2, - 0,0,0,0,8,117,25,0,0,0,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,105,158,12,0,0,117,1,0,0,0,13,105,16, - 0,0,0,117,1,0,0,0,10,105,24,0,0,0,99,1, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,99, - 0,0,0,115,29,0,0,0,124,0,0,93,19,0,125,1, - 0,116,0,0,124,1,0,63,100,0,0,64,86,1,113,3, - 0,100,1,0,83,40,2,0,0,0,105,255,0,0,0,78, - 40,1,0,0,0,117,17,0,0,0,95,82,65,87,95,77, - 65,71,73,67,95,78,85,77,66,69,82,40,2,0,0,0, - 117,2,0,0,0,46,48,117,1,0,0,0,110,40,0,0, - 0,0,40,0,0,0,0,117,29,0,0,0,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,117,9,0,0,0,60,103, - 101,110,101,120,112,114,62,150,1,0,0,115,2,0,0,0, - 6,0,117,9,0,0,0,60,103,101,110,101,120,112,114,62, - 105,0,0,0,0,105,25,0,0,0,105,8,0,0,0,117, - 11,0,0,0,95,95,112,121,99,97,99,104,101,95,95,117, - 3,0,0,0,46,112,121,117,4,0,0,0,46,112,121,99, - 117,4,0,0,0,46,112,121,111,99,2,0,0,0,0,0, - 0,0,11,0,0,0,6,0,0,0,67,0,0,0,115,180, - 0,0,0,124,1,0,100,5,0,107,8,0,114,25,0,116, - 1,0,106,2,0,106,3,0,12,110,3,0,124,1,0,125, - 2,0,124,2,0,114,46,0,116,4,0,125,3,0,110,6, - 0,116,5,0,125,3,0,116,6,0,124,0,0,131,1,0, - 92,2,0,125,4,0,125,5,0,124,5,0,106,7,0,100, - 1,0,131,1,0,92,3,0,125,6,0,125,7,0,125,8, - 0,116,1,0,106,8,0,106,9,0,125,9,0,124,9,0, - 100,5,0,107,8,0,114,133,0,116,10,0,100,2,0,131, - 1,0,130,1,0,110,0,0,100,3,0,106,11,0,124,6, - 0,124,7,0,124,9,0,124,3,0,100,4,0,25,103,4, - 0,131,1,0,125,10,0,116,12,0,124,4,0,116,13,0, - 124,10,0,131,3,0,83,40,6,0,0,0,117,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,117,1,0,0,0,46,117,36,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,72,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,2,99,98,241,0, + 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,90,0,0,0,218,8, + 75,101,121,69,114,114,111,114,114,69,0,0,0,114,89,0, + 0,0,114,67,0,0,0,218,8,95,119,101,97,107,114,101, + 102,90,3,114,101,102,41,3,114,72,0,0,0,114,70,0, + 0,0,114,91,0,0,0,114,4,0,0,0,41,1,114,72, + 0,0,0,114,5,0,0,0,218,16,95,103,101,116,95,109, + 111,100,117,108,101,95,108,111,99,107,227,0,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,94,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,94,0,0,0,218,4,95,105,109,112,218,12,114,101,108, + 101,97,115,101,95,108,111,99,107,114,84,0,0,0,114,66, + 0,0,0,114,85,0,0,0,41,2,114,72,0,0,0,114, + 70,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,246,0,0,0,115,14,0,0, + 0,0,7,12,1,10,1,3,1,14,1,13,3,5,2,114, + 97,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,218,4,97,114,103,115, + 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, + 10,1,0,0,115,2,0,0,0,0,8,114,100,0,0,0, + 105,228,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,180,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,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,117,0,0,0,0,105,0,0,0,0,78,40, - 14,0,0,0,117,4,0,0,0,78,111,110,101,117,3,0, - 0,0,115,121,115,117,5,0,0,0,102,108,97,103,115,117, - 8,0,0,0,111,112,116,105,109,105,122,101,117,23,0,0, - 0,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, - 83,85,70,70,73,88,69,83,117,27,0,0,0,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,117,11,0,0,0,95,112,97, - 116,104,95,115,112,108,105,116,117,9,0,0,0,112,97,114, - 116,105,116,105,111,110,117,14,0,0,0,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,117,9,0,0,0,99,97, - 99,104,101,95,116,97,103,117,19,0,0,0,78,111,116,73, - 109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,117, - 4,0,0,0,106,111,105,110,117,10,0,0,0,95,112,97, - 116,104,95,106,111,105,110,117,8,0,0,0,95,80,89,67, - 65,67,72,69,40,11,0,0,0,117,4,0,0,0,112,97, - 116,104,117,14,0,0,0,100,101,98,117,103,95,111,118,101, - 114,114,105,100,101,117,5,0,0,0,100,101,98,117,103,117, - 8,0,0,0,115,117,102,102,105,120,101,115,117,4,0,0, - 0,104,101,97,100,117,4,0,0,0,116,97,105,108,117,13, - 0,0,0,98,97,115,101,95,102,105,108,101,110,97,109,101, - 117,3,0,0,0,115,101,112,117,1,0,0,0,95,117,3, - 0,0,0,116,97,103,117,8,0,0,0,102,105,108,101,110, - 97,109,101,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 17,0,0,0,99,97,99,104,101,95,102,114,111,109,95,115, - 111,117,114,99,101,159,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,31,1,117,17,0,0,0,99,97,99,104,101,95,102, - 114,111,109,95,115,111,117,114,99,101,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,7,0, - 107,8,0,114,33,0,116,4,0,100,1,0,131,1,0,130, - 1,0,110,0,0,116,5,0,124,0,0,131,1,0,92,2, - 0,125,1,0,125,2,0,116,5,0,124,1,0,131,1,0, - 92,2,0,125,1,0,125,3,0,124,3,0,116,6,0,107, - 3,0,114,108,0,116,7,0,100,2,0,106,8,0,116,6, - 0,124,0,0,131,2,0,131,1,0,130,1,0,110,0,0, - 124,2,0,106,9,0,100,3,0,131,1,0,100,4,0,107, - 3,0,114,153,0,116,7,0,100,5,0,106,8,0,124,2, - 0,131,1,0,131,1,0,130,1,0,110,0,0,124,2,0, - 106,10,0,100,3,0,131,1,0,100,6,0,25,125,4,0, - 116,11,0,124,1,0,124,4,0,116,12,0,100,6,0,25, - 23,131,2,0,83,40,8,0,0,0,117,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,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,117,36,0,0,0,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,117,37,0,0,0,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,117,1,0,0,0, - 46,105,2,0,0,0,117,28,0,0,0,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,105,0,0,0,0,78,40,13,0, - 0,0,117,3,0,0,0,115,121,115,117,14,0,0,0,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,117,9,0, - 0,0,99,97,99,104,101,95,116,97,103,117,4,0,0,0, - 78,111,110,101,117,19,0,0,0,78,111,116,73,109,112,108, - 101,109,101,110,116,101,100,69,114,114,111,114,117,11,0,0, - 0,95,112,97,116,104,95,115,112,108,105,116,117,8,0,0, - 0,95,80,89,67,65,67,72,69,117,10,0,0,0,86,97, - 108,117,101,69,114,114,111,114,117,6,0,0,0,102,111,114, - 109,97,116,117,5,0,0,0,99,111,117,110,116,117,9,0, - 0,0,112,97,114,116,105,116,105,111,110,117,10,0,0,0, - 95,112,97,116,104,95,106,111,105,110,117,15,0,0,0,83, - 79,85,82,67,69,95,83,85,70,70,73,88,69,83,40,5, - 0,0,0,117,4,0,0,0,112,97,116,104,117,4,0,0, - 0,104,101,97,100,117,16,0,0,0,112,121,99,97,99,104, - 101,95,102,105,108,101,110,97,109,101,117,7,0,0,0,112, - 121,99,97,99,104,101,117,13,0,0,0,98,97,115,101,95, - 102,105,108,101,110,97,109,101,40,0,0,0,0,40,0,0, - 0,0,117,29,0,0,0,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,117,17,0,0,0,115,111,117,114,99,101,95, - 102,114,111,109,95,99,97,99,104,101,186,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,117,17,0,0,0, - 115,111,117,114,99,101,95,102,114,111,109,95,99,97,99,104, - 101,99,1,0,0,0,0,0,0,0,5,0,0,0,13,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,6,0, - 83,124,0,0,106,2,0,100,2,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,3,0,131,0,0,100,7,0,100,8,0,133, - 2,0,25,100,5,0,107,3,0,114,85,0,124,0,0,83, - 121,16,0,116,4,0,124,0,0,131,1,0,125,4,0,87, - 110,40,0,4,116,5,0,116,6,0,102,2,0,107,10,0, - 114,143,0,1,1,1,124,0,0,100,6,0,100,9,0,133, - 2,0,25,125,4,0,89,110,1,0,88,116,7,0,124,4, - 0,131,1,0,114,160,0,124,4,0,83,124,0,0,83,40, - 10,0,0,0,117,188,0,0,0,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,105,0,0,0,0,117,1,0,0,0,46, - 105,3,0,0,0,105,1,0,0,0,117,2,0,0,0,112, - 121,78,105,253,255,255,255,105,255,255,255,255,105,255,255,255, - 255,40,8,0,0,0,117,3,0,0,0,108,101,110,117,4, - 0,0,0,78,111,110,101,117,10,0,0,0,114,112,97,114, - 116,105,116,105,111,110,117,5,0,0,0,108,111,119,101,114, - 117,17,0,0,0,115,111,117,114,99,101,95,102,114,111,109, - 95,99,97,99,104,101,117,19,0,0,0,78,111,116,73,109, - 112,108,101,109,101,110,116,101,100,69,114,114,111,114,117,10, - 0,0,0,86,97,108,117,101,69,114,114,111,114,117,12,0, - 0,0,95,112,97,116,104,95,105,115,102,105,108,101,40,5, - 0,0,0,117,13,0,0,0,98,121,116,101,99,111,100,101, - 95,112,97,116,104,117,4,0,0,0,114,101,115,116,117,1, - 0,0,0,95,117,9,0,0,0,101,120,116,101,110,115,105, - 111,110,117,11,0,0,0,115,111,117,114,99,101,95,112,97, - 116,104,40,0,0,0,0,40,0,0,0,0,117,29,0,0, - 0,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,117,15, - 0,0,0,95,103,101,116,95,115,111,117,114,99,101,102,105, - 108,101,209,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,117, - 15,0,0,0,95,103,101,116,95,115,111,117,114,99,101,102, - 105,108,101,117,9,0,0,0,118,101,114,98,111,115,105,116, - 121,105,1,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,40,7,0,0,0,117,61,0,0,0,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,117,1,0,0,0,35,117,7, - 0,0,0,105,109,112,111,114,116,32,117,2,0,0,0,35, - 32,117,4,0,0,0,102,105,108,101,78,40,2,0,0,0, - 117,1,0,0,0,35,117,7,0,0,0,105,109,112,111,114, - 116,32,40,7,0,0,0,117,3,0,0,0,115,121,115,117, - 5,0,0,0,102,108,97,103,115,117,7,0,0,0,118,101, - 114,98,111,115,101,117,10,0,0,0,115,116,97,114,116,115, - 119,105,116,104,117,5,0,0,0,112,114,105,110,116,117,6, - 0,0,0,102,111,114,109,97,116,117,6,0,0,0,115,116, - 100,101,114,114,40,3,0,0,0,117,7,0,0,0,109,101, - 115,115,97,103,101,117,9,0,0,0,118,101,114,98,111,115, - 105,116,121,117,4,0,0,0,97,114,103,115,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,16,0,0,0,95,118,101, - 114,98,111,115,101,95,109,101,115,115,97,103,101,228,1,0, - 0,115,8,0,0,0,0,2,18,1,15,1,13,1,117,16, - 0,0,0,95,118,101,114,98,111,115,101,95,109,101,115,115, - 97,103,101,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, - 40,3,0,0,0,117,39,0,0,0,83,101,116,32,95,95, - 112,97,99,107,97,103,101,95,95,32,111,110,32,116,104,101, - 32,114,101,116,117,114,110,101,100,32,109,111,100,117,108,101, - 46,99,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,31,0,0,0,115,101,0,0,0,136,0,0,124,0, - 0,124,1,0,142,0,0,125,2,0,116,0,0,124,2,0, - 100,1,0,100,0,0,131,3,0,100,0,0,107,8,0,114, - 97,0,124,2,0,106,2,0,124,2,0,95,3,0,116,4, - 0,124,2,0,100,2,0,131,2,0,115,97,0,124,2,0, - 106,3,0,106,5,0,100,3,0,131,1,0,100,4,0,25, - 124,2,0,95,3,0,113,97,0,110,0,0,124,2,0,83, - 40,5,0,0,0,78,117,11,0,0,0,95,95,112,97,99, - 107,97,103,101,95,95,117,8,0,0,0,95,95,112,97,116, - 104,95,95,117,1,0,0,0,46,105,0,0,0,0,40,6, - 0,0,0,117,7,0,0,0,103,101,116,97,116,116,114,117, - 4,0,0,0,78,111,110,101,117,8,0,0,0,95,95,110, - 97,109,101,95,95,117,11,0,0,0,95,95,112,97,99,107, - 97,103,101,95,95,117,7,0,0,0,104,97,115,97,116,116, - 114,117,10,0,0,0,114,112,97,114,116,105,116,105,111,110, - 40,3,0,0,0,117,4,0,0,0,97,114,103,115,117,6, - 0,0,0,107,119,97,114,103,115,117,6,0,0,0,109,111, - 100,117,108,101,40,1,0,0,0,117,3,0,0,0,102,120, - 110,40,0,0,0,0,117,29,0,0,0,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,117,19,0,0,0,115,101,116, - 95,112,97,99,107,97,103,101,95,119,114,97,112,112,101,114, - 238,1,0,0,115,12,0,0,0,0,1,15,1,24,1,12, - 1,15,1,31,1,117,40,0,0,0,115,101,116,95,112,97, - 99,107,97,103,101,46,60,108,111,99,97,108,115,62,46,115, - 101,116,95,112,97,99,107,97,103,101,95,119,114,97,112,112, - 101,114,40,1,0,0,0,117,5,0,0,0,95,119,114,97, - 112,40,2,0,0,0,117,3,0,0,0,102,120,110,117,19, - 0,0,0,115,101,116,95,112,97,99,107,97,103,101,95,119, - 114,97,112,112,101,114,40,0,0,0,0,40,1,0,0,0, - 117,3,0,0,0,102,120,110,117,29,0,0,0,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,117,11,0,0,0,115, - 101,116,95,112,97,99,107,97,103,101,236,1,0,0,115,6, - 0,0,0,0,2,18,7,13,1,117,11,0,0,0,115,101, - 116,95,112,97,99,107,97,103,101,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,40,3,0,0,0,117,38,0,0,0, + 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,68,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,218,9,112,97,114,116,105,116,105,111,110, + 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,13,98,97,115,101,95,102,105, + 108,101,110,97,109,101,218,3,115,101,112,114,36,0,0,0, + 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,133,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,31,1, + 114,118,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,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,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,102, + 0,0,0,114,101,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,68,0,0,0,41,12,114,7,0, + 0,0,114,108,0,0,0,114,109,0,0,0,114,110,0,0, + 0,114,38,0,0,0,114,111,0,0,0,218,10,86,97,108, + 117,101,69,114,114,111,114,114,47,0,0,0,114,74,0,0, + 0,114,107,0,0,0,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,114,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,114,115,0,0,0,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,160,1,0,0,115,24, + 0,0,0,0,9,18,1,15,1,18,1,18,1,12,1,3, + 1,24,1,21,1,3,1,21,1,19,1,114,121,0,0,0, + 99,1,0,0,0,0,0,0,0,5,0,0,0,13,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,68, + 0,0,0,78,114,102,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,124,0,0,0,41,7,114,31,0,0,0,114,32,0, + 0,0,218,5,108,111,119,101,114,114,121,0,0,0,114,110, + 0,0,0,114,119,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,90,4, + 114,101,115,116,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,183,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,128, + 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,63,0,0,0,121,22,0, + 116,0,0,106,1,0,124,0,0,131,1,0,106,2,0,125, + 1,0,87,110,24,0,4,116,3,0,107,10,0,114,48,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,4,114, + 3,0,0,0,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,202,1,0,0,115,12, + 0,0,0,0,2,3,1,22,1,13,1,11,3,10,1,114, + 130,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,132,0,0,0,114,133,0, + 0,0,41,7,114,7,0,0,0,114,103,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,131,0,0,0, + 114,99,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,214,1,0,0,115,8,0,0,0,0, + 2,18,1,15,1,13,1,114,138,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,13,95,77, + 97,110,97,103,101,82,101,108,111,97,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,218,5,95,110,97,109,101,41,2, + 114,76,0,0,0,114,72,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,77,0,0,0,224,1, + 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,140,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,76,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,227,1,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,12,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,90,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,231,1,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,142,0,0,0,114, + 7,0,0,0,114,141,0,0,0,114,140,0,0,0,114,92, + 0,0,0,41,2,114,76,0,0,0,114,99,0,0,0,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,230,1,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,6,114,57,0,0,0,114,56,0,0,0, + 114,58,0,0,0,114,77,0,0,0,114,143,0,0,0,114, + 146,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,139,0,0,0,222,1,0, + 0,115,6,0,0,0,12,2,12,3,12,3,114,139,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,0,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,135,0,0,102,1,0,100,4,0,100,5,0,134, + 0,1,90,4,0,135,0,0,102,1,0,100,6,0,100,7, + 0,134,0,0,90,5,0,135,0,0,102,1,0,100,8,0, + 100,9,0,134,0,0,90,6,0,135,0,0,83,41,10,218, + 14,95,77,111,100,117,108,101,77,97,110,97,103,101,114,122, + 122,67,111,110,116,101,120,116,32,109,97,110,97,103,101,114, + 32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,116, + 104,101,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,68,111,101, + 115,32,116,104,101,32,112,114,111,112,101,114,32,117,110,108, + 111,97,100,105,110,103,32,102,114,111,109,32,115,121,115,46, + 109,111,100,117,108,101,115,32,117,112,111,110,32,102,97,105, + 108,117,114,101,46,10,10,32,32,32,32,218,10,114,101,115, + 101,116,95,110,97,109,101,84,99,2,0,0,0,1,0,0, + 0,3,0,0,0,2,0,0,0,3,0,0,0,115,29,0, + 0,0,116,0,0,131,0,0,106,1,0,124,1,0,131,1, + 0,1,124,2,0,124,0,0,95,2,0,100,1,0,83,41, + 2,122,183,80,114,101,112,97,114,101,32,116,104,101,32,99, + 111,110,116,101,120,116,32,109,97,110,97,103,101,114,46,10, + 10,32,32,32,32,32,32,32,32,84,104,101,32,114,101,115, + 101,116,95,110,97,109,101,32,97,114,103,117,109,101,110,116, + 32,115,112,101,99,105,102,105,101,115,32,119,104,101,116,104, + 101,114,32,116,111,32,117,110,99,111,110,100,105,116,105,111, + 110,97,108,108,121,32,114,101,115,101,116,10,32,32,32,32, + 32,32,32,32,116,104,101,32,95,95,110,97,109,101,95,95, + 32,97,116,116,114,105,98,117,116,101,32,105,102,32,116,104, + 101,32,109,111,100,117,108,101,32,105,115,32,102,111,117,110, + 100,32,116,111,32,98,101,32,97,32,114,101,108,111,97,100, + 46,10,32,32,32,32,32,32,32,32,78,41,3,218,5,115, + 117,112,101,114,114,77,0,0,0,218,11,95,114,101,115,101, + 116,95,110,97,109,101,41,3,114,76,0,0,0,114,72,0, + 0,0,114,148,0,0,0,41,1,218,9,95,95,99,108,97, + 115,115,95,95,114,4,0,0,0,114,5,0,0,0,114,77, + 0,0,0,247,1,0,0,115,4,0,0,0,0,6,16,1, + 122,23,95,77,111,100,117,108,101,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,11,0,0,0,3,0,0,0,115,163, + 0,0,0,116,0,0,131,0,0,106,1,0,131,0,0,1, + 116,2,0,106,3,0,106,4,0,124,0,0,106,5,0,131, + 1,0,124,0,0,95,6,0,124,0,0,106,7,0,115,104, + 0,116,8,0,116,9,0,131,1,0,124,0,0,106,5,0, + 131,1,0,124,0,0,95,6,0,100,1,0,124,0,0,106, + 6,0,95,10,0,124,0,0,106,6,0,116,2,0,106,3, + 0,124,0,0,106,5,0,60,110,52,0,124,0,0,106,11, + 0,114,156,0,121,19,0,124,0,0,106,5,0,124,0,0, + 106,6,0,95,12,0,87,113,156,0,4,116,13,0,107,10, + 0,114,152,0,1,1,1,89,113,156,0,88,110,0,0,124, + 0,0,106,6,0,83,41,2,78,84,41,14,114,149,0,0, + 0,114,143,0,0,0,114,7,0,0,0,114,141,0,0,0, + 114,80,0,0,0,114,140,0,0,0,218,7,95,109,111,100, + 117,108,101,114,142,0,0,0,218,4,116,121,112,101,114,49, + 0,0,0,218,16,95,95,105,110,105,116,105,97,108,105,122, + 105,110,103,95,95,114,150,0,0,0,114,57,0,0,0,218, + 14,65,116,116,114,105,98,117,116,101,69,114,114,111,114,41, + 1,114,76,0,0,0,41,1,114,151,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,143,0,0,0,0,2,0,0, + 115,24,0,0,0,0,1,13,1,24,1,9,4,24,3,12, + 1,22,1,9,1,3,1,19,1,13,1,8,1,122,24,95, + 77,111,100,117,108,101,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, + 2,0,0,0,2,0,0,0,7,0,0,0,115,38,0,0, + 0,100,1,0,124,0,0,106,0,0,95,1,0,124,0,0, + 96,0,0,116,2,0,131,0,0,106,3,0,124,1,0,140, + 0,0,1,100,0,0,83,41,2,78,70,41,4,114,152,0, + 0,0,114,154,0,0,0,114,149,0,0,0,114,146,0,0, + 0,41,2,114,76,0,0,0,114,99,0,0,0,41,1,114, + 151,0,0,0,114,4,0,0,0,114,5,0,0,0,114,146, + 0,0,0,19,2,0,0,115,6,0,0,0,0,1,12,1, + 6,1,122,23,95,77,111,100,117,108,101,77,97,110,97,103, + 101,114,46,95,95,101,120,105,116,95,95,41,7,114,57,0, + 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, + 0,114,77,0,0,0,114,143,0,0,0,114,146,0,0,0, + 114,4,0,0,0,114,4,0,0,0,41,1,114,151,0,0, + 0,114,5,0,0,0,114,147,0,0,0,239,1,0,0,115, + 8,0,0,0,12,6,6,2,24,9,18,19,114,147,0,0, + 0,114,148,0,0,0,84,99,1,0,0,0,1,0,0,0, + 2,0,0,0,4,0,0,0,67,0,0,0,115,16,0,0, + 0,116,0,0,124,0,0,100,1,0,124,1,0,131,1,1, + 83,41,2,122,138,82,101,116,117,114,110,32,97,32,99,111, + 110,116,101,120,116,32,109,97,110,97,103,101,114,32,119,104, + 105,99,104,32,112,114,111,118,105,100,101,115,32,116,104,101, + 32,109,111,100,117,108,101,32,111,98,106,101,99,116,32,116, + 111,32,108,111,97,100,46,10,10,32,32,32,32,73,102,32, + 114,101,115,101,116,95,110,97,109,101,32,105,115,32,116,114, + 117,101,44,32,114,101,115,101,116,32,116,104,101,32,109,111, + 100,117,108,101,39,115,32,95,95,110,97,109,101,95,95,32, + 116,111,32,39,110,97,109,101,39,46,10,32,32,32,32,114, + 148,0,0,0,41,1,114,147,0,0,0,41,2,114,72,0, + 0,0,114,148,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,14,109,111,100,117,108,101,95,116, + 111,95,108,111,97,100,25,2,0,0,115,2,0,0,0,0, + 6,114,156,0,0,0,99,2,0,0,0,0,0,0,0,4, + 0,0,0,11,0,0,0,67,0,0,0,115,102,0,0,0, + 124,1,0,106,0,0,125,2,0,121,19,0,124,0,0,106, + 1,0,124,2,0,131,1,0,125,3,0,87,110,18,0,4, + 116,2,0,107,10,0,114,48,0,1,1,1,89,110,50,0, + 88,124,3,0,114,76,0,124,2,0,124,1,0,95,3,0, + 103,0,0,124,1,0,95,4,0,110,22,0,124,2,0,106, + 5,0,100,1,0,131,1,0,100,2,0,25,124,1,0,95, + 3,0,100,3,0,83,41,4,122,68,83,101,116,32,95,95, + 112,97,99,107,97,103,101,95,95,32,97,110,100,32,95,95, + 112,97,116,104,95,95,32,98,97,115,101,100,32,111,110,32, + 119,104,97,116,32,108,111,97,100,101,114,46,105,115,95,112, + 97,99,107,97,103,101,40,41,32,115,97,121,115,46,114,102, + 0,0,0,114,68,0,0,0,78,41,6,114,57,0,0,0, + 218,10,105,115,95,112,97,99,107,97,103,101,218,11,73,109, + 112,111,114,116,69,114,114,111,114,218,11,95,95,112,97,99, + 107,97,103,101,95,95,218,8,95,95,112,97,116,104,95,95, + 114,32,0,0,0,41,4,218,6,108,111,97,100,101,114,218, + 6,109,111,100,117,108,101,114,72,0,0,0,114,157,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,19,95,105,110,105,116,95,112,97,99,107,97,103,101,95, + 97,116,116,114,115,34,2,0,0,115,18,0,0,0,0,2, + 9,1,3,1,19,1,13,1,5,2,6,1,9,1,12,2, + 114,163,0,0,0,99,2,0,0,0,0,0,0,0,2,0, + 0,0,11,0,0,0,67,0,0,0,115,100,0,0,0,121, + 25,0,124,0,0,106,0,0,124,1,0,106,1,0,131,1, + 0,124,1,0,95,2,0,87,110,18,0,4,116,3,0,107, + 10,0,114,45,0,1,1,1,89,110,51,0,88,124,1,0, + 106,1,0,124,1,0,106,4,0,107,2,0,114,96,0,124, + 1,0,106,5,0,106,6,0,116,7,0,124,1,0,106,2, + 0,131,1,0,100,1,0,25,131,1,0,1,110,0,0,100, + 2,0,83,41,3,122,57,83,101,116,32,95,95,102,105,108, + 101,95,95,32,97,110,100,32,95,95,112,97,116,104,95,95, + 32,98,97,115,101,100,32,111,110,32,108,111,97,100,101,114, + 46,103,101,116,95,102,105,108,101,110,97,109,101,40,41,46, + 114,68,0,0,0,78,41,8,218,12,103,101,116,95,102,105, + 108,101,110,97,109,101,114,57,0,0,0,218,8,95,95,102, + 105,108,101,95,95,114,158,0,0,0,114,159,0,0,0,114, + 160,0,0,0,218,6,97,112,112,101,110,100,114,38,0,0, + 0,41,2,114,161,0,0,0,114,162,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,16,95,105, + 110,105,116,95,102,105,108,101,95,97,116,116,114,115,49,2, + 0,0,115,12,0,0,0,0,2,3,1,25,1,13,1,5, + 2,18,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,39,83,101,116,32,95,95,112, + 97,99,107,97,103,101,95,95,32,111,110,32,116,104,101,32, + 114,101,116,117,114,110,101,100,32,109,111,100,117,108,101,46, + 99,0,0,0,0,0,0,0,0,3,0,0,0,4,0,0, + 0,31,0,0,0,115,101,0,0,0,136,0,0,124,0,0, + 124,1,0,142,0,0,125,2,0,116,0,0,124,2,0,100, + 1,0,100,0,0,131,3,0,100,0,0,107,8,0,114,97, + 0,124,2,0,106,1,0,124,2,0,95,2,0,116,3,0, + 124,2,0,100,2,0,131,2,0,115,97,0,124,2,0,106, + 2,0,106,4,0,100,3,0,131,1,0,100,4,0,25,124, + 2,0,95,2,0,113,97,0,110,0,0,124,2,0,83,41, + 5,78,114,159,0,0,0,114,160,0,0,0,114,102,0,0, + 0,114,68,0,0,0,41,5,114,62,0,0,0,114,57,0, + 0,0,114,159,0,0,0,114,60,0,0,0,114,32,0,0, + 0,41,3,114,99,0,0,0,218,6,107,119,97,114,103,115, + 114,162,0,0,0,41,1,218,3,102,120,110,114,4,0,0, + 0,114,5,0,0,0,218,19,115,101,116,95,112,97,99,107, + 97,103,101,95,119,114,97,112,112,101,114,62,2,0,0,115, + 12,0,0,0,0,1,15,1,24,1,12,1,15,1,31,1, + 122,40,115,101,116,95,112,97,99,107,97,103,101,46,60,108, + 111,99,97,108,115,62,46,115,101,116,95,112,97,99,107,97, + 103,101,95,119,114,97,112,112,101,114,41,1,114,65,0,0, + 0,41,2,114,169,0,0,0,114,170,0,0,0,114,4,0, + 0,0,41,1,114,169,0,0,0,114,5,0,0,0,218,11, + 115,101,116,95,112,97,99,107,97,103,101,60,2,0,0,115, + 6,0,0,0,0,2,18,7,13,1,114,171,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,38, 83,101,116,32,95,95,108,111,97,100,101,114,95,95,32,111, 110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,109, 111,100,117,108,101,46,99,1,0,0,0,0,0,0,0,4, - 0,0,0,4,0,0,0,31,0,0,0,115,49,0,0,0, + 0,0,0,4,0,0,0,31,0,0,0,115,58,0,0,0, 136,0,0,124,0,0,124,1,0,124,2,0,142,1,0,125, - 3,0,116,0,0,124,3,0,100,1,0,131,2,0,115,45, - 0,124,0,0,124,3,0,95,1,0,110,0,0,124,3,0, - 83,40,2,0,0,0,78,117,10,0,0,0,95,95,108,111, - 97,100,101,114,95,95,40,2,0,0,0,117,7,0,0,0, - 104,97,115,97,116,116,114,117,10,0,0,0,95,95,108,111, - 97,100,101,114,95,95,40,4,0,0,0,117,4,0,0,0, - 115,101,108,102,117,4,0,0,0,97,114,103,115,117,6,0, - 0,0,107,119,97,114,103,115,117,6,0,0,0,109,111,100, - 117,108,101,40,1,0,0,0,117,3,0,0,0,102,120,110, - 40,0,0,0,0,117,29,0,0,0,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,117,18,0,0,0,115,101,116,95, - 108,111,97,100,101,114,95,119,114,97,112,112,101,114,251,1, - 0,0,115,8,0,0,0,0,1,18,1,15,1,12,1,117, - 38,0,0,0,115,101,116,95,108,111,97,100,101,114,46,60, - 108,111,99,97,108,115,62,46,115,101,116,95,108,111,97,100, - 101,114,95,119,114,97,112,112,101,114,40,1,0,0,0,117, - 5,0,0,0,95,119,114,97,112,40,2,0,0,0,117,3, - 0,0,0,102,120,110,117,18,0,0,0,115,101,116,95,108, - 111,97,100,101,114,95,119,114,97,112,112,101,114,40,0,0, - 0,0,40,1,0,0,0,117,3,0,0,0,102,120,110,117, - 29,0,0,0,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,117,10,0,0,0,115,101,116,95,108,111,97,100,101,114, - 249,1,0,0,115,6,0,0,0,0,2,18,5,13,1,117, - 10,0,0,0,115,101,116,95,108,111,97,100,101,114,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,40,3,0,0,0, - 117,42,3,0,0,68,101,99,111,114,97,116,111,114,32,116, - 111,32,104,97,110,100,108,101,32,115,101,108,101,99,116,105, - 110,103,32,116,104,101,32,112,114,111,112,101,114,32,109,111, - 100,117,108,101,32,102,111,114,32,108,111,97,100,101,114,115, - 46,10,10,32,32,32,32,84,104,101,32,100,101,99,111,114, - 97,116,101,100,32,102,117,110,99,116,105,111,110,32,105,115, - 32,112,97,115,115,101,100,32,116,104,101,32,109,111,100,117, - 108,101,32,116,111,32,117,115,101,32,105,110,115,116,101,97, - 100,32,111,102,32,116,104,101,32,109,111,100,117,108,101,10, - 32,32,32,32,110,97,109,101,46,32,84,104,101,32,109,111, - 100,117,108,101,32,112,97,115,115,101,100,32,105,110,32,116, - 111,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105, - 115,32,101,105,116,104,101,114,32,102,114,111,109,32,115,121, - 115,46,109,111,100,117,108,101,115,32,105,102,10,32,32,32, - 32,105,116,32,97,108,114,101,97,100,121,32,101,120,105,115, - 116,115,32,111,114,32,105,115,32,97,32,110,101,119,32,109, - 111,100,117,108,101,46,32,73,102,32,116,104,101,32,109,111, - 100,117,108,101,32,105,115,32,110,101,119,44,32,116,104,101, - 110,32,95,95,110,97,109,101,95,95,10,32,32,32,32,105, - 115,32,115,101,116,32,116,104,101,32,102,105,114,115,116,32, - 97,114,103,117,109,101,110,116,32,116,111,32,116,104,101,32, - 109,101,116,104,111,100,44,32,95,95,108,111,97,100,101,114, - 95,95,32,105,115,32,115,101,116,32,116,111,32,115,101,108, - 102,44,32,97,110,100,10,32,32,32,32,95,95,112,97,99, - 107,97,103,101,95,95,32,105,115,32,115,101,116,32,97,99, - 99,111,114,100,105,110,103,108,121,32,40,105,102,32,115,101, - 108,102,46,105,115,95,112,97,99,107,97,103,101,40,41,32, - 105,115,32,100,101,102,105,110,101,100,41,32,119,105,108,108, - 32,98,101,32,115,101,116,10,32,32,32,32,98,101,102,111, - 114,101,32,105,116,32,105,115,32,112,97,115,115,101,100,32, - 116,111,32,116,104,101,32,100,101,99,111,114,97,116,101,100, - 32,102,117,110,99,116,105,111,110,32,40,105,102,32,115,101, - 108,102,46,105,115,95,112,97,99,107,97,103,101,40,41,32, - 100,111,101,115,10,32,32,32,32,110,111,116,32,119,111,114, - 107,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101, - 32,105,116,32,119,105,108,108,32,98,101,32,115,101,116,32, - 112,111,115,116,45,108,111,97,100,41,46,10,10,32,32,32, - 32,73,102,32,97,110,32,101,120,99,101,112,116,105,111,110, - 32,105,115,32,114,97,105,115,101,100,32,97,110,100,32,116, - 104,101,32,100,101,99,111,114,97,116,111,114,32,99,114,101, - 97,116,101,100,32,116,104,101,32,109,111,100,117,108,101,32, - 105,116,32,105,115,10,32,32,32,32,115,117,98,115,101,113, - 117,101,110,116,108,121,32,114,101,109,111,118,101,100,32,102, - 114,111,109,32,115,121,115,46,109,111,100,117,108,101,115,46, - 10,10,32,32,32,32,84,104,101,32,100,101,99,111,114,97, - 116,111,114,32,97,115,115,117,109,101,115,32,116,104,97,116, - 32,116,104,101,32,100,101,99,111,114,97,116,101,100,32,102, - 117,110,99,116,105,111,110,32,116,97,107,101,115,32,116,104, - 101,32,109,111,100,117,108,101,32,110,97,109,101,32,97,115, - 10,32,32,32,32,116,104,101,32,115,101,99,111,110,100,32, - 97,114,103,117,109,101,110,116,46,10,10,32,32,32,32,99, - 2,0,0,0,0,0,0,0,7,0,0,0,25,0,0,0, - 31,0,0,0,115,254,0,0,0,116,0,0,106,1,0,106, - 2,0,124,1,0,131,1,0,125,4,0,124,4,0,100,0, - 0,107,9,0,125,5,0,124,5,0,115,168,0,116,4,0, - 124,1,0,131,1,0,125,4,0,100,3,0,124,4,0,95, - 6,0,124,4,0,116,0,0,106,1,0,124,1,0,60,124, - 0,0,124,4,0,95,7,0,121,19,0,124,0,0,106,8, - 0,124,1,0,131,1,0,125,6,0,87,110,24,0,4,116, - 9,0,116,10,0,102,2,0,107,10,0,114,124,0,1,1, - 1,89,113,177,0,88,124,6,0,114,143,0,124,1,0,124, - 4,0,95,11,0,113,177,0,124,1,0,106,12,0,100,1, - 0,131,1,0,100,2,0,25,124,4,0,95,11,0,110,9, - 0,100,3,0,124,4,0,95,6,0,122,60,0,121,23,0, - 136,0,0,124,0,0,124,4,0,124,2,0,124,3,0,142, - 2,0,83,87,110,30,0,1,1,1,124,5,0,115,228,0, - 116,0,0,106,1,0,124,1,0,61,110,0,0,130,0,0, - 89,110,1,0,88,87,100,0,0,100,4,0,124,4,0,95, - 6,0,88,100,0,0,83,40,5,0,0,0,78,117,1,0, - 0,0,46,105,0,0,0,0,84,70,40,14,0,0,0,117, - 3,0,0,0,115,121,115,117,7,0,0,0,109,111,100,117, - 108,101,115,117,3,0,0,0,103,101,116,117,4,0,0,0, - 78,111,110,101,117,10,0,0,0,110,101,119,95,109,111,100, - 117,108,101,117,4,0,0,0,84,114,117,101,117,16,0,0, - 0,95,95,105,110,105,116,105,97,108,105,122,105,110,103,95, - 95,117,10,0,0,0,95,95,108,111,97,100,101,114,95,95, - 117,10,0,0,0,105,115,95,112,97,99,107,97,103,101,117, - 11,0,0,0,73,109,112,111,114,116,69,114,114,111,114,117, - 14,0,0,0,65,116,116,114,105,98,117,116,101,69,114,114, - 111,114,117,11,0,0,0,95,95,112,97,99,107,97,103,101, - 95,95,117,10,0,0,0,114,112,97,114,116,105,116,105,111, - 110,117,5,0,0,0,70,97,108,115,101,40,7,0,0,0, - 117,4,0,0,0,115,101,108,102,117,8,0,0,0,102,117, - 108,108,110,97,109,101,117,4,0,0,0,97,114,103,115,117, - 6,0,0,0,107,119,97,114,103,115,117,6,0,0,0,109, - 111,100,117,108,101,117,9,0,0,0,105,115,95,114,101,108, - 111,97,100,117,10,0,0,0,105,115,95,112,97,99,107,97, - 103,101,40,1,0,0,0,117,3,0,0,0,102,120,110,40, - 0,0,0,0,117,29,0,0,0,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,117,25,0,0,0,109,111,100,117,108, - 101,95,102,111,114,95,108,111,97,100,101,114,95,119,114,97, - 112,112,101,114,22,2,0,0,115,44,0,0,0,0,1,18, - 1,12,1,6,4,12,3,9,1,13,1,9,1,3,1,19, - 1,19,1,5,2,6,1,12,2,25,2,9,1,6,2,23, - 1,3,1,6,1,13,1,12,2,117,52,0,0,0,109,111, - 100,117,108,101,95,102,111,114,95,108,111,97,100,101,114,46, - 60,108,111,99,97,108,115,62,46,109,111,100,117,108,101,95, - 102,111,114,95,108,111,97,100,101,114,95,119,114,97,112,112, - 101,114,40,1,0,0,0,117,5,0,0,0,95,119,114,97, - 112,40,2,0,0,0,117,3,0,0,0,102,120,110,117,25, - 0,0,0,109,111,100,117,108,101,95,102,111,114,95,108,111, - 97,100,101,114,95,119,114,97,112,112,101,114,40,0,0,0, - 0,40,1,0,0,0,117,3,0,0,0,102,120,110,117,29, - 0,0,0,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, - 117,17,0,0,0,109,111,100,117,108,101,95,102,111,114,95, - 108,111,97,100,101,114,4,2,0,0,115,6,0,0,0,0, - 18,18,33,13,1,117,17,0,0,0,109,111,100,117,108,101, - 95,102,111,114,95,108,111,97,100,101,114,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,3,0,135,0,0,102,1,0,100,1, - 0,100,2,0,134,1,0,125,1,0,116,1,0,124,1,0, - 136,0,0,131,2,0,1,124,1,0,83,40,4,0,0,0, - 117,252,0,0,0,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,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,1,0,125,1,0, - 110,40,0,124,0,0,106,1,0,124,1,0,107,3,0,114, - 64,0,116,2,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,40,3, - 0,0,0,78,117,23,0,0,0,108,111,97,100,101,114,32, - 99,97,110,110,111,116,32,104,97,110,100,108,101,32,37,115, - 117,4,0,0,0,110,97,109,101,40,3,0,0,0,117,4, - 0,0,0,78,111,110,101,117,4,0,0,0,110,97,109,101, - 117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114, - 40,4,0,0,0,117,4,0,0,0,115,101,108,102,117,4, - 0,0,0,110,97,109,101,117,4,0,0,0,97,114,103,115, - 117,6,0,0,0,107,119,97,114,103,115,40,1,0,0,0, - 117,6,0,0,0,109,101,116,104,111,100,40,0,0,0,0, - 117,29,0,0,0,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,117,19,0,0,0,95,99,104,101,99,107,95,110,97, - 109,101,95,119,114,97,112,112,101,114,67,2,0,0,115,10, - 0,0,0,0,1,12,1,12,1,15,1,25,1,117,40,0, - 0,0,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,78,40,2,0,0,0, - 117,4,0,0,0,78,111,110,101,117,5,0,0,0,95,119, - 114,97,112,40,2,0,0,0,117,6,0,0,0,109,101,116, - 104,111,100,117,19,0,0,0,95,99,104,101,99,107,95,110, - 97,109,101,95,119,114,97,112,112,101,114,40,0,0,0,0, - 40,1,0,0,0,117,6,0,0,0,109,101,116,104,111,100, - 117,29,0,0,0,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,117,11,0,0,0,95,99,104,101,99,107,95,110,97, - 109,101,59,2,0,0,115,6,0,0,0,0,8,21,6,13, - 1,117,11,0,0,0,95,99,104,101,99,107,95,110,97,109, - 101,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,40,3, - 0,0,0,117,49,0,0,0,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,40,3,0, - 0,0,78,117,27,0,0,0,123,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,117,4,0,0,0,110,97,109,101,40,4,0,0, - 0,117,3,0,0,0,115,121,115,117,20,0,0,0,98,117, - 105,108,116,105,110,95,109,111,100,117,108,101,95,110,97,109, - 101,115,117,11,0,0,0,73,109,112,111,114,116,69,114,114, - 111,114,117,6,0,0,0,102,111,114,109,97,116,40,2,0, - 0,0,117,4,0,0,0,115,101,108,102,117,8,0,0,0, - 102,117,108,108,110,97,109,101,40,1,0,0,0,117,3,0, - 0,0,102,120,110,40,0,0,0,0,117,29,0,0,0,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,117,25,0,0, - 0,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,79,2,0,0,115,8, - 0,0,0,0,1,15,1,18,1,12,1,117,52,0,0,0, - 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,40,1,0,0,0,117,5,0,0,0,95,119, - 114,97,112,40,2,0,0,0,117,3,0,0,0,102,120,110, - 117,25,0,0,0,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,40,0, - 0,0,0,40,1,0,0,0,117,3,0,0,0,102,120,110, - 117,29,0,0,0,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,117,17,0,0,0,95,114,101,113,117,105,114,101,115, - 95,98,117,105,108,116,105,110,77,2,0,0,115,6,0,0, - 0,0,2,18,5,13,1,117,17,0,0,0,95,114,101,113, - 117,105,114,101,115,95,98,117,105,108,116,105,110,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,40,3,0,0,0,117, - 47,0,0,0,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,40,3,0,0,0,78,117,25,0, - 0,0,123,125,32,105,115,32,110,111,116,32,97,32,102,114, - 111,122,101,110,32,109,111,100,117,108,101,117,4,0,0,0, - 110,97,109,101,40,4,0,0,0,117,4,0,0,0,95,105, - 109,112,117,9,0,0,0,105,115,95,102,114,111,122,101,110, - 117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114, - 117,6,0,0,0,102,111,114,109,97,116,40,2,0,0,0, - 117,4,0,0,0,115,101,108,102,117,8,0,0,0,102,117, - 108,108,110,97,109,101,40,1,0,0,0,117,3,0,0,0, - 102,120,110,40,0,0,0,0,117,29,0,0,0,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,117,24,0,0,0,95, - 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,95, - 119,114,97,112,112,101,114,90,2,0,0,115,8,0,0,0, - 0,1,15,1,18,1,12,1,117,50,0,0,0,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,40, - 1,0,0,0,117,5,0,0,0,95,119,114,97,112,40,2, - 0,0,0,117,3,0,0,0,102,120,110,117,24,0,0,0, - 95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,110, - 95,119,114,97,112,112,101,114,40,0,0,0,0,40,1,0, - 0,0,117,3,0,0,0,102,120,110,117,29,0,0,0,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,117,16,0,0, - 0,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101, - 110,88,2,0,0,115,6,0,0,0,0,2,18,5,13,1, - 117,16,0,0,0,95,114,101,113,117,105,114,101,115,95,102, - 114,111,122,101,110,99,2,0,0,0,0,0,0,0,5,0, - 0,0,5,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,3,0,107,8,0,114,83,0, - 116,2,0,124,3,0,131,1,0,114,83,0,100,1,0,125, - 4,0,116,3,0,106,4,0,124,4,0,106,5,0,124,3, - 0,100,2,0,25,131,1,0,116,6,0,131,2,0,1,110, - 0,0,124,2,0,83,40,4,0,0,0,117,86,0,0,0, - 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,117,44,0,0,0,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,105,0,0,0,0,78,40,7,0, - 0,0,117,11,0,0,0,102,105,110,100,95,108,111,97,100, - 101,114,117,4,0,0,0,78,111,110,101,117,3,0,0,0, - 108,101,110,117,9,0,0,0,95,119,97,114,110,105,110,103, - 115,117,4,0,0,0,119,97,114,110,117,6,0,0,0,102, - 111,114,109,97,116,117,13,0,0,0,73,109,112,111,114,116, - 87,97,114,110,105,110,103,40,5,0,0,0,117,4,0,0, - 0,115,101,108,102,117,8,0,0,0,102,117,108,108,110,97, - 109,101,117,6,0,0,0,108,111,97,100,101,114,117,8,0, - 0,0,112,111,114,116,105,111,110,115,117,3,0,0,0,109, - 115,103,40,0,0,0,0,40,0,0,0,0,117,29,0,0, - 0,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,117,17, - 0,0,0,95,102,105,110,100,95,109,111,100,117,108,101,95, - 115,104,105,109,99,2,0,0,115,10,0,0,0,0,6,21, - 1,24,1,6,1,32,1,117,17,0,0,0,95,102,105,110, - 100,95,109,111,100,117,108,101,95,115,104,105,109,99,1,0, - 0,0,0,0,0,0,1,0,0,0,6,0,0,0,66,0, - 0,0,115,173,0,0,0,124,0,0,69,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,14,0,100,4,0,100,5,0,132,1,0,131,1, - 0,90,7,0,101,4,0,101,8,0,101,9,0,101,10,0, - 100,6,0,100,7,0,132,0,0,131,1,0,131,1,0,131, - 1,0,131,1,0,90,11,0,101,4,0,101,10,0,100,8, - 0,100,9,0,132,0,0,131,1,0,131,1,0,90,12,0, - 101,4,0,101,10,0,100,10,0,100,11,0,132,0,0,131, - 1,0,131,1,0,90,13,0,101,4,0,101,10,0,100,12, - 0,100,13,0,132,0,0,131,1,0,131,1,0,90,14,0, - 100,14,0,83,40,15,0,0,0,117,15,0,0,0,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,117,144,0, - 0,0,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,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,40,2,0,0, - 0,78,117,24,0,0,0,60,109,111,100,117,108,101,32,39, - 123,125,39,32,40,98,117,105,108,116,45,105,110,41,62,40, - 2,0,0,0,117,6,0,0,0,102,111,114,109,97,116,117, - 8,0,0,0,95,95,110,97,109,101,95,95,40,2,0,0, - 0,117,3,0,0,0,99,108,115,117,6,0,0,0,109,111, - 100,117,108,101,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,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, - 117,11,0,0,0,109,111,100,117,108,101,95,114,101,112,114, - 125,2,0,0,115,2,0,0,0,0,2,117,27,0,0,0, - 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,99,3,0,0,0, - 0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0, - 115,39,0,0,0,124,2,0,100,1,0,107,9,0,114,16, - 0,100,1,0,83,116,1,0,106,2,0,124,1,0,131,1, - 0,114,35,0,124,0,0,83,100,1,0,83,40,2,0,0, - 0,117,113,0,0,0,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,78,40,3,0,0,0,117,4,0, - 0,0,78,111,110,101,117,4,0,0,0,95,105,109,112,117, - 10,0,0,0,105,115,95,98,117,105,108,116,105,110,40,3, - 0,0,0,117,3,0,0,0,99,108,115,117,8,0,0,0, - 102,117,108,108,110,97,109,101,117,4,0,0,0,112,97,116, - 104,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, - 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,117,11,0, - 0,0,102,105,110,100,95,109,111,100,117,108,101,129,2,0, - 0,115,6,0,0,0,0,7,12,1,4,1,117,27,0,0, - 0,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,9,0,0,0,67,0,0, - 0,115,88,0,0,0,124,1,0,116,0,0,106,1,0,107, - 6,0,125,2,0,121,20,0,116,2,0,116,3,0,106,4, - 0,124,1,0,131,2,0,83,87,110,46,0,1,1,1,124, - 2,0,12,114,76,0,124,1,0,116,0,0,106,1,0,107, - 6,0,114,76,0,116,0,0,106,1,0,124,1,0,61,110, - 0,0,130,0,0,89,110,1,0,88,100,1,0,83,40,2, - 0,0,0,117,23,0,0,0,76,111,97,100,32,97,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,46,78, - 40,5,0,0,0,117,3,0,0,0,115,121,115,117,7,0, - 0,0,109,111,100,117,108,101,115,117,25,0,0,0,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,117,4,0,0,0,95,105,109,112, - 117,12,0,0,0,105,110,105,116,95,98,117,105,108,116,105, - 110,40,3,0,0,0,117,3,0,0,0,99,108,115,117,8, - 0,0,0,102,117,108,108,110,97,109,101,117,9,0,0,0, - 105,115,95,114,101,108,111,97,100,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,11,0,0,0,108,111,97,100,95,109, - 111,100,117,108,101,140,2,0,0,115,14,0,0,0,0,6, - 15,1,3,1,20,1,3,1,22,1,13,1,117,27,0,0, - 0,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,40,2,0,0,0,117, - 57,0,0,0,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,40,1, - 0,0,0,117,4,0,0,0,78,111,110,101,40,2,0,0, - 0,117,3,0,0,0,99,108,115,117,8,0,0,0,102,117, - 108,108,110,97,109,101,40,0,0,0,0,40,0,0,0,0, - 117,29,0,0,0,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,117,8,0,0,0,103,101,116,95,99,111,100,101,154, - 2,0,0,115,2,0,0,0,0,4,117,24,0,0,0,66, + 3,0,116,0,0,124,3,0,100,1,0,100,0,0,131,3, + 0,100,0,0,107,8,0,114,54,0,124,0,0,124,3,0, + 95,1,0,110,0,0,124,3,0,83,41,2,78,218,10,95, + 95,108,111,97,100,101,114,95,95,41,2,114,62,0,0,0, + 114,172,0,0,0,41,4,114,76,0,0,0,114,99,0,0, + 0,114,168,0,0,0,114,162,0,0,0,41,1,114,169,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,18,115,101, + 116,95,108,111,97,100,101,114,95,119,114,97,112,112,101,114, + 75,2,0,0,115,8,0,0,0,0,1,18,1,24,1,12, + 1,122,38,115,101,116,95,108,111,97,100,101,114,46,60,108, + 111,99,97,108,115,62,46,115,101,116,95,108,111,97,100,101, + 114,95,119,114,97,112,112,101,114,41,1,114,65,0,0,0, + 41,2,114,169,0,0,0,114,173,0,0,0,114,4,0,0, + 0,41,1,114,169,0,0,0,114,5,0,0,0,218,10,115, + 101,116,95,108,111,97,100,101,114,73,2,0,0,115,6,0, + 0,0,0,2,18,5,13,1,114,174,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,72,0,0,0,41,2,114,72, + 0,0,0,114,158,0,0,0,41,4,114,76,0,0,0,114, + 72,0,0,0,114,99,0,0,0,114,168,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,92,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,175,0, + 0,0,114,176,0,0,0,114,4,0,0,0,41,1,114,175, + 0,0,0,114,5,0,0,0,218,11,95,99,104,101,99,107, + 95,110,97,109,101,84,2,0,0,115,6,0,0,0,0,8, + 21,6,13,1,114,177,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,27,123,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, + 72,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,158,0,0,0,114,47,0,0,0,41,2,114,76,0, + 0,0,218,8,102,117,108,108,110,97,109,101,41,1,114,169, + 0,0,0,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,104,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,169,0,0,0,114,180,0, + 0,0,114,4,0,0,0,41,1,114,169,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,102,2,0,0,115,6,0,0,0,0, + 2,18,5,13,1,114,181,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,25,123,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,72,0,0, + 0,41,4,114,95,0,0,0,218,9,105,115,95,102,114,111, + 122,101,110,114,158,0,0,0,114,47,0,0,0,41,2,114, + 76,0,0,0,114,179,0,0,0,41,1,114,169,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,115,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,169,0,0,0,114,183,0,0,0,114,4,0,0, + 0,41,1,114,169,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,113, + 2,0,0,115,6,0,0,0,0,2,18,5,13,1,114,184, + 0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0, + 5,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,86,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,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,68,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,76,0, + 0,0,114,179,0,0,0,114,161,0,0,0,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,124,2,0, + 0,115,10,0,0,0,0,6,21,1,24,1,6,1,32,1, + 114,191,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,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,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,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,72,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,138,0,0,0,114,158,0,0,0,114,31,0,0,0, + 218,8,69,79,70,69,114,114,111,114,114,14,0,0,0,114, + 92,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,72, + 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,137,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,137, + 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,201,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,72,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,138,0,0,0, + 114,95,0,0,0,90,16,95,102,105,120,95,99,111,95,102, + 105,108,101,110,97,109,101,114,158,0,0,0,114,47,0,0, + 0,41,5,114,53,0,0,0,114,72,0,0,0,114,126,0, + 0,0,114,127,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,192, + 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,206,0,0,0,114,68,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,196,0,0,0,218,6, + 101,120,116,101,110,100,114,17,0,0,0,114,202,0,0,0, + 90,5,100,117,109,112,115,41,4,114,205,0,0,0,114,194, + 0,0,0,114,200,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,204, + 2,0,0,115,10,0,0,0,0,3,12,1,19,1,19,1, + 22,1,114,209,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,68,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,210,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,214,2,0,0,115, + 10,0,0,0,0,5,12,1,18,1,15,1,18,1,114,214, + 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,169,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,100,6,0,132,1,0, + 131,1,0,90,6,0,101,4,0,101,7,0,101,8,0,101, + 9,0,100,7,0,100,8,0,132,0,0,131,1,0,131,1, + 0,131,1,0,131,1,0,90,10,0,101,4,0,101,9,0, + 100,9,0,100,10,0,132,0,0,131,1,0,131,1,0,90, + 11,0,101,4,0,101,9,0,100,11,0,100,12,0,132,0, + 0,131,1,0,131,1,0,90,12,0,101,4,0,101,9,0, + 100,13,0,100,14,0,132,0,0,131,1,0,131,1,0,90, + 13,0,100,4,0,83,41,15,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,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,78,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,2, + 218,3,99,108,115,114,162,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,11,109,111,100,117,108, + 101,95,114,101,112,114,237,2,0,0,115,2,0,0,0,0, + 2,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, + 3,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, + 67,0,0,0,115,39,0,0,0,124,2,0,100,1,0,107, + 9,0,114,16,0,100,1,0,83,116,0,0,106,1,0,124, + 1,0,131,1,0,114,35,0,124,0,0,83,100,1,0,83, + 41,2,122,113,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,78,41,2,114,95,0,0,0,90,10,105, + 115,95,98,117,105,108,116,105,110,41,3,114,216,0,0,0, + 114,179,0,0,0,114,35,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,241,2,0,0,115,6,0,0,0,0, + 7,12,1,4,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,2,0,0,0,10, + 0,0,0,67,0,0,0,115,39,0,0,0,116,0,0,124, + 1,0,131,1,0,143,21,0,1,116,1,0,116,2,0,106, + 3,0,124,1,0,131,2,0,83,87,100,1,0,81,88,100, + 1,0,83,41,2,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,41, + 4,114,139,0,0,0,114,100,0,0,0,114,95,0,0,0, + 90,12,105,110,105,116,95,98,117,105,108,116,105,110,41,2, + 114,216,0,0,0,114,179,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,11,108,111,97,100,95, + 109,111,100,117,108,101,252,2,0,0,115,4,0,0,0,0, + 6,13,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,216,0,0,0,114,179,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,5,3,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,216,0, + 0,0,114,179,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,11,3,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,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,40,2,0,0,0,117,56,0,0,0,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,40,1,0,0,0,117,4,0, - 0,0,78,111,110,101,40,2,0,0,0,117,3,0,0,0, - 99,108,115,117,8,0,0,0,102,117,108,108,110,97,109,101, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,10,0,0, - 0,103,101,116,95,115,111,117,114,99,101,160,2,0,0,115, - 2,0,0,0,0,4,117,26,0,0,0,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,40,2,0,0,0,117,52,0,0,0,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,40,1,0,0,0,117,5,0,0,0,70,97,108,115, - 101,40,2,0,0,0,117,3,0,0,0,99,108,115,117,8, - 0,0,0,102,117,108,108,110,97,109,101,40,0,0,0,0, - 40,0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,105,115,95,112, - 97,99,107,97,103,101,166,2,0,0,115,2,0,0,0,0, - 4,117,26,0,0,0,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, - 78,40,15,0,0,0,117,8,0,0,0,95,95,110,97,109, - 101,95,95,117,10,0,0,0,95,95,109,111,100,117,108,101, - 95,95,117,12,0,0,0,95,95,113,117,97,108,110,97,109, - 101,95,95,117,7,0,0,0,95,95,100,111,99,95,95,117, - 11,0,0,0,99,108,97,115,115,109,101,116,104,111,100,117, - 11,0,0,0,109,111,100,117,108,101,95,114,101,112,114,117, - 4,0,0,0,78,111,110,101,117,11,0,0,0,102,105,110, - 100,95,109,111,100,117,108,101,117,11,0,0,0,115,101,116, - 95,112,97,99,107,97,103,101,117,10,0,0,0,115,101,116, - 95,108,111,97,100,101,114,117,17,0,0,0,95,114,101,113, - 117,105,114,101,115,95,98,117,105,108,116,105,110,117,11,0, - 0,0,108,111,97,100,95,109,111,100,117,108,101,117,8,0, - 0,0,103,101,116,95,99,111,100,101,117,10,0,0,0,103, - 101,116,95,115,111,117,114,99,101,117,10,0,0,0,105,115, - 95,112,97,99,107,97,103,101,40,1,0,0,0,117,10,0, - 0,0,95,95,108,111,99,97,108,115,95,95,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,15,0,0,0,66,117,105, - 108,116,105,110,73,109,112,111,114,116,101,114,116,2,0,0, - 115,28,0,0,0,16,7,6,2,18,4,3,1,18,10,3, - 1,3,1,3,1,27,11,3,1,21,5,3,1,21,5,3, - 1,117,15,0,0,0,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,99,1,0,0,0,0,0,0,0,1,0, - 0,0,6,0,0,0,66,0,0,0,115,173,0,0,0,124, - 0,0,69,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,14,0,100,4,0, - 100,5,0,132,1,0,131,1,0,90,7,0,101,4,0,101, - 8,0,101,9,0,101,10,0,100,6,0,100,7,0,132,0, - 0,131,1,0,131,1,0,131,1,0,131,1,0,90,11,0, - 101,4,0,101,10,0,100,8,0,100,9,0,132,0,0,131, - 1,0,131,1,0,90,12,0,101,4,0,101,10,0,100,10, - 0,100,11,0,132,0,0,131,1,0,131,1,0,90,13,0, - 101,4,0,101,10,0,100,12,0,100,13,0,132,0,0,131, - 1,0,131,1,0,90,14,0,100,14,0,83,40,15,0,0, - 0,117,14,0,0,0,70,114,111,122,101,110,73,109,112,111, - 114,116,101,114,117,142,0,0,0,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,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,40,2,0,0,0,78,117,22,0,0,0,60,109,111,100, - 117,108,101,32,39,123,125,39,32,40,102,114,111,122,101,110, - 41,62,40,2,0,0,0,117,6,0,0,0,102,111,114,109, - 97,116,117,8,0,0,0,95,95,110,97,109,101,95,95,40, - 2,0,0,0,117,3,0,0,0,99,108,115,117,1,0,0, - 0,109,40,0,0,0,0,40,0,0,0,0,117,29,0,0, - 0,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,117,11, - 0,0,0,109,111,100,117,108,101,95,114,101,112,114,182,2, - 0,0,115,2,0,0,0,0,2,117,26,0,0,0,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,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,40,2,0,0,0,117,21, - 0,0,0,70,105,110,100,32,97,32,102,114,111,122,101,110, - 32,109,111,100,117,108,101,46,78,40,3,0,0,0,117,4, - 0,0,0,95,105,109,112,117,9,0,0,0,105,115,95,102, - 114,111,122,101,110,117,4,0,0,0,78,111,110,101,40,3, - 0,0,0,117,3,0,0,0,99,108,115,117,8,0,0,0, - 102,117,108,108,110,97,109,101,117,4,0,0,0,112,97,116, - 104,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, - 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,117,11,0, - 0,0,102,105,110,100,95,109,111,100,117,108,101,186,2,0, - 0,115,2,0,0,0,0,3,117,26,0,0,0,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, - 4,0,0,0,9,0,0,0,67,0,0,0,115,100,0,0, - 0,124,1,0,116,0,0,106,1,0,107,6,0,125,2,0, - 121,32,0,116,2,0,116,3,0,106,4,0,124,1,0,131, - 2,0,125,3,0,124,3,0,96,5,0,124,3,0,83,87, - 110,46,0,1,1,1,124,2,0,12,114,88,0,124,1,0, - 116,0,0,106,1,0,107,6,0,114,88,0,116,0,0,106, - 1,0,124,1,0,61,110,0,0,130,0,0,89,110,1,0, - 88,100,1,0,83,40,2,0,0,0,117,21,0,0,0,76, + 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,216,0,0,0,114,179,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,157,0,0,0,17,3,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,11,99,108,97,115,115,109,101,116,104,111,100,114, + 217,0,0,0,114,218,0,0,0,114,171,0,0,0,114,174, + 0,0,0,114,181,0,0,0,114,219,0,0,0,114,220,0, + 0,0,114,221,0,0,0,114,157,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,215,0,0,0,228,2,0,0,115,28,0,0,0,12,7, + 6,2,18,4,3,1,18,10,3,1,3,1,3,1,27,6, + 3,1,21,5,3,1,21,5,3,1,114,215,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,169,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,100,6,0,132,1,0,131,1,0,90, + 6,0,101,4,0,101,7,0,101,8,0,101,9,0,100,7, + 0,100,8,0,132,0,0,131,1,0,131,1,0,131,1,0, + 131,1,0,90,10,0,101,4,0,101,9,0,100,9,0,100, + 10,0,132,0,0,131,1,0,131,1,0,90,11,0,101,4, + 0,101,9,0,100,11,0,100,12,0,132,0,0,131,1,0, + 131,1,0,90,12,0,101,4,0,101,9,0,100,13,0,100, + 14,0,132,0,0,131,1,0,131,1,0,90,13,0,100,4, + 0,83,41,15,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,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, + 78,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,2,114,216,0,0,0,218,1,109,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,217, + 0,0,0,33,3,0,0,115,2,0,0,0,0,2,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,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,21, + 70,105,110,100,32,97,32,102,114,111,122,101,110,32,109,111, + 100,117,108,101,46,78,41,2,114,95,0,0,0,114,182,0, + 0,0,41,3,114,216,0,0,0,114,179,0,0,0,114,35, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,218,0,0,0,37,3,0,0,115,2,0,0,0, + 0,3,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,3,0,0,0,10,0,0,0,67, + 0,0,0,115,51,0,0,0,116,0,0,124,1,0,131,1, + 0,143,33,0,1,116,1,0,116,2,0,106,3,0,124,1, + 0,131,2,0,125,2,0,124,2,0,96,4,0,124,2,0, + 83,87,100,1,0,81,88,100,1,0,83,41,2,122,21,76, 111,97,100,32,97,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,46,78,40,6,0,0,0,117,3,0,0,0,115, - 121,115,117,7,0,0,0,109,111,100,117,108,101,115,117,25, - 0,0,0,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,117,4,0,0, - 0,95,105,109,112,117,11,0,0,0,105,110,105,116,95,102, - 114,111,122,101,110,117,8,0,0,0,95,95,102,105,108,101, - 95,95,40,4,0,0,0,117,3,0,0,0,99,108,115,117, - 8,0,0,0,102,117,108,108,110,97,109,101,117,9,0,0, - 0,105,115,95,114,101,108,111,97,100,117,1,0,0,0,109, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0, - 0,108,111,97,100,95,109,111,100,117,108,101,191,2,0,0, - 115,18,0,0,0,0,6,15,1,3,1,18,2,6,1,8, - 1,3,1,22,1,13,1,117,26,0,0,0,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,40,1,0, - 0,0,117,45,0,0,0,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,40,2,0,0,0,117,4,0,0,0,95,105, - 109,112,117,17,0,0,0,103,101,116,95,102,114,111,122,101, - 110,95,111,98,106,101,99,116,40,2,0,0,0,117,3,0, - 0,0,99,108,115,117,8,0,0,0,102,117,108,108,110,97, - 109,101,40,0,0,0,0,40,0,0,0,0,117,29,0,0, - 0,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,117,8, - 0,0,0,103,101,116,95,99,111,100,101,208,2,0,0,115, - 2,0,0,0,0,4,117,23,0,0,0,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, - 40,2,0,0,0,117,54,0,0,0,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,40,1,0,0,0,117,4,0,0,0,78,111,110,101,40, - 2,0,0,0,117,3,0,0,0,99,108,115,117,8,0,0, - 0,102,117,108,108,110,97,109,101,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,10,0,0,0,103,101,116,95,115,111, - 117,114,99,101,214,2,0,0,115,2,0,0,0,0,4,117, - 25,0,0,0,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,40,1,0,0,0,117,46,0,0,0,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,40,2,0,0, - 0,117,4,0,0,0,95,105,109,112,117,17,0,0,0,105, - 115,95,102,114,111,122,101,110,95,112,97,99,107,97,103,101, - 40,2,0,0,0,117,3,0,0,0,99,108,115,117,8,0, - 0,0,102,117,108,108,110,97,109,101,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,105,115,95,112,97, - 99,107,97,103,101,220,2,0,0,115,2,0,0,0,0,4, - 117,25,0,0,0,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,78,40, - 15,0,0,0,117,8,0,0,0,95,95,110,97,109,101,95, - 95,117,10,0,0,0,95,95,109,111,100,117,108,101,95,95, - 117,12,0,0,0,95,95,113,117,97,108,110,97,109,101,95, - 95,117,7,0,0,0,95,95,100,111,99,95,95,117,11,0, - 0,0,99,108,97,115,115,109,101,116,104,111,100,117,11,0, - 0,0,109,111,100,117,108,101,95,114,101,112,114,117,4,0, - 0,0,78,111,110,101,117,11,0,0,0,102,105,110,100,95, - 109,111,100,117,108,101,117,11,0,0,0,115,101,116,95,112, - 97,99,107,97,103,101,117,10,0,0,0,115,101,116,95,108, - 111,97,100,101,114,117,16,0,0,0,95,114,101,113,117,105, - 114,101,115,95,102,114,111,122,101,110,117,11,0,0,0,108, - 111,97,100,95,109,111,100,117,108,101,117,8,0,0,0,103, - 101,116,95,99,111,100,101,117,10,0,0,0,103,101,116,95, - 115,111,117,114,99,101,117,10,0,0,0,105,115,95,112,97, - 99,107,97,103,101,40,1,0,0,0,117,10,0,0,0,95, - 95,108,111,99,97,108,115,95,95,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,14,0,0,0,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,173,2,0,0,115,28,0,0, - 0,16,7,6,2,18,4,3,1,18,4,3,1,3,1,3, - 1,27,14,3,1,21,5,3,1,21,5,3,1,117,14,0, - 0,0,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,66,0,0,0,115,101,0,0,0,124,0,0,69,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,11,0,90, - 7,0,101,8,0,100,4,0,100,5,0,132,0,0,131,1, - 0,90,9,0,101,8,0,100,6,0,100,7,0,132,0,0, - 131,1,0,90,10,0,101,8,0,100,10,0,100,8,0,100, - 9,0,132,1,0,131,1,0,90,12,0,100,10,0,83,40, - 12,0,0,0,117,21,0,0,0,87,105,110,100,111,119,115, - 82,101,103,105,115,116,114,121,70,105,110,100,101,114,117,67, - 0,0,0,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,10,32,32,32,32,117,59,0,0,0,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,117,65,0,0,0,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,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,40,1,0,0,0,78,40, - 5,0,0,0,117,7,0,0,0,95,119,105,110,114,101,103, - 117,7,0,0,0,79,112,101,110,75,101,121,117,17,0,0, - 0,72,75,69,89,95,67,85,82,82,69,78,84,95,85,83, - 69,82,117,12,0,0,0,87,105,110,100,111,119,115,69,114, - 114,111,114,117,18,0,0,0,72,75,69,89,95,76,79,67, - 65,76,95,77,65,67,72,73,78,69,40,2,0,0,0,117, - 3,0,0,0,99,108,115,117,3,0,0,0,107,101,121,40, - 0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,14,0,0,0, - 95,111,112,101,110,95,114,101,103,105,115,116,114,121,240,2, - 0,0,115,8,0,0,0,0,2,3,1,23,1,13,1,117, - 36,0,0,0,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, - 40,5,0,0,0,78,117,8,0,0,0,102,117,108,108,110, - 97,109,101,117,11,0,0,0,115,121,115,95,118,101,114,115, - 105,111,110,105,3,0,0,0,117,0,0,0,0,40,11,0, - 0,0,117,11,0,0,0,68,69,66,85,71,95,66,85,73, - 76,68,117,18,0,0,0,82,69,71,73,83,84,82,89,95, - 75,69,89,95,68,69,66,85,71,117,12,0,0,0,82,69, - 71,73,83,84,82,89,95,75,69,89,117,6,0,0,0,102, - 111,114,109,97,116,117,3,0,0,0,115,121,115,117,7,0, - 0,0,118,101,114,115,105,111,110,117,14,0,0,0,95,111, - 112,101,110,95,114,101,103,105,115,116,114,121,117,7,0,0, - 0,95,119,105,110,114,101,103,117,10,0,0,0,81,117,101, - 114,121,86,97,108,117,101,117,12,0,0,0,87,105,110,100, - 111,119,115,69,114,114,111,114,117,4,0,0,0,78,111,110, - 101,40,6,0,0,0,117,3,0,0,0,99,108,115,117,8, - 0,0,0,102,117,108,108,110,97,109,101,117,12,0,0,0, - 114,101,103,105,115,116,114,121,95,107,101,121,117,3,0,0, - 0,107,101,121,117,4,0,0,0,104,107,101,121,117,8,0, - 0,0,102,105,108,101,112,97,116,104,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,16,0,0,0,95,115,101,97,114, - 99,104,95,114,101,103,105,115,116,114,121,247,2,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,117,38,0,0,0,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,99,3,0,0,0,0,0,0,0,6,0, - 0,0,12,0,0,0,67,0,0,0,115,137,0,0,0,124, - 0,0,106,0,0,124,1,0,131,1,0,125,3,0,124,3, - 0,100,1,0,107,8,0,114,31,0,100,1,0,83,121,17, - 0,116,2,0,106,3,0,124,3,0,131,1,0,1,87,110, - 22,0,4,116,4,0,107,10,0,114,72,0,1,1,1,100, - 1,0,83,89,110,1,0,88,120,57,0,116,5,0,131,0, - 0,68,93,46,0,92,2,0,125,4,0,125,5,0,124,3, - 0,106,6,0,116,7,0,124,5,0,131,1,0,131,1,0, - 114,83,0,124,4,0,124,1,0,124,3,0,131,2,0,83, - 113,83,0,87,100,1,0,83,40,2,0,0,0,117,34,0, - 0,0,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,78,40,8,0,0,0,117,16,0,0,0,95, - 115,101,97,114,99,104,95,114,101,103,105,115,116,114,121,117, - 4,0,0,0,78,111,110,101,117,3,0,0,0,95,111,115, - 117,4,0,0,0,115,116,97,116,117,7,0,0,0,79,83, - 69,114,114,111,114,117,27,0,0,0,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,117,8,0,0,0,101,110,100,115,119,105, - 116,104,117,5,0,0,0,116,117,112,108,101,40,6,0,0, - 0,117,3,0,0,0,99,108,115,117,8,0,0,0,102,117, - 108,108,110,97,109,101,117,4,0,0,0,112,97,116,104,117, - 8,0,0,0,102,105,108,101,112,97,116,104,117,6,0,0, - 0,108,111,97,100,101,114,117,8,0,0,0,115,117,102,102, - 105,120,101,115,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,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, - 117,11,0,0,0,102,105,110,100,95,109,111,100,117,108,101, - 6,3,0,0,115,20,0,0,0,0,3,15,1,12,1,4, - 1,3,1,17,1,13,1,9,1,22,1,21,1,117,33,0, - 0,0,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,78,70,40,13,0,0,0,117,8,0,0,0,95, - 95,110,97,109,101,95,95,117,10,0,0,0,95,95,109,111, - 100,117,108,101,95,95,117,12,0,0,0,95,95,113,117,97, - 108,110,97,109,101,95,95,117,7,0,0,0,95,95,100,111, - 99,95,95,117,12,0,0,0,82,69,71,73,83,84,82,89, - 95,75,69,89,117,18,0,0,0,82,69,71,73,83,84,82, - 89,95,75,69,89,95,68,69,66,85,71,117,5,0,0,0, - 70,97,108,115,101,117,11,0,0,0,68,69,66,85,71,95, - 66,85,73,76,68,117,11,0,0,0,99,108,97,115,115,109, - 101,116,104,111,100,117,14,0,0,0,95,111,112,101,110,95, - 114,101,103,105,115,116,114,121,117,16,0,0,0,95,115,101, - 97,114,99,104,95,114,101,103,105,115,116,114,121,117,4,0, - 0,0,78,111,110,101,117,11,0,0,0,102,105,110,100,95, - 109,111,100,117,108,101,40,1,0,0,0,117,10,0,0,0, - 95,95,108,111,99,97,108,115,95,95,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,21,0,0,0,87,105,110,100,111, + 117,108,101,46,78,41,5,114,139,0,0,0,114,100,0,0, + 0,114,95,0,0,0,90,11,105,110,105,116,95,102,114,111, + 122,101,110,114,165,0,0,0,41,3,114,216,0,0,0,114, + 179,0,0,0,114,224,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,219,0,0,0,42,3,0, + 0,115,8,0,0,0,0,6,13,1,18,2,6,1,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,95,0,0,0,90,17,103,101,116,95,102, + 114,111,122,101,110,95,111,98,106,101,99,116,41,2,114,216, + 0,0,0,114,179,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,220,0,0,0,54,3,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,216,0,0,0,114,179,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,221,0,0,0,60,3, + 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, + 95,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,216,0,0,0,114,179, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,157,0,0,0,66,3,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,14,114, + 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,59, + 0,0,0,114,222,0,0,0,114,217,0,0,0,114,218,0, + 0,0,114,171,0,0,0,114,174,0,0,0,114,184,0,0, + 0,114,219,0,0,0,114,220,0,0,0,114,221,0,0,0, + 114,157,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,223,0,0,0,24,3, + 0,0,115,28,0,0,0,12,7,6,2,18,4,3,1,18, + 4,3,1,3,1,3,1,27,9,3,1,21,5,3,1,21, + 5,3,1,114,223,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,64,0,0,0,115,97,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,10,0,100,11,0,132,1,0,131,1,0,90,10,0,100, + 9,0,83,41,12,218,21,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,122,67,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,10,32,32,32, + 32,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,216,0,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,86,3,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, + 179,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, + 110,114,122,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, + 228,0,0,0,114,226,0,0,0,90,10,81,117,101,114,121, + 86,97,108,117,101,114,40,0,0,0,41,6,114,216,0,0, + 0,114,179,0,0,0,90,12,114,101,103,105,115,116,114,121, + 95,107,101,121,114,227,0,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,93,3,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, - 227,2,0,0,115,16,0,0,0,16,3,6,3,6,3,6, - 2,6,2,18,7,18,15,3,1,117,21,0,0,0,87,105, - 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,99,1,0,0,0,0,0,0,0,1,0,0,0, - 5,0,0,0,66,0,0,0,115,74,0,0,0,124,0,0, - 69,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,100,6, - 0,100,10,0,100,7,0,100,8,0,132,0,1,131,1,0, - 90,8,0,100,9,0,83,40,11,0,0,0,117,13,0,0, - 0,95,76,111,97,100,101,114,66,97,115,105,99,115,117,83, - 0,0,0,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,40,6,0,0,0,117,141,0, - 0,0,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,105, - 1,0,0,0,117,1,0,0,0,46,105,0,0,0,0,105, - 2,0,0,0,117,8,0,0,0,95,95,105,110,105,116,95, - 95,40,4,0,0,0,117,11,0,0,0,95,112,97,116,104, - 95,115,112,108,105,116,117,12,0,0,0,103,101,116,95,102, - 105,108,101,110,97,109,101,117,6,0,0,0,114,115,112,108, - 105,116,117,10,0,0,0,114,112,97,114,116,105,116,105,111, - 110,40,5,0,0,0,117,4,0,0,0,115,101,108,102,117, - 8,0,0,0,102,117,108,108,110,97,109,101,117,8,0,0, - 0,102,105,108,101,110,97,109,101,117,13,0,0,0,102,105, - 108,101,110,97,109,101,95,98,97,115,101,117,9,0,0,0, - 116,97,105,108,95,110,97,109,101,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,10,0,0,0,105,115,95,112,97,99, - 107,97,103,101,26,3,0,0,115,8,0,0,0,0,3,25, - 1,22,1,19,1,117,24,0,0,0,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,5,0,0,0,0,0,0,0,12,0,0,0,22, - 0,0,0,67,0,0,0,115,208,1,0,0,124,2,0,100, - 1,0,100,2,0,133,2,0,25,125,5,0,124,2,0,100, - 2,0,100,3,0,133,2,0,25,125,6,0,124,2,0,100, - 3,0,100,4,0,133,2,0,25,125,7,0,124,5,0,116, - 0,0,107,3,0,114,115,0,100,5,0,106,1,0,124,1, - 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,100,6,0,124,1,0, - 100,7,0,124,3,0,131,1,2,130,1,0,110,116,0,116, - 4,0,124,6,0,131,1,0,100,2,0,107,3,0,114,173, - 0,100,8,0,106,1,0,124,1,0,131,1,0,125,9,0, - 116,2,0,124,9,0,131,1,0,1,116,5,0,124,9,0, - 131,1,0,130,1,0,110,58,0,116,4,0,124,7,0,131, - 1,0,100,2,0,107,3,0,114,231,0,100,9,0,106,1, - 0,124,1,0,131,1,0,125,9,0,116,2,0,124,9,0, - 131,1,0,1,116,5,0,124,9,0,131,1,0,130,1,0, - 110,0,0,124,4,0,100,1,0,107,9,0,114,194,1,121, - 20,0,116,7,0,124,4,0,100,10,0,25,131,1,0,125, - 10,0,87,110,18,0,4,116,8,0,107,10,0,114,27,1, - 1,1,1,89,110,71,0,88,116,9,0,124,6,0,131,1, - 0,124,10,0,107,3,0,114,98,1,100,11,0,106,1,0, - 124,1,0,131,1,0,125,9,0,116,2,0,124,9,0,131, - 1,0,1,116,3,0,124,9,0,100,6,0,124,1,0,100, - 7,0,124,3,0,131,1,2,130,1,0,110,0,0,121,18, - 0,124,4,0,100,12,0,25,100,13,0,64,125,11,0,87, - 110,18,0,4,116,8,0,107,10,0,114,136,1,1,1,1, - 89,113,194,1,88,116,9,0,124,7,0,131,1,0,124,11, - 0,107,3,0,114,194,1,116,3,0,100,11,0,106,1,0, - 124,1,0,131,1,0,100,6,0,124,1,0,100,7,0,124, - 3,0,131,1,2,130,1,0,113,194,1,110,0,0,124,2, - 0,100,4,0,100,1,0,133,2,0,25,83,40,14,0,0, - 0,117,193,0,0,0,82,101,116,117,114,110,32,116,104,101, - 32,109,97,114,115,104,97,108,108,101,100,32,98,121,116,101, - 115,32,102,114,111,109,32,98,121,116,101,99,111,100,101,44, - 32,118,101,114,105,102,121,105,110,103,32,116,104,101,32,109, - 97,103,105,99,10,32,32,32,32,32,32,32,32,110,117,109, - 98,101,114,44,32,116,105,109,101,115,116,97,109,112,32,97, - 110,100,32,115,111,117,114,99,101,32,115,105,122,101,32,97, - 108,111,110,103,32,116,104,101,32,119,97,121,46,10,10,32, - 32,32,32,32,32,32,32,73,102,32,115,111,117,114,99,101, - 95,115,116,97,116,115,32,105,115,32,78,111,110,101,32,116, - 104,101,110,32,115,107,105,112,32,116,104,101,32,116,105,109, - 101,115,116,97,109,112,32,99,104,101,99,107,46,10,10,32, - 32,32,32,32,32,32,32,78,105,4,0,0,0,105,8,0, - 0,0,105,12,0,0,0,117,30,0,0,0,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,117,4,0,0,0,110, - 97,109,101,117,4,0,0,0,112,97,116,104,117,19,0,0, - 0,98,97,100,32,116,105,109,101,115,116,97,109,112,32,105, - 110,32,123,125,117,14,0,0,0,98,97,100,32,115,105,122, - 101,32,105,110,32,123,125,117,5,0,0,0,109,116,105,109, - 101,117,24,0,0,0,98,121,116,101,99,111,100,101,32,105, - 115,32,115,116,97,108,101,32,102,111,114,32,123,125,117,4, - 0,0,0,115,105,122,101,108,3,0,0,0,255,127,255,127, - 3,0,40,10,0,0,0,117,12,0,0,0,95,77,65,71, - 73,67,95,66,89,84,69,83,117,6,0,0,0,102,111,114, - 109,97,116,117,16,0,0,0,95,118,101,114,98,111,115,101, - 95,109,101,115,115,97,103,101,117,11,0,0,0,73,109,112, - 111,114,116,69,114,114,111,114,117,3,0,0,0,108,101,110, - 117,8,0,0,0,69,79,70,69,114,114,111,114,117,4,0, - 0,0,78,111,110,101,117,3,0,0,0,105,110,116,117,8, - 0,0,0,75,101,121,69,114,114,111,114,117,7,0,0,0, - 95,114,95,108,111,110,103,40,12,0,0,0,117,4,0,0, - 0,115,101,108,102,117,8,0,0,0,102,117,108,108,110,97, - 109,101,117,4,0,0,0,100,97,116,97,117,13,0,0,0, - 98,121,116,101,99,111,100,101,95,112,97,116,104,117,12,0, - 0,0,115,111,117,114,99,101,95,115,116,97,116,115,117,5, - 0,0,0,109,97,103,105,99,117,13,0,0,0,114,97,119, - 95,116,105,109,101,115,116,97,109,112,117,8,0,0,0,114, - 97,119,95,115,105,122,101,117,3,0,0,0,109,115,103,117, - 7,0,0,0,109,101,115,115,97,103,101,117,12,0,0,0, - 115,111,117,114,99,101,95,109,116,105,109,101,117,11,0,0, - 0,115,111,117,114,99,101,95,115,105,122,101,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,20,0,0,0,95,98,121, - 116,101,115,95,102,114,111,109,95,98,121,116,101,99,111,100, - 101,34,3,0,0,115,68,0,0,0,0,7,16,1,16,1, - 16,1,12,1,18,1,10,1,27,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,15,1,12,1,3,1, - 18,1,13,1,5,2,18,1,3,1,15,1,21,3,117,34, - 0,0,0,95,76,111,97,100,101,114,66,97,115,105,99,115, - 46,95,98,121,116,101,115,95,102,114,111,109,95,98,121,116, - 101,99,111,100,101,117,10,0,0,0,115,111,117,114,99,101, - 108,101,115,115,99,2,0,0,0,1,0,0,0,5,0,0, - 0,12,0,0,0,67,0,0,0,115,227,0,0,0,124,1, - 0,106,0,0,125,3,0,124,0,0,106,1,0,124,3,0, - 131,1,0,125,4,0,124,0,0,106,2,0,124,3,0,131, - 1,0,124,1,0,95,3,0,124,2,0,115,106,0,121,22, - 0,116,4,0,124,1,0,106,3,0,131,1,0,124,1,0, - 95,5,0,87,113,118,0,4,116,6,0,107,10,0,114,102, - 0,1,1,1,124,1,0,106,3,0,124,1,0,95,5,0, - 89,113,118,0,88,110,12,0,124,1,0,106,3,0,124,1, - 0,95,5,0,124,3,0,124,1,0,95,7,0,124,0,0, - 106,8,0,124,3,0,131,1,0,114,170,0,116,9,0,124, - 1,0,106,3,0,131,1,0,100,1,0,25,103,1,0,124, - 1,0,95,10,0,110,25,0,124,1,0,106,7,0,106,11, - 0,100,2,0,131,1,0,100,1,0,25,124,1,0,95,7, - 0,124,0,0,124,1,0,95,12,0,116,13,0,116,14,0, - 124,4,0,124,1,0,106,15,0,131,3,0,1,124,1,0, - 83,40,3,0,0,0,117,82,0,0,0,72,101,108,112,101, - 114,32,102,111,114,32,108,111,97,100,95,109,111,100,117,108, - 101,32,97,98,108,101,32,116,111,32,104,97,110,100,108,101, - 32,101,105,116,104,101,114,32,115,111,117,114,99,101,32,111, - 114,32,115,111,117,114,99,101,108,101,115,115,10,32,32,32, - 32,32,32,32,32,108,111,97,100,105,110,103,46,105,0,0, - 0,0,117,1,0,0,0,46,40,16,0,0,0,117,8,0, - 0,0,95,95,110,97,109,101,95,95,117,8,0,0,0,103, - 101,116,95,99,111,100,101,117,12,0,0,0,103,101,116,95, - 102,105,108,101,110,97,109,101,117,8,0,0,0,95,95,102, - 105,108,101,95,95,117,17,0,0,0,99,97,99,104,101,95, - 102,114,111,109,95,115,111,117,114,99,101,117,10,0,0,0, - 95,95,99,97,99,104,101,100,95,95,117,19,0,0,0,78, - 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, - 111,114,117,11,0,0,0,95,95,112,97,99,107,97,103,101, - 95,95,117,10,0,0,0,105,115,95,112,97,99,107,97,103, - 101,117,11,0,0,0,95,112,97,116,104,95,115,112,108,105, - 116,117,8,0,0,0,95,95,112,97,116,104,95,95,117,10, - 0,0,0,114,112,97,114,116,105,116,105,111,110,117,10,0, - 0,0,95,95,108,111,97,100,101,114,95,95,117,25,0,0, - 0,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,117,4,0,0,0,101, - 120,101,99,117,8,0,0,0,95,95,100,105,99,116,95,95, - 40,5,0,0,0,117,4,0,0,0,115,101,108,102,117,6, - 0,0,0,109,111,100,117,108,101,117,10,0,0,0,115,111, - 117,114,99,101,108,101,115,115,117,4,0,0,0,110,97,109, - 101,117,11,0,0,0,99,111,100,101,95,111,98,106,101,99, - 116,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, - 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,117,12,0, - 0,0,95,108,111,97,100,95,109,111,100,117,108,101,80,3, - 0,0,115,32,0,0,0,0,4,9,1,15,1,18,1,6, - 1,3,1,22,1,13,1,20,2,12,1,9,1,15,1,28, - 2,25,1,9,1,19,1,117,26,0,0,0,95,76,111,97, - 100,101,114,66,97,115,105,99,115,46,95,108,111,97,100,95, - 109,111,100,117,108,101,78,70,40,9,0,0,0,117,8,0, - 0,0,95,95,110,97,109,101,95,95,117,10,0,0,0,95, - 95,109,111,100,117,108,101,95,95,117,12,0,0,0,95,95, - 113,117,97,108,110,97,109,101,95,95,117,7,0,0,0,95, - 95,100,111,99,95,95,117,10,0,0,0,105,115,95,112,97, - 99,107,97,103,101,117,20,0,0,0,95,98,121,116,101,115, - 95,102,114,111,109,95,98,121,116,101,99,111,100,101,117,17, - 0,0,0,109,111,100,117,108,101,95,102,111,114,95,108,111, - 97,100,101,114,117,5,0,0,0,70,97,108,115,101,117,12, - 0,0,0,95,108,111,97,100,95,109,111,100,117,108,101,40, - 1,0,0,0,117,10,0,0,0,95,95,108,111,99,97,108, - 115,95,95,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 13,0,0,0,95,76,111,97,100,101,114,66,97,115,105,99, - 115,21,3,0,0,115,10,0,0,0,16,3,6,2,12,8, - 12,46,6,1,117,13,0,0,0,95,76,111,97,100,101,114, - 66,97,115,105,99,115,99,1,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,66,0,0,0,115,104,0,0,0, - 124,0,0,69,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,100,8,0,132,0,0,90,6,0, - 100,9,0,100,10,0,132,0,0,90,7,0,100,11,0,100, - 12,0,132,0,0,90,8,0,100,13,0,100,14,0,132,0, - 0,90,9,0,100,15,0,83,40,16,0,0,0,117,12,0, - 0,0,83,111,117,114,99,101,76,111,97,100,101,114,99,2, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,10,0,0,0,116,0,0,130,1,0,100,1, - 0,83,40,2,0,0,0,117,121,0,0,0,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, - 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, - 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, - 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, - 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, - 100,32,112,97,116,104,44,32,119,104,101,114,101,32,112,97, - 116,104,32,105,115,32,97,32,115,116,114,46,10,32,32,32, - 32,32,32,32,32,78,40,1,0,0,0,117,19,0,0,0, - 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, - 114,111,114,40,2,0,0,0,117,4,0,0,0,115,101,108, - 102,117,4,0,0,0,112,97,116,104,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,112,97,116,104,95, - 109,116,105,109,101,106,3,0,0,115,2,0,0,0,0,4, - 117,23,0,0,0,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,0,0,105,1,0,124,0,0,106,0,0,124, - 1,0,131,1,0,100,1,0,54,83,40,2,0,0,0,117, - 114,1,0,0,79,112,116,105,111,110,97,108,32,109,101,116, - 104,111,100,32,114,101,116,117,114,110,105,110,103,32,97,32, - 109,101,116,97,100,97,116,97,32,100,105,99,116,32,102,111, - 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 112,97,116,104,10,32,32,32,32,32,32,32,32,116,111,32, - 98,121,32,116,104,101,32,112,97,116,104,32,40,115,116,114, - 41,46,10,32,32,32,32,32,32,32,32,80,111,115,115,105, - 98,108,101,32,107,101,121,115,58,10,32,32,32,32,32,32, - 32,32,45,32,39,109,116,105,109,101,39,32,40,109,97,110, - 100,97,116,111,114,121,41,32,105,115,32,116,104,101,32,110, - 117,109,101,114,105,99,32,116,105,109,101,115,116,97,109,112, - 32,111,102,32,108,97,115,116,32,115,111,117,114,99,101,10, - 32,32,32,32,32,32,32,32,32,32,99,111,100,101,32,109, - 111,100,105,102,105,99,97,116,105,111,110,59,10,32,32,32, - 32,32,32,32,32,45,32,39,115,105,122,101,39,32,40,111, - 112,116,105,111,110,97,108,41,32,105,115,32,116,104,101,32, - 115,105,122,101,32,105,110,32,98,121,116,101,115,32,111,102, - 32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101, - 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, - 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, - 104,111,100,32,97,108,108,111,119,115,32,116,104,101,32,108, - 111,97,100,101,114,32,116,111,32,114,101,97,100,32,98,121, - 116,101,99,111,100,101,32,102,105,108,101,115,46,10,32,32, - 32,32,32,32,32,32,117,5,0,0,0,109,116,105,109,101, - 40,1,0,0,0,117,10,0,0,0,112,97,116,104,95,109, - 116,105,109,101,40,2,0,0,0,117,4,0,0,0,115,101, - 108,102,117,4,0,0,0,112,97,116,104,40,0,0,0,0, - 40,0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,112,97,116,104, - 95,115,116,97,116,115,112,3,0,0,115,2,0,0,0,0, - 10,117,23,0,0,0,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,0, - 0,0,115,16,0,0,0,124,0,0,106,0,0,124,2,0, - 124,3,0,131,2,0,83,40,1,0,0,0,117,228,0,0, - 0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,97, - 116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,32, - 102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,114, - 41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108, - 101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101, - 116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,32, - 116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,98, - 121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,10, - 32,32,32,32,32,32,32,32,84,104,101,32,115,111,117,114, - 99,101,32,112,97,116,104,32,105,115,32,110,101,101,100,101, - 100,32,105,110,32,111,114,100,101,114,32,116,111,32,99,111, - 114,114,101,99,116,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,40,1,0,0,0,117,8,0,0,0,115, - 101,116,95,100,97,116,97,40,4,0,0,0,117,4,0,0, - 0,115,101,108,102,117,11,0,0,0,115,111,117,114,99,101, - 95,112,97,116,104,117,10,0,0,0,99,97,99,104,101,95, - 112,97,116,104,117,4,0,0,0,100,97,116,97,40,0,0, - 0,0,40,0,0,0,0,117,29,0,0,0,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,117,15,0,0,0,95,99, - 97,99,104,101,95,98,121,116,101,99,111,100,101,124,3,0, - 0,115,2,0,0,0,0,8,117,28,0,0,0,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,0,0,0,67,0,0,0,115,10, - 0,0,0,116,0,0,130,1,0,100,1,0,83,40,2,0, - 0,0,117,151,0,0,0,79,112,116,105,111,110,97,108,32, - 109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105, - 116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41, - 32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32, - 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, - 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, - 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, - 115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110, - 103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,115,46,10,10,32,32,32,32,32,32,32,32,78,40, - 1,0,0,0,117,19,0,0,0,78,111,116,73,109,112,108, - 101,109,101,110,116,101,100,69,114,114,111,114,40,3,0,0, - 0,117,4,0,0,0,115,101,108,102,117,4,0,0,0,112, - 97,116,104,117,4,0,0,0,100,97,116,97,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,8,0,0,0,115,101,116, - 95,100,97,116,97,134,3,0,0,115,2,0,0,0,0,6, - 117,21,0,0,0,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,9,0,0,0,44,0,0,0,67,0,0,0,115, - 62,1,0,0,100,1,0,100,2,0,108,0,0,125,2,0, - 124,0,0,106,1,0,124,1,0,131,1,0,125,3,0,121, - 19,0,124,0,0,106,2,0,124,3,0,131,1,0,125,4, - 0,87,110,58,0,4,116,3,0,107,10,0,114,106,0,1, - 125,5,0,1,122,26,0,116,4,0,100,3,0,100,4,0, - 124,1,0,131,1,1,124,5,0,130,2,0,87,89,100,2, - 0,100,2,0,125,5,0,126,5,0,88,110,1,0,88,116, - 5,0,106,6,0,124,4,0,131,1,0,106,7,0,125,6, - 0,121,19,0,124,2,0,106,8,0,124,6,0,131,1,0, - 125,7,0,87,110,58,0,4,116,9,0,107,10,0,114,204, - 0,1,125,5,0,1,122,26,0,116,4,0,100,5,0,100, - 4,0,124,1,0,131,1,1,124,5,0,130,2,0,87,89, - 100,2,0,100,2,0,125,5,0,126,5,0,88,110,1,0, - 88,116,5,0,106,10,0,100,2,0,100,7,0,131,2,0, - 125,8,0,121,30,0,124,8,0,106,13,0,124,4,0,106, - 13,0,124,7,0,100,1,0,25,131,1,0,131,1,0,83, - 87,110,58,0,4,116,14,0,107,10,0,114,57,1,1,125, - 5,0,1,122,26,0,116,4,0,100,6,0,100,4,0,124, - 1,0,131,1,1,124,5,0,130,2,0,87,89,100,2,0, - 100,2,0,125,5,0,126,5,0,88,110,1,0,88,100,2, - 0,83,40,8,0,0,0,117,52,0,0,0,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,115,111,117,114,99,101,46, - 105,0,0,0,0,78,117,39,0,0,0,115,111,117,114,99, + 46,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, + 121,78,99,3,0,0,0,0,0,0,0,6,0,0,0,12, + 0,0,0,67,0,0,0,115,137,0,0,0,124,0,0,106, + 0,0,124,1,0,131,1,0,125,3,0,124,3,0,100,1, + 0,107,8,0,114,31,0,100,1,0,83,121,17,0,116,1, + 0,106,2,0,124,3,0,131,1,0,1,87,110,22,0,4, + 116,3,0,107,10,0,114,72,0,1,1,1,100,1,0,83, + 89,110,1,0,88,120,57,0,116,4,0,131,0,0,68,93, + 46,0,92,2,0,125,4,0,125,5,0,124,3,0,106,5, + 0,116,6,0,124,5,0,131,1,0,131,1,0,114,83,0, + 124,4,0,124,1,0,124,3,0,131,2,0,83,113,83,0, + 87,100,1,0,83,41,2,122,34,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,78,41,7,114,234, + 0,0,0,114,3,0,0,0,114,39,0,0,0,114,40,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,218, + 8,101,110,100,115,119,105,116,104,218,5,116,117,112,108,101, + 41,6,114,216,0,0,0,114,179,0,0,0,114,35,0,0, + 0,114,233,0,0,0,114,161,0,0,0,114,113,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 218,0,0,0,108,3,0,0,115,20,0,0,0,0,3,15, + 1,12,1,4,1,3,1,17,1,13,1,9,1,22,1,21, + 1,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,11,114,57,0,0,0,114,56,0,0,0, + 114,58,0,0,0,114,59,0,0,0,114,231,0,0,0,114, + 230,0,0,0,114,229,0,0,0,114,222,0,0,0,114,228, + 0,0,0,114,234,0,0,0,114,218,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,225,0,0,0,73,3,0,0,115,16,0,0,0,12, + 3,6,3,6,3,6,2,6,2,18,7,18,15,3,1,114, + 225,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,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,102,0,0,0,114,68,0,0,0, + 114,101,0,0,0,114,77,0,0,0,41,4,114,38,0,0, + 0,114,164,0,0,0,114,34,0,0,0,114,32,0,0,0, + 41,5,114,76,0,0,0,114,179,0,0,0,114,117,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,157,0,0,0,128, + 3,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,11,0,0,0,67,0,0,0,115, + 100,0,0,0,124,0,0,124,1,0,95,0,0,116,1,0, + 124,0,0,124,1,0,131,2,0,1,116,2,0,124,0,0, + 124,1,0,131,2,0,1,116,3,0,124,1,0,100,1,0, + 131,2,0,114,96,0,121,22,0,116,4,0,124,1,0,106, + 5,0,131,1,0,124,1,0,95,6,0,87,113,96,0,4, + 116,7,0,107,10,0,114,92,0,1,1,1,89,113,96,0, + 88,110,0,0,100,2,0,83,41,3,97,2,1,0,0,83, + 101,116,32,118,97,114,105,111,117,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,46,10,10,32,32,32,32,32,32,32,32,69,120, + 101,99,117,116,105,111,110,76,111,97,100,101,114,46,105,110, + 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,40, + 41,32,105,115,32,117,115,101,100,32,116,111,32,115,101,116, + 32,95,95,108,111,97,100,101,114,95,95,44,10,32,32,32, + 32,32,32,32,32,95,95,112,97,99,107,97,103,101,95,95, + 44,32,95,95,102,105,108,101,95,95,44,32,97,110,100,32, + 111,112,116,105,111,110,97,108,108,121,32,95,95,112,97,116, + 104,95,95,46,32,84,104,101,32,95,95,99,97,99,104,101, + 100,95,95,32,97,116,116,114,105,98,117,116,101,10,32,32, + 32,32,32,32,32,32,105,115,32,115,101,116,32,117,115,105, + 110,103,32,105,109,112,46,99,97,99,104,101,95,102,114,111, + 109,95,115,111,117,114,99,101,40,41,32,97,110,100,32,95, + 95,102,105,108,101,95,95,46,10,32,32,32,32,32,32,32, + 32,114,165,0,0,0,78,41,8,114,172,0,0,0,114,163, + 0,0,0,114,167,0,0,0,114,60,0,0,0,114,118,0, + 0,0,114,165,0,0,0,218,10,95,95,99,97,99,104,101, + 100,95,95,114,110,0,0,0,41,2,114,76,0,0,0,114, + 162,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,136,3,0,0,115,16,0,0,0,0, + 7,9,1,13,1,13,1,15,1,3,1,22,1,13,1,122, + 31,95,76,111,97,100,101,114,66,97,115,105,99,115,46,105, + 110,105,116,95,109,111,100,117,108,101,95,97,116,116,114,115, + 99,2,0,0,0,0,0,0,0,4,0,0,0,11,0,0, + 0,67,0,0,0,115,112,0,0,0,116,0,0,124,1,0, + 131,1,0,143,94,0,125,2,0,124,0,0,106,1,0,124, + 2,0,131,1,0,1,124,0,0,106,2,0,124,1,0,131, + 1,0,125,3,0,124,3,0,100,1,0,107,8,0,114,79, + 0,116,3,0,100,2,0,106,4,0,124,1,0,131,1,0, + 131,1,0,130,1,0,110,0,0,116,5,0,116,6,0,124, + 3,0,124,2,0,106,7,0,131,3,0,1,124,2,0,83, + 87,100,1,0,81,88,100,1,0,83,41,3,122,57,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,101,115,32,97,110,100,32,114,101,116, + 117,114,110,32,105,116,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,8, + 114,156,0,0,0,114,240,0,0,0,114,220,0,0,0,114, + 158,0,0,0,114,47,0,0,0,114,100,0,0,0,218,4, + 101,120,101,99,114,63,0,0,0,41,4,114,76,0,0,0, + 114,179,0,0,0,114,162,0,0,0,114,205,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,219, + 0,0,0,152,3,0,0,115,16,0,0,0,0,2,15,1, + 13,1,15,1,12,1,3,1,21,1,19,1,122,25,95,76, + 111,97,100,101,114,66,97,115,105,99,115,46,108,111,97,100, + 95,109,111,100,117,108,101,78,41,7,114,57,0,0,0,114, + 56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,157, + 0,0,0,114,240,0,0,0,114,219,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,238,0,0,0,123,3,0,0,115,8,0,0,0,12, + 3,6,2,12,8,12,16,114,238,0,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,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,100,8,0,132,0,0,90, + 6,0,100,9,0,100,10,0,132,0,0,90,7,0,100,11, + 0,100,18,0,100,13,0,100,14,0,132,0,1,90,8,0, + 100,15,0,100,16,0,132,0,0,90,9,0,100,17,0,83, + 41,19,218,12,83,111,117,114,99,101,76,111,97,100,101,114, + 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,115,10,0,0,0,116,0,0,130,1,0, + 100,1,0,83,41,2,122,178,79,112,116,105,111,110,97,108, + 32,109,101,116,104,111,100,32,116,104,97,116,32,114,101,116, + 117,114,110,115,32,116,104,101,32,109,111,100,105,102,105,99, + 97,116,105,111,110,32,116,105,109,101,32,40,97,110,32,105, + 110,116,41,32,102,111,114,32,116,104,101,10,32,32,32,32, + 32,32,32,32,115,112,101,99,105,102,105,101,100,32,112,97, + 116,104,44,32,119,104,101,114,101,32,112,97,116,104,32,105, + 115,32,97,32,115,116,114,46,10,10,32,32,32,32,32,32, + 32,32,82,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,78,41,1,218,7,73, + 79,69,114,114,111,114,41,2,114,76,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,166,3,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,0,0,105,1,0,124,0, + 0,106,0,0,124,1,0,131,1,0,100,1,0,54,83,41, + 2,97,170,1,0,0,79,112,116,105,111,110,97,108,32,109, + 101,116,104,111,100,32,114,101,116,117,114,110,105,110,103,32, + 97,32,109,101,116,97,100,97,116,97,32,100,105,99,116,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,112,97,116,104,10,32,32,32,32,32,32,32,32,116, + 111,32,98,121,32,116,104,101,32,112,97,116,104,32,40,115, + 116,114,41,46,10,32,32,32,32,32,32,32,32,80,111,115, + 115,105,98,108,101,32,107,101,121,115,58,10,32,32,32,32, + 32,32,32,32,45,32,39,109,116,105,109,101,39,32,40,109, + 97,110,100,97,116,111,114,121,41,32,105,115,32,116,104,101, + 32,110,117,109,101,114,105,99,32,116,105,109,101,115,116,97, + 109,112,32,111,102,32,108,97,115,116,32,115,111,117,114,99, + 101,10,32,32,32,32,32,32,32,32,32,32,99,111,100,101, + 32,109,111,100,105,102,105,99,97,116,105,111,110,59,10,32, + 32,32,32,32,32,32,32,45,32,39,115,105,122,101,39,32, + 40,111,112,116,105,111,110,97,108,41,32,105,115,32,116,104, + 101,32,115,105,122,101,32,105,110,32,98,121,116,101,115,32, + 111,102,32,116,104,101,32,115,111,117,114,99,101,32,99,111, + 100,101,46,10,10,32,32,32,32,32,32,32,32,73,109,112, + 108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109, + 101,116,104,111,100,32,97,108,108,111,119,115,32,116,104,101, + 32,108,111,97,100,101,114,32,116,111,32,114,101,97,100,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10, + 32,32,32,32,32,32,32,32,82,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,194,0,0,0,41,1,114,244,0,0,0,41,2,114,76, + 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,174,3,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,0,0,0,115,16,0,0, + 0,124,0,0,106,0,0,124,2,0,124,3,0,131,2,0, + 83,41,1,122,228,79,112,116,105,111,110,97,108,32,109,101, + 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, + 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, + 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, + 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, + 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, + 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, + 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, + 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, + 115,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, + 115,111,117,114,99,101,32,112,97,116,104,32,105,115,32,110, + 101,101,100,101,100,32,105,110,32,111,114,100,101,114,32,116, + 111,32,99,111,114,114,101,99,116,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,76,0,0,0,114,127,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,187,3,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,0,0,0,67,0,0,0, + 115,4,0,0,0,100,1,0,83,41,2,122,150,79,112,116, + 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, + 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, + 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, + 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, + 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, + 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, + 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, + 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, + 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, + 32,32,32,78,114,4,0,0,0,41,3,114,76,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,246,0,0,0,197,3, + 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,0,0,106,0,0,124,1, + 0,131,1,0,125,2,0,121,19,0,124,0,0,106,1,0, + 124,2,0,131,1,0,125,3,0,87,110,58,0,4,116,2, + 0,107,10,0,114,94,0,1,125,4,0,1,122,26,0,116, + 3,0,100,1,0,100,2,0,124,1,0,131,1,1,124,4, + 0,130,2,0,87,89,100,3,0,100,3,0,125,4,0,126, + 4,0,88,110,1,0,88,116,4,0,124,3,0,131,1,0, + 83,41,4,122,52,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,115,111,117,114,99,101,46,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,117,4,0,0,0,110,97,109,101,117,25,0,0,0, - 70,97,105,108,101,100,32,116,111,32,100,101,116,101,99,116, - 32,101,110,99,111,100,105,110,103,117,28,0,0,0,70,97, - 105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,115, - 111,117,114,99,101,32,102,105,108,101,84,40,15,0,0,0, - 117,8,0,0,0,116,111,107,101,110,105,122,101,117,12,0, - 0,0,103,101,116,95,102,105,108,101,110,97,109,101,117,8, - 0,0,0,103,101,116,95,100,97,116,97,117,7,0,0,0, - 73,79,69,114,114,111,114,117,11,0,0,0,73,109,112,111, - 114,116,69,114,114,111,114,117,3,0,0,0,95,105,111,117, - 7,0,0,0,66,121,116,101,115,73,79,117,8,0,0,0, - 114,101,97,100,108,105,110,101,117,15,0,0,0,100,101,116, - 101,99,116,95,101,110,99,111,100,105,110,103,117,11,0,0, - 0,83,121,110,116,97,120,69,114,114,111,114,117,25,0,0, - 0,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,117,4,0,0,0,78, - 111,110,101,117,4,0,0,0,84,114,117,101,117,6,0,0, - 0,100,101,99,111,100,101,117,18,0,0,0,85,110,105,99, - 111,100,101,68,101,99,111,100,101,69,114,114,111,114,40,9, - 0,0,0,117,4,0,0,0,115,101,108,102,117,8,0,0, - 0,102,117,108,108,110,97,109,101,117,8,0,0,0,116,111, - 107,101,110,105,122,101,117,4,0,0,0,112,97,116,104,117, - 12,0,0,0,115,111,117,114,99,101,95,98,121,116,101,115, - 117,3,0,0,0,101,120,99,117,10,0,0,0,114,101,97, - 100,115,111,117,114,99,101,117,8,0,0,0,101,110,99,111, - 100,105,110,103,117,15,0,0,0,110,101,119,108,105,110,101, - 95,100,101,99,111,100,101,114,40,0,0,0,0,40,0,0, - 0,0,117,29,0,0,0,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,117,10,0,0,0,103,101,116,95,115,111,117, - 114,99,101,143,3,0,0,115,38,0,0,0,0,2,12,1, - 15,1,3,1,19,1,18,1,9,1,31,1,18,1,3,1, - 19,1,18,1,9,1,31,1,18,1,3,1,30,1,18,1, - 9,1,117,23,0,0,0,83,111,117,114,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,12,0,0,0,45,0,0,0,67, - 0,0,0,115,52,2,0,0,124,0,0,106,0,0,124,1, - 0,131,1,0,125,2,0,100,10,0,125,3,0,121,16,0, - 116,2,0,124,2,0,131,1,0,125,4,0,87,110,24,0, - 4,116,3,0,107,10,0,114,63,0,1,1,1,100,10,0, - 125,4,0,89,110,14,1,88,121,19,0,124,0,0,106,4, + 40,41,114,72,0,0,0,78,41,5,114,164,0,0,0,218, + 8,103,101,116,95,100,97,116,97,114,40,0,0,0,114,158, + 0,0,0,114,214,0,0,0,41,5,114,76,0,0,0,114, + 179,0,0,0,114,35,0,0,0,114,212,0,0,0,218,3, + 101,120,99,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,221,0,0,0,204,3,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,95,111,112,116,105,109,105, + 122,101,114,29,0,0,0,99,3,0,0,0,1,0,0,0, + 4,0,0,0,9,0,0,0,67,0,0,0,115,31,0,0, + 0,116,0,0,116,1,0,124,1,0,124,2,0,100,1,0, + 100,2,0,100,3,0,100,4,0,124,3,0,131,4,2,83, + 41,5,122,130,82,101,116,117,114,110,32,116,104,101,32,99, + 111,100,101,32,111,98,106,101,99,116,32,99,111,109,112,105, + 108,101,100,32,102,114,111,109,32,115,111,117,114,99,101,46, + 10,10,32,32,32,32,32,32,32,32,84,104,101,32,39,100, + 97,116,97,39,32,97,114,103,117,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,241,0,0,0,218,12,100,111,110, + 116,95,105,110,104,101,114,105,116,84,114,104,0,0,0,41, + 2,114,100,0,0,0,218,7,99,111,109,112,105,108,101,41, + 4,114,76,0,0,0,114,53,0,0,0,114,35,0,0,0, + 114,250,0,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,214,3,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,45,0,0,0,67, + 0,0,0,115,177,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,0,1,1,1,100,1,0, + 125,4,0,89,110,202,0,88,121,19,0,124,0,0,106,3, 0,124,2,0,131,1,0,125,5,0,87,110,18,0,4,116, - 3,0,107,10,0,114,103,0,1,1,1,89,110,230,0,88, - 116,5,0,124,5,0,100,1,0,25,131,1,0,125,3,0, + 4,0,107,10,0,114,103,0,1,1,1,89,110,162,0,88, + 116,5,0,124,5,0,100,2,0,25,131,1,0,125,3,0, 121,19,0,124,0,0,106,6,0,124,4,0,131,1,0,125, 6,0,87,110,18,0,4,116,7,0,107,10,0,114,159,0, - 1,1,1,89,110,174,0,88,121,28,0,124,0,0,106,8, - 0,124,1,0,124,6,0,124,4,0,124,5,0,131,4,0, - 125,7,0,87,110,24,0,4,116,9,0,116,10,0,102,2, - 0,107,10,0,114,214,0,1,1,1,89,110,119,0,88,116, - 11,0,100,2,0,124,4,0,124,2,0,131,3,0,1,116, - 12,0,106,13,0,124,7,0,131,1,0,125,8,0,116,14, - 0,124,8,0,116,15,0,131,2,0,114,38,1,116,16,0, - 106,17,0,124,8,0,124,2,0,131,2,0,1,116,11,0, - 100,3,0,124,4,0,131,2,0,1,124,8,0,83,100,4, - 0,125,9,0,116,9,0,124,9,0,106,18,0,124,4,0, - 131,1,0,100,5,0,124,1,0,100,6,0,124,4,0,131, - 1,2,130,1,0,124,0,0,106,6,0,124,2,0,131,1, - 0,125,10,0,116,19,0,116,20,0,124,10,0,124,2,0, - 100,7,0,100,8,0,100,11,0,131,4,1,125,11,0,116, - 11,0,100,3,0,124,2,0,131,2,0,1,116,22,0,106, - 23,0,12,114,48,2,124,4,0,100,10,0,107,9,0,114, - 48,2,124,3,0,100,10,0,107,9,0,114,48,2,116,24, - 0,116,25,0,131,1,0,125,6,0,124,6,0,106,26,0, - 116,27,0,124,3,0,131,1,0,131,1,0,1,124,6,0, - 106,26,0,116,27,0,116,28,0,124,10,0,131,1,0,131, - 1,0,131,1,0,1,124,6,0,106,26,0,116,12,0,106, - 29,0,124,11,0,131,1,0,131,1,0,1,121,36,0,124, - 0,0,106,30,0,124,2,0,124,4,0,124,6,0,131,3, - 0,1,116,11,0,100,9,0,124,4,0,131,2,0,1,87, - 113,48,2,4,116,3,0,107,10,0,114,44,2,1,1,1, - 89,113,48,2,88,110,0,0,124,11,0,83,40,12,0,0, - 0,117,190,0,0,0,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,117,5,0,0,0,109,116,105,109,101,117,13, - 0,0,0,123,125,32,109,97,116,99,104,101,115,32,123,125, - 117,19,0,0,0,99,111,100,101,32,111,98,106,101,99,116, - 32,102,114,111,109,32,123,125,117,21,0,0,0,78,111,110, - 45,99,111,100,101,32,111,98,106,101,99,116,32,105,110,32, - 123,125,117,4,0,0,0,110,97,109,101,117,4,0,0,0, - 112,97,116,104,117,4,0,0,0,101,120,101,99,117,12,0, - 0,0,100,111,110,116,95,105,110,104,101,114,105,116,117,10, - 0,0,0,119,114,111,116,101,32,123,33,114,125,78,84,40, - 31,0,0,0,117,12,0,0,0,103,101,116,95,102,105,108, - 101,110,97,109,101,117,4,0,0,0,78,111,110,101,117,17, - 0,0,0,99,97,99,104,101,95,102,114,111,109,95,115,111, - 117,114,99,101,117,19,0,0,0,78,111,116,73,109,112,108, - 101,109,101,110,116,101,100,69,114,114,111,114,117,10,0,0, - 0,112,97,116,104,95,115,116,97,116,115,117,3,0,0,0, - 105,110,116,117,8,0,0,0,103,101,116,95,100,97,116,97, - 117,7,0,0,0,73,79,69,114,114,111,114,117,20,0,0, - 0,95,98,121,116,101,115,95,102,114,111,109,95,98,121,116, - 101,99,111,100,101,117,11,0,0,0,73,109,112,111,114,116, - 69,114,114,111,114,117,8,0,0,0,69,79,70,69,114,114, - 111,114,117,16,0,0,0,95,118,101,114,98,111,115,101,95, - 109,101,115,115,97,103,101,117,7,0,0,0,109,97,114,115, - 104,97,108,117,5,0,0,0,108,111,97,100,115,117,10,0, - 0,0,105,115,105,110,115,116,97,110,99,101,117,10,0,0, - 0,95,99,111,100,101,95,116,121,112,101,117,4,0,0,0, - 95,105,109,112,117,16,0,0,0,95,102,105,120,95,99,111, - 95,102,105,108,101,110,97,109,101,117,6,0,0,0,102,111, - 114,109,97,116,117,25,0,0,0,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,117,7,0,0,0,99,111,109,112,105,108,101,117,4, - 0,0,0,84,114,117,101,117,3,0,0,0,115,121,115,117, - 19,0,0,0,100,111,110,116,95,119,114,105,116,101,95,98, - 121,116,101,99,111,100,101,117,9,0,0,0,98,121,116,101, - 97,114,114,97,121,117,12,0,0,0,95,77,65,71,73,67, - 95,66,89,84,69,83,117,6,0,0,0,101,120,116,101,110, - 100,117,7,0,0,0,95,119,95,108,111,110,103,117,3,0, - 0,0,108,101,110,117,5,0,0,0,100,117,109,112,115,117, - 15,0,0,0,95,99,97,99,104,101,95,98,121,116,101,99, - 111,100,101,40,12,0,0,0,117,4,0,0,0,115,101,108, - 102,117,8,0,0,0,102,117,108,108,110,97,109,101,117,11, - 0,0,0,115,111,117,114,99,101,95,112,97,116,104,117,12, - 0,0,0,115,111,117,114,99,101,95,109,116,105,109,101,117, - 13,0,0,0,98,121,116,101,99,111,100,101,95,112,97,116, - 104,117,2,0,0,0,115,116,117,4,0,0,0,100,97,116, - 97,117,10,0,0,0,98,121,116,101,115,95,100,97,116,97, - 117,5,0,0,0,102,111,117,110,100,117,3,0,0,0,109, - 115,103,117,12,0,0,0,115,111,117,114,99,101,95,98,121, - 116,101,115,117,11,0,0,0,99,111,100,101,95,111,98,106, - 101,99,116,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 8,0,0,0,103,101,116,95,99,111,100,101,165,3,0,0, - 115,98,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,12,1,3,1,13,1,19,1,5, - 2,9,1,7,1,15,1,15,1,16,1,6,1,7,1,4, - 2,6,1,18,1,15,1,15,1,6,1,12,1,9,1,13, - 1,22,1,12,1,12,1,19,1,25,1,22,1,3,1,19, - 1,17,1,13,1,8,1,117,21,0,0,0,83,111,117,114, - 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,2,0, - 0,0,67,0,0,0,115,13,0,0,0,124,0,0,106,0, - 0,124,1,0,131,1,0,83,40,1,0,0,0,117,0,1, - 0,0,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,76,111,97, - 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,46, - 10,10,32,32,32,32,32,32,32,32,82,101,113,117,105,114, - 101,115,32,69,120,101,99,117,116,105,111,110,76,111,97,100, - 101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,32, - 97,110,100,32,82,101,115,111,117,114,99,101,76,111,97,100, - 101,114,46,103,101,116,95,100,97,116,97,32,116,111,32,98, - 101,10,32,32,32,32,32,32,32,32,105,109,112,108,101,109, - 101,110,116,101,100,32,116,111,32,108,111,97,100,32,115,111, - 117,114,99,101,32,99,111,100,101,46,32,85,115,101,32,111, - 102,32,98,121,116,101,99,111,100,101,32,105,115,32,100,105, - 99,116,97,116,101,100,32,98,121,32,119,104,101,116,104,101, - 114,10,32,32,32,32,32,32,32,32,103,101,116,95,99,111, - 100,101,32,117,115,101,115,47,119,114,105,116,101,115,32,98, - 121,116,101,99,111,100,101,46,10,10,32,32,32,32,32,32, - 32,32,40,1,0,0,0,117,12,0,0,0,95,108,111,97, - 100,95,109,111,100,117,108,101,40,2,0,0,0,117,4,0, - 0,0,115,101,108,102,117,8,0,0,0,102,117,108,108,110, - 97,109,101,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 11,0,0,0,108,111,97,100,95,109,111,100,117,108,101,227, - 3,0,0,115,2,0,0,0,0,8,117,24,0,0,0,83, - 111,117,114,99,101,76,111,97,100,101,114,46,108,111,97,100, - 95,109,111,100,117,108,101,78,40,10,0,0,0,117,8,0, - 0,0,95,95,110,97,109,101,95,95,117,10,0,0,0,95, - 95,109,111,100,117,108,101,95,95,117,12,0,0,0,95,95, - 113,117,97,108,110,97,109,101,95,95,117,10,0,0,0,112, - 97,116,104,95,109,116,105,109,101,117,10,0,0,0,112,97, - 116,104,95,115,116,97,116,115,117,15,0,0,0,95,99,97, - 99,104,101,95,98,121,116,101,99,111,100,101,117,8,0,0, - 0,115,101,116,95,100,97,116,97,117,10,0,0,0,103,101, - 116,95,115,111,117,114,99,101,117,8,0,0,0,103,101,116, - 95,99,111,100,101,117,11,0,0,0,108,111,97,100,95,109, - 111,100,117,108,101,40,1,0,0,0,117,10,0,0,0,95, - 95,108,111,99,97,108,115,95,95,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,12,0,0,0,83,111,117,114,99,101, - 76,111,97,100,101,114,104,3,0,0,115,14,0,0,0,16, - 2,12,6,12,12,12,10,12,9,12,22,12,62,117,12,0, - 0,0,83,111,117,114,99,101,76,111,97,100,101,114,99,1, - 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,2, - 0,0,0,115,92,0,0,0,124,0,0,69,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,101,5,0,135,0,0, - 102,1,0,100,4,0,100,5,0,134,0,0,131,1,0,90, - 6,0,101,5,0,100,6,0,100,7,0,132,0,0,131,1, - 0,90,7,0,100,8,0,100,9,0,132,0,0,90,8,0, - 135,0,0,83,40,10,0,0,0,117,10,0,0,0,70,105, - 108,101,76,111,97,100,101,114,117,103,0,0,0,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,40,2,0,0,0,117,75,0,0,0,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,40,2,0,0,0,117, - 4,0,0,0,110,97,109,101,117,4,0,0,0,112,97,116, - 104,40,3,0,0,0,117,4,0,0,0,115,101,108,102,117, - 8,0,0,0,102,117,108,108,110,97,109,101,117,4,0,0, - 0,112,97,116,104,40,0,0,0,0,40,0,0,0,0,117, - 29,0,0,0,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,117,8,0,0,0,95,95,105,110,105,116,95,95,243,3, - 0,0,115,4,0,0,0,0,3,9,1,117,19,0,0,0, - 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, - 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,40,1,0,0,0,117,26,0,0,0,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,40,3,0,0,0,117,5,0,0, - 0,115,117,112,101,114,117,10,0,0,0,70,105,108,101,76, - 111,97,100,101,114,117,11,0,0,0,108,111,97,100,95,109, - 111,100,117,108,101,40,2,0,0,0,117,4,0,0,0,115, - 101,108,102,117,8,0,0,0,102,117,108,108,110,97,109,101, - 40,1,0,0,0,117,9,0,0,0,95,95,99,108,97,115, - 115,95,95,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0,0,108, - 111,97,100,95,109,111,100,117,108,101,249,3,0,0,115,2, - 0,0,0,0,5,117,22,0,0,0,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,40,1,0,0,0,117,58,0,0,0,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,40,1,0,0,0,117,4,0,0,0,112, - 97,116,104,40,2,0,0,0,117,4,0,0,0,115,101,108, - 102,117,8,0,0,0,102,117,108,108,110,97,109,101,40,0, - 0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,12,0,0,0,103, - 101,116,95,102,105,108,101,110,97,109,101,0,4,0,0,115, - 2,0,0,0,0,3,117,23,0,0,0,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,40,3,0,0,0,117,39,0,0,0,82, + 1,1,1,89,110,106,0,88,121,34,0,116,8,0,124,6, + 0,100,3,0,124,5,0,100,4,0,124,1,0,100,5,0, + 124,4,0,131,1,3,125,7,0,87,110,24,0,4,116,9, + 0,116,10,0,102,2,0,107,10,0,114,220,0,1,1,1, + 89,110,45,0,88,116,11,0,100,6,0,124,4,0,124,2, + 0,131,3,0,1,116,12,0,124,7,0,100,4,0,124,1, + 0,100,7,0,124,4,0,100,8,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,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,194,0,0, + 0,114,198,0,0,0,114,72,0,0,0,114,35,0,0,0, + 122,13,123,125,32,109,97,116,99,104,101,115,32,123,125,114, + 126,0,0,0,114,127,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,164,0,0, + 0,114,118,0,0,0,114,110,0,0,0,114,245,0,0,0, + 114,243,0,0,0,114,14,0,0,0,114,248,0,0,0,114, + 40,0,0,0,114,201,0,0,0,114,158,0,0,0,114,197, + 0,0,0,114,138,0,0,0,114,206,0,0,0,114,253,0, + 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,209,0,0, + 0,114,31,0,0,0,114,247,0,0,0,41,10,114,76,0, + 0,0,114,179,0,0,0,114,127,0,0,0,114,199,0,0, + 0,114,126,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,212,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,220,0,0, + 0,222,3,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,124,0,0,0,41,10,114,57,0,0,0,114,56,0,0, + 0,114,58,0,0,0,114,244,0,0,0,114,245,0,0,0, + 114,247,0,0,0,114,246,0,0,0,114,221,0,0,0,114, + 253,0,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,242,0, + 0,0,164,3,0,0,115,14,0,0,0,12,2,12,8,12, + 13,12,10,12,7,12,10,18,8,114,242,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, + 0,0,0,115,88,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,101,5,0,135,0,0,102,1,0,100, + 4,0,100,5,0,134,0,0,131,1,0,90,6,0,101,5, + 0,100,6,0,100,7,0,132,0,0,131,1,0,90,7,0, + 100,8,0,100,9,0,132,0,0,90,8,0,135,0,0,83, + 41,10,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,72,0,0,0,114,35, + 0,0,0,41,3,114,76,0,0,0,114,179,0,0,0,114, + 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,77,0,0,0,23,4,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,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,26,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,41,3,114,149,0,0,0,114, + 1,1,0,0,114,219,0,0,0,41,2,114,76,0,0,0, + 114,179,0,0,0,41,1,114,151,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,219,0,0,0,29,4,0,0,115, + 2,0,0,0,0,5,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,76,0,0,0,114,179,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 164,0,0,0,36,4,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,117,1,0,0,0,114,78,40,3,0, - 0,0,117,3,0,0,0,95,105,111,117,6,0,0,0,70, - 105,108,101,73,79,117,4,0,0,0,114,101,97,100,40,3, - 0,0,0,117,4,0,0,0,115,101,108,102,117,4,0,0, - 0,112,97,116,104,117,4,0,0,0,102,105,108,101,40,0, - 0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,8,0,0,0,103, - 101,116,95,100,97,116,97,5,4,0,0,115,4,0,0,0, - 0,2,21,1,117,19,0,0,0,70,105,108,101,76,111,97, - 100,101,114,46,103,101,116,95,100,97,116,97,40,9,0,0, - 0,117,8,0,0,0,95,95,110,97,109,101,95,95,117,10, - 0,0,0,95,95,109,111,100,117,108,101,95,95,117,12,0, - 0,0,95,95,113,117,97,108,110,97,109,101,95,95,117,7, - 0,0,0,95,95,100,111,99,95,95,117,8,0,0,0,95, - 95,105,110,105,116,95,95,117,11,0,0,0,95,99,104,101, - 99,107,95,110,97,109,101,117,11,0,0,0,108,111,97,100, - 95,109,111,100,117,108,101,117,12,0,0,0,103,101,116,95, - 102,105,108,101,110,97,109,101,117,8,0,0,0,103,101,116, - 95,100,97,116,97,40,1,0,0,0,117,10,0,0,0,95, - 95,108,111,99,97,108,115,95,95,40,0,0,0,0,40,1, - 0,0,0,117,9,0,0,0,95,95,99,108,97,115,115,95, - 95,117,29,0,0,0,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,117,10,0,0,0,70,105,108,101,76,111,97,100, - 101,114,238,3,0,0,115,10,0,0,0,16,3,6,2,12, - 6,24,7,18,5,117,10,0,0,0,70,105,108,101,76,111, - 97,100,101,114,99,1,0,0,0,0,0,0,0,1,0,0, - 0,4,0,0,0,66,0,0,0,115,68,0,0,0,124,0, - 0,69,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,40,11,0,0,0,117,16,0,0,0,83,111,117,114, - 99,101,70,105,108,101,76,111,97,100,101,114,117,62,0,0, - 0,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,39,0,0,0,116,0,0,106,1,0,124, - 1,0,131,1,0,125,2,0,105,2,0,124,2,0,106,2, - 0,100,1,0,54,124,2,0,106,3,0,100,2,0,54,83, - 40,3,0,0,0,117,33,0,0,0,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,117,5,0,0,0, - 109,116,105,109,101,117,4,0,0,0,115,105,122,101,40,4, - 0,0,0,117,3,0,0,0,95,111,115,117,4,0,0,0, - 115,116,97,116,117,8,0,0,0,115,116,95,109,116,105,109, - 101,117,7,0,0,0,115,116,95,115,105,122,101,40,3,0, - 0,0,117,4,0,0,0,115,101,108,102,117,4,0,0,0, - 112,97,116,104,117,2,0,0,0,115,116,40,0,0,0,0, - 40,0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,112,97,116,104, - 95,115,116,97,116,115,15,4,0,0,115,4,0,0,0,0, - 2,15,1,117,27,0,0,0,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, - 13,0,0,0,67,0,0,0,115,81,0,0,0,121,22,0, - 116,0,0,106,1,0,124,1,0,131,1,0,106,2,0,125, - 4,0,87,110,24,0,4,116,3,0,107,10,0,114,48,0, - 1,1,1,100,1,0,125,4,0,89,110,1,0,88,124,4, - 0,100,2,0,79,125,4,0,124,0,0,106,4,0,124,2, - 0,124,3,0,100,3,0,124,4,0,131,2,1,83,40,4, - 0,0,0,78,105,182,1,0,0,105,128,0,0,0,117,5, - 0,0,0,95,109,111,100,101,40,5,0,0,0,117,3,0, - 0,0,95,111,115,117,4,0,0,0,115,116,97,116,117,7, - 0,0,0,115,116,95,109,111,100,101,117,7,0,0,0,79, - 83,69,114,114,111,114,117,8,0,0,0,115,101,116,95,100, - 97,116,97,40,5,0,0,0,117,4,0,0,0,115,101,108, - 102,117,11,0,0,0,115,111,117,114,99,101,95,112,97,116, - 104,117,13,0,0,0,98,121,116,101,99,111,100,101,95,112, - 97,116,104,117,4,0,0,0,100,97,116,97,117,4,0,0, - 0,109,111,100,101,40,0,0,0,0,40,0,0,0,0,117, - 29,0,0,0,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,117,15,0,0,0,95,99,97,99,104,101,95,98,121,116, - 101,99,111,100,101,20,4,0,0,115,12,0,0,0,0,2, - 3,1,22,1,13,1,11,3,10,1,117,32,0,0,0,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,117, - 5,0,0,0,95,109,111,100,101,105,182,1,0,0,99,3, - 0,0,0,1,0,0,0,9,0,0,0,18,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,40,4,0, - 0,0,117,27,0,0,0,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,117,27,0,0,0,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,117,12,0,0,0,99,114,101,97,116,101,100,32, - 123,33,114,125,40,11,0,0,0,117,11,0,0,0,95,112, - 97,116,104,95,115,112,108,105,116,117,11,0,0,0,95,112, - 97,116,104,95,105,115,100,105,114,117,6,0,0,0,97,112, - 112,101,110,100,117,8,0,0,0,114,101,118,101,114,115,101, - 100,117,10,0,0,0,95,112,97,116,104,95,106,111,105,110, - 117,3,0,0,0,95,111,115,117,5,0,0,0,109,107,100, - 105,114,117,15,0,0,0,70,105,108,101,69,120,105,115,116, - 115,69,114,114,111,114,117,7,0,0,0,79,83,69,114,114, - 111,114,117,16,0,0,0,95,118,101,114,98,111,115,101,95, - 109,101,115,115,97,103,101,117,13,0,0,0,95,119,114,105, - 116,101,95,97,116,111,109,105,99,40,9,0,0,0,117,4, - 0,0,0,115,101,108,102,117,4,0,0,0,112,97,116,104, - 117,4,0,0,0,100,97,116,97,117,5,0,0,0,95,109, - 111,100,101,117,6,0,0,0,112,97,114,101,110,116,117,8, - 0,0,0,102,105,108,101,110,97,109,101,117,10,0,0,0, - 112,97,116,104,95,112,97,114,116,115,117,4,0,0,0,112, - 97,114,116,117,3,0,0,0,101,120,99,40,0,0,0,0, - 40,0,0,0,0,117,29,0,0,0,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,117,8,0,0,0,115,101,116,95, - 100,97,116,97,31,4,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,117,25,0,0,0,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,40,7,0,0,0,117,8,0,0,0,95,95,110,97, - 109,101,95,95,117,10,0,0,0,95,95,109,111,100,117,108, - 101,95,95,117,12,0,0,0,95,95,113,117,97,108,110,97, - 109,101,95,95,117,7,0,0,0,95,95,100,111,99,95,95, - 117,10,0,0,0,112,97,116,104,95,115,116,97,116,115,117, - 15,0,0,0,95,99,97,99,104,101,95,98,121,116,101,99, - 111,100,101,117,8,0,0,0,115,101,116,95,100,97,116,97, - 40,1,0,0,0,117,10,0,0,0,95,95,108,111,99,97, - 108,115,95,95,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,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, - 117,16,0,0,0,83,111,117,114,99,101,70,105,108,101,76, - 111,97,100,101,114,11,4,0,0,115,8,0,0,0,16,2, - 6,2,12,5,12,11,117,16,0,0,0,83,111,117,114,99, - 101,70,105,108,101,76,111,97,100,101,114,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,66,0,0,0, - 115,62,0,0,0,124,0,0,69,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,40,9,0,0,0,117,20,0,0,0,83,111,117, - 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, - 114,117,45,0,0,0,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,2,0,0,0, - 4,0,0,0,67,0,0,0,115,19,0,0,0,124,0,0, - 106,0,0,124,1,0,100,1,0,100,2,0,131,1,1,83, - 40,3,0,0,0,78,117,10,0,0,0,115,111,117,114,99, - 101,108,101,115,115,84,40,2,0,0,0,117,12,0,0,0, - 95,108,111,97,100,95,109,111,100,117,108,101,117,4,0,0, - 0,84,114,117,101,40,2,0,0,0,117,4,0,0,0,115, - 101,108,102,117,8,0,0,0,102,117,108,108,110,97,109,101, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0, - 0,108,111,97,100,95,109,111,100,117,108,101,64,4,0,0, - 115,2,0,0,0,0,1,117,32,0,0,0,83,111,117,114, - 99,101,108,101,115,115,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,6,0,0,0,6,0,0,0,67,0,0, - 0,115,138,0,0,0,124,0,0,106,0,0,124,1,0,131, + 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,76, + 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,248,0,0, + 0,41,4,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,9,114,57,0,0,0,114,56,0,0,0,114, + 58,0,0,0,114,59,0,0,0,114,77,0,0,0,114,177, + 0,0,0,114,219,0,0,0,114,164,0,0,0,114,248,0, + 0,0,114,4,0,0,0,114,4,0,0,0,41,1,114,151, + 0,0,0,114,5,0,0,0,114,1,1,0,0,18,4,0, + 0,115,10,0,0,0,12,3,6,2,12,6,24,7,18,5, + 114,1,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,218,16,83,111,117,114,99,101,70,105,108,101,76,111,97, + 100,101,114,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,39,0,0,0,116,0,0, + 106,1,0,124,1,0,131,1,0,125,2,0,105,2,0,124, + 2,0,106,2,0,100,1,0,54,124,2,0,106,3,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,194,0,0,0,114,195, + 0,0,0,41,4,114,3,0,0,0,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,76,0,0,0,114,35,0,0,0,114,255, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,245,0,0,0,51,4,0,0,115,4,0,0,0, + 0,2,15,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,130,0,0,0,114,246, + 0,0,0,41,5,114,76,0,0,0,114,127,0,0,0,114, + 126,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,247,0, + 0,0,56,4,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,5,1,0,0,105,182,1,0,0,99,3,0,0,0, + 1,0,0,0,9,0,0,0,18,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,166,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,138,0,0,0,114,55,0,0,0,41,9,114,76, + 0,0,0,114,35,0,0,0,114,53,0,0,0,114,5,1, + 0,0,218,6,112,97,114,101,110,116,114,117,0,0,0,114, + 27,0,0,0,114,23,0,0,0,114,249,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,246,0, + 0,0,61,4,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,245,0,0,0,114,247,0,0,0,114,246,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,3,1,0,0,47,4,0,0,115, + 8,0,0,0,12,2,6,2,12,5,12,5,114,3,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,0,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,135,0,0, + 102,1,0,100,2,0,100,3,0,134,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,135,0,0,83,41,8,218,20,83, + 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, + 100,101,114,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,2,0,0,0,2, + 0,0,0,3,0,0,0,115,32,0,0,0,116,0,0,131, + 0,0,106,1,0,124,1,0,131,1,0,1,124,1,0,106, + 2,0,124,1,0,95,3,0,100,0,0,83,41,1,78,41, + 4,114,149,0,0,0,114,240,0,0,0,114,165,0,0,0, + 114,239,0,0,0,41,2,114,76,0,0,0,114,162,0,0, + 0,41,1,114,151,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,240,0,0,0,94,4,0,0,115,4,0,0,0, + 0,1,16,1,122,38,83,111,117,114,99,101,108,101,115,115, + 70,105,108,101,76,111,97,100,101,114,46,105,110,105,116,95, + 109,111,100,117,108,101,95,97,116,116,114,115,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,124,0,0,106,2,0,124,1,0,124,3,0, - 124,2,0,100,0,0,131,4,0,125,4,0,116,4,0,106, - 5,0,124,4,0,131,1,0,125,5,0,116,6,0,124,5, - 0,116,7,0,131,2,0,114,101,0,116,8,0,100,1,0, - 124,2,0,131,2,0,1,124,5,0,83,116,9,0,100,2, - 0,106,10,0,124,2,0,131,1,0,100,3,0,124,1,0, - 100,4,0,124,2,0,131,1,2,130,1,0,100,0,0,83, - 40,5,0,0,0,78,117,21,0,0,0,99,111,100,101,32, - 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, - 117,21,0,0,0,78,111,110,45,99,111,100,101,32,111,98, - 106,101,99,116,32,105,110,32,123,125,117,4,0,0,0,110, - 97,109,101,117,4,0,0,0,112,97,116,104,40,11,0,0, - 0,117,12,0,0,0,103,101,116,95,102,105,108,101,110,97, - 109,101,117,8,0,0,0,103,101,116,95,100,97,116,97,117, - 20,0,0,0,95,98,121,116,101,115,95,102,114,111,109,95, - 98,121,116,101,99,111,100,101,117,4,0,0,0,78,111,110, - 101,117,7,0,0,0,109,97,114,115,104,97,108,117,5,0, - 0,0,108,111,97,100,115,117,10,0,0,0,105,115,105,110, - 115,116,97,110,99,101,117,10,0,0,0,95,99,111,100,101, - 95,116,121,112,101,117,16,0,0,0,95,118,101,114,98,111, - 115,101,95,109,101,115,115,97,103,101,117,11,0,0,0,73, - 109,112,111,114,116,69,114,114,111,114,117,6,0,0,0,102, - 111,114,109,97,116,40,6,0,0,0,117,4,0,0,0,115, - 101,108,102,117,8,0,0,0,102,117,108,108,110,97,109,101, - 117,4,0,0,0,112,97,116,104,117,4,0,0,0,100,97, - 116,97,117,10,0,0,0,98,121,116,101,115,95,100,97,116, - 97,117,5,0,0,0,102,111,117,110,100,40,0,0,0,0, - 40,0,0,0,0,117,29,0,0,0,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,117,8,0,0,0,103,101,116,95, - 99,111,100,101,67,4,0,0,115,18,0,0,0,0,1,15, - 1,15,1,24,1,15,1,15,1,13,1,4,2,18,1,117, - 29,0,0,0,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,40, - 2,0,0,0,117,39,0,0,0,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,40,1,0,0,0,117,4,0,0,0,78,111,110,101,40, - 2,0,0,0,117,4,0,0,0,115,101,108,102,117,8,0, - 0,0,102,117,108,108,110,97,109,101,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,103,101,116,95,115, - 111,117,114,99,101,79,4,0,0,115,2,0,0,0,0,2, - 117,31,0,0,0,83,111,117,114,99,101,108,101,115,115,70, + 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,72,0,0,0,114,35,0,0,0,114, + 126,0,0,0,41,4,114,164,0,0,0,114,248,0,0,0, + 114,201,0,0,0,114,206,0,0,0,41,5,114,76,0,0, + 0,114,179,0,0,0,114,35,0,0,0,114,53,0,0,0, + 114,0,1,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,220,0,0,0,98,4,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,76,0,0,0,114, + 179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,221,0,0,0,104,4,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,40,7,0,0,0,117,8,0,0,0,95, - 95,110,97,109,101,95,95,117,10,0,0,0,95,95,109,111, - 100,117,108,101,95,95,117,12,0,0,0,95,95,113,117,97, - 108,110,97,109,101,95,95,117,7,0,0,0,95,95,100,111, - 99,95,95,117,11,0,0,0,108,111,97,100,95,109,111,100, - 117,108,101,117,8,0,0,0,103,101,116,95,99,111,100,101, - 117,10,0,0,0,103,101,116,95,115,111,117,114,99,101,40, - 1,0,0,0,117,10,0,0,0,95,95,108,111,99,97,108, - 115,95,95,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 20,0,0,0,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,60,4,0,0,115,8,0,0, - 0,16,2,6,2,12,3,12,12,117,20,0,0,0,83,111, - 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, - 101,114,99,1,0,0,0,0,0,0,0,1,0,0,0,5, - 0,0,0,66,0,0,0,115,104,0,0,0,124,0,0,69, - 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,101,5, - 0,101,6,0,101,7,0,100,4,0,100,5,0,132,0,0, - 131,1,0,131,1,0,131,1,0,90,8,0,100,6,0,100, - 7,0,132,0,0,90,9,0,100,8,0,100,9,0,132,0, - 0,90,10,0,100,10,0,100,11,0,132,0,0,90,11,0, - 100,12,0,83,40,13,0,0,0,117,19,0,0,0,69,120, + 117,114,99,101,41,7,114,57,0,0,0,114,56,0,0,0, + 114,58,0,0,0,114,59,0,0,0,114,240,0,0,0,114, + 220,0,0,0,114,221,0,0,0,114,4,0,0,0,114,4, + 0,0,0,41,1,114,151,0,0,0,114,5,0,0,0,114, + 8,1,0,0,90,4,0,0,115,8,0,0,0,12,2,6, + 2,18,4,12,6,114,8,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, + 118,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,101,5,0,101,6,0,101,7,0,100,4,0,100,5, + 0,132,0,0,131,1,0,131,1,0,131,1,0,90,8,0, + 100,6,0,100,7,0,132,0,0,90,9,0,100,8,0,100, + 9,0,132,0,0,90,10,0,100,10,0,100,11,0,132,0, + 0,90,11,0,101,5,0,100,12,0,100,13,0,132,0,0, + 131,1,0,90,12,0,100,14,0,83,41,15,218,19,69,120, 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,117,93,0,0,0,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,40,1,0,0,0,78,40,2,0,0,0,117,4, - 0,0,0,110,97,109,101,117,4,0,0,0,112,97,116,104, - 40,3,0,0,0,117,4,0,0,0,115,101,108,102,117,4, - 0,0,0,110,97,109,101,117,4,0,0,0,112,97,116,104, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,8,0,0, - 0,95,95,105,110,105,116,95,95,96,4,0,0,115,4,0, - 0,0,0,1,9,1,117,28,0,0,0,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, - 4,0,0,0,10,0,0,0,67,0,0,0,115,175,0,0, - 0,124,1,0,116,0,0,106,1,0,107,6,0,125,2,0, - 121,107,0,116,2,0,116,3,0,106,4,0,124,1,0,124, - 0,0,106,5,0,131,3,0,125,3,0,116,6,0,100,1, - 0,124,0,0,106,5,0,131,2,0,1,124,0,0,106,7, - 0,124,1,0,131,1,0,114,117,0,116,8,0,124,3,0, - 100,2,0,131,2,0,12,114,117,0,116,9,0,124,0,0, - 106,5,0,131,1,0,100,3,0,25,103,1,0,124,3,0, - 95,10,0,110,0,0,124,3,0,83,87,110,46,0,1,1, - 1,124,2,0,12,114,163,0,124,1,0,116,0,0,106,1, - 0,107,6,0,114,163,0,116,0,0,106,1,0,124,1,0, - 61,110,0,0,130,0,0,89,110,1,0,88,100,4,0,83, - 40,5,0,0,0,117,25,0,0,0,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,117,33,0,0,0,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,117,8,0,0,0,95,95, - 112,97,116,104,95,95,105,0,0,0,0,78,40,11,0,0, - 0,117,3,0,0,0,115,121,115,117,7,0,0,0,109,111, - 100,117,108,101,115,117,25,0,0,0,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,117,4,0,0,0,95,105,109,112,117,12,0,0, - 0,108,111,97,100,95,100,121,110,97,109,105,99,117,4,0, - 0,0,112,97,116,104,117,16,0,0,0,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,117,10,0,0,0, - 105,115,95,112,97,99,107,97,103,101,117,7,0,0,0,104, - 97,115,97,116,116,114,117,11,0,0,0,95,112,97,116,104, - 95,115,112,108,105,116,117,8,0,0,0,95,95,112,97,116, - 104,95,95,40,4,0,0,0,117,4,0,0,0,115,101,108, - 102,117,8,0,0,0,102,117,108,108,110,97,109,101,117,9, - 0,0,0,105,115,95,114,101,108,111,97,100,117,6,0,0, - 0,109,111,100,117,108,101,40,0,0,0,0,40,0,0,0, - 0,117,29,0,0,0,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,117,11,0,0,0,108,111,97,100,95,109,111,100, - 117,108,101,100,4,0,0,115,24,0,0,0,0,5,15,1, - 3,1,9,1,15,1,16,1,31,1,28,1,8,1,3,1, - 22,1,13,1,117,31,0,0,0,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,40,4,0,0,0,117,49,0,0,0,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,105,1,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,40,2,0,0,0, - 117,8,0,0,0,95,95,105,110,105,116,95,95,78,40,0, - 0,0,0,40,2,0,0,0,117,2,0,0,0,46,48,117, - 6,0,0,0,115,117,102,102,105,120,40,1,0,0,0,117, - 9,0,0,0,102,105,108,101,95,110,97,109,101,40,0,0, - 0,0,117,29,0,0,0,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,117,9,0,0,0,60,103,101,110,101,120,112, - 114,62,121,4,0,0,115,2,0,0,0,6,1,117,49,0, - 0,0,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,40,4,0,0,0,117,11,0,0,0,95,112,97, - 116,104,95,115,112,108,105,116,117,4,0,0,0,112,97,116, - 104,117,3,0,0,0,97,110,121,117,18,0,0,0,69,88, - 84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,83, - 40,2,0,0,0,117,4,0,0,0,115,101,108,102,117,8, - 0,0,0,102,117,108,108,110,97,109,101,40,0,0,0,0, - 40,1,0,0,0,117,9,0,0,0,102,105,108,101,95,110, - 97,109,101,117,29,0,0,0,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,117,10,0,0,0,105,115,95,112,97,99, - 107,97,103,101,118,4,0,0,115,6,0,0,0,0,2,19, - 1,18,1,117,30,0,0,0,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,40,2,0,0,0,117,63,0,0,0,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,40,1, - 0,0,0,117,4,0,0,0,78,111,110,101,40,2,0,0, - 0,117,4,0,0,0,115,101,108,102,117,8,0,0,0,102, - 117,108,108,110,97,109,101,40,0,0,0,0,40,0,0,0, - 0,117,29,0,0,0,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,117,8,0,0,0,103,101,116,95,99,111,100,101, - 124,4,0,0,115,2,0,0,0,0,2,117,28,0,0,0, - 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,40,2,0,0,0,117, - 53,0,0,0,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,40,1,0,0,0,117, - 4,0,0,0,78,111,110,101,40,2,0,0,0,117,4,0, - 0,0,115,101,108,102,117,8,0,0,0,102,117,108,108,110, - 97,109,101,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 10,0,0,0,103,101,116,95,115,111,117,114,99,101,128,4, - 0,0,115,2,0,0,0,0,2,117,30,0,0,0,69,120, + 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,72,0,0,0,114,35,0,0,0,41, + 3,114,76,0,0,0,114,72,0,0,0,114,35,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 77,0,0,0,121,4,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,3,0,0,0,11,0,0,0, + 67,0,0,0,115,126,0,0,0,116,0,0,124,1,0,131, + 1,0,143,108,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,116,5, + 0,100,1,0,124,0,0,106,4,0,131,2,0,1,124,0, + 0,106,6,0,124,1,0,131,1,0,114,112,0,116,7,0, + 124,2,0,100,2,0,131,2,0,12,114,112,0,116,8,0, + 124,0,0,106,4,0,131,1,0,100,3,0,25,103,1,0, + 124,2,0,95,9,0,110,0,0,124,2,0,83,87,100,4, + 0,81,88,100,4,0,83,41,5,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,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,160,0,0,0,114,68,0,0, + 0,78,41,10,114,139,0,0,0,114,100,0,0,0,114,95, + 0,0,0,90,12,108,111,97,100,95,100,121,110,97,109,105, + 99,114,35,0,0,0,114,138,0,0,0,114,157,0,0,0, + 114,60,0,0,0,114,38,0,0,0,114,160,0,0,0,41, + 3,114,76,0,0,0,114,179,0,0,0,114,162,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 219,0,0,0,125,4,0,0,115,14,0,0,0,0,5,13, + 1,9,1,15,1,16,1,31,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,77,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,144,0,0, + 0,141,4,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,103,101,116,95,115,111,117,114,99,101,78,40,12,0, - 0,0,117,8,0,0,0,95,95,110,97,109,101,95,95,117, - 10,0,0,0,95,95,109,111,100,117,108,101,95,95,117,12, - 0,0,0,95,95,113,117,97,108,110,97,109,101,95,95,117, - 7,0,0,0,95,95,100,111,99,95,95,117,8,0,0,0, - 95,95,105,110,105,116,95,95,117,11,0,0,0,95,99,104, - 101,99,107,95,110,97,109,101,117,11,0,0,0,115,101,116, - 95,112,97,99,107,97,103,101,117,10,0,0,0,115,101,116, - 95,108,111,97,100,101,114,117,11,0,0,0,108,111,97,100, - 95,109,111,100,117,108,101,117,10,0,0,0,105,115,95,112, - 97,99,107,97,103,101,117,8,0,0,0,103,101,116,95,99, - 111,100,101,117,10,0,0,0,103,101,116,95,115,111,117,114, - 99,101,40,1,0,0,0,117,10,0,0,0,95,95,108,111, - 99,97,108,115,95,95,40,0,0,0,0,40,0,0,0,0, - 117,29,0,0,0,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,117,19,0,0,0,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,88,4,0,0,115,16, - 0,0,0,16,6,6,2,12,4,3,1,3,1,24,16,12, - 6,12,4,117,19,0,0,0,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,66,0,0,0, - 115,134,0,0,0,124,0,0,69,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,40,21,0,0,0, - 117,14,0,0,0,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,117,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,40,1,0,0, - 0,78,40,6,0,0,0,117,5,0,0,0,95,110,97,109, - 101,117,5,0,0,0,95,112,97,116,104,117,5,0,0,0, - 116,117,112,108,101,117,16,0,0,0,95,103,101,116,95,112, - 97,114,101,110,116,95,112,97,116,104,117,17,0,0,0,95, - 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, - 117,12,0,0,0,95,112,97,116,104,95,102,105,110,100,101, - 114,40,4,0,0,0,117,4,0,0,0,115,101,108,102,117, - 4,0,0,0,110,97,109,101,117,4,0,0,0,112,97,116, - 104,117,11,0,0,0,112,97,116,104,95,102,105,110,100,101, - 114,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, - 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,117,8,0, - 0,0,95,95,105,110,105,116,95,95,140,4,0,0,115,8, - 0,0,0,0,1,9,1,9,1,21,1,117,23,0,0,0, - 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,40,7,0,0,0,117,62,0,0,0, - 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,117,1, - 0,0,0,46,117,0,0,0,0,117,3,0,0,0,115,121, - 115,117,4,0,0,0,112,97,116,104,117,8,0,0,0,95, - 95,112,97,116,104,95,95,40,2,0,0,0,117,3,0,0, - 0,115,121,115,117,4,0,0,0,112,97,116,104,40,2,0, - 0,0,117,5,0,0,0,95,110,97,109,101,117,10,0,0, - 0,114,112,97,114,116,105,116,105,111,110,40,4,0,0,0, - 117,4,0,0,0,115,101,108,102,117,6,0,0,0,112,97, - 114,101,110,116,117,3,0,0,0,100,111,116,117,2,0,0, - 0,109,101,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 23,0,0,0,95,102,105,110,100,95,112,97,114,101,110,116, - 95,112,97,116,104,95,110,97,109,101,115,146,4,0,0,115, - 8,0,0,0,0,2,27,1,12,2,4,3,117,38,0,0, - 0,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,40,1,0,0,0,78,40,4,0, - 0,0,117,23,0,0,0,95,102,105,110,100,95,112,97,114, - 101,110,116,95,112,97,116,104,95,110,97,109,101,115,117,7, - 0,0,0,103,101,116,97,116,116,114,117,3,0,0,0,115, - 121,115,117,7,0,0,0,109,111,100,117,108,101,115,40,3, - 0,0,0,117,4,0,0,0,115,101,108,102,117,18,0,0, - 0,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, - 97,109,101,117,14,0,0,0,112,97,116,104,95,97,116,116, - 114,95,110,97,109,101,40,0,0,0,0,40,0,0,0,0, - 117,29,0,0,0,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,117,16,0,0,0,95,103,101,116,95,112,97,114,101, - 110,116,95,112,97,116,104,156,4,0,0,115,4,0,0,0, - 0,1,18,1,117,31,0,0,0,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,4,0,0,0,3,0,0,0,67,0,0,0,115,103,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,96,0,124,0,0,106,3,0,124,0,0,106,4,0,124, - 1,0,131,2,0,92,2,0,125,2,0,125,3,0,124,2, - 0,100,0,0,107,8,0,114,84,0,124,3,0,124,0,0, - 95,6,0,110,0,0,124,1,0,124,0,0,95,2,0,110, - 0,0,124,0,0,106,6,0,83,40,1,0,0,0,78,40, - 7,0,0,0,117,5,0,0,0,116,117,112,108,101,117,16, - 0,0,0,95,103,101,116,95,112,97,114,101,110,116,95,112, - 97,116,104,117,17,0,0,0,95,108,97,115,116,95,112,97, - 114,101,110,116,95,112,97,116,104,117,12,0,0,0,95,112, - 97,116,104,95,102,105,110,100,101,114,117,5,0,0,0,95, - 110,97,109,101,117,4,0,0,0,78,111,110,101,117,5,0, - 0,0,95,112,97,116,104,40,4,0,0,0,117,4,0,0, - 0,115,101,108,102,117,11,0,0,0,112,97,114,101,110,116, - 95,112,97,116,104,117,6,0,0,0,108,111,97,100,101,114, - 117,8,0,0,0,110,101,119,95,112,97,116,104,40,0,0, - 0,0,40,0,0,0,0,117,29,0,0,0,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,117,12,0,0,0,95,114, - 101,99,97,108,99,117,108,97,116,101,160,4,0,0,115,14, - 0,0,0,0,2,18,1,15,1,27,3,12,1,12,1,12, - 1,117,27,0,0,0,95,78,97,109,101,115,112,97,99,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,145,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,76,0,0,0,114,179,0,0,0, + 114,4,0,0,0,41,1,114,11,1,0,0,114,5,0,0, + 0,114,157,0,0,0,138,4,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,76, + 0,0,0,114,179,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,220,0,0,0,144,4,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,76,0,0,0,114,179,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,221,0, + 0,0,148,4,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,76,0,0,0,114,179,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,164, + 0,0,0,152,4,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,77,0,0,0,114,177,0,0, + 0,114,171,0,0,0,114,174,0,0,0,114,219,0,0,0, + 114,157,0,0,0,114,220,0,0,0,114,221,0,0,0,114, + 164,0,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,113,4,0, + 0,115,18,0,0,0,12,6,6,2,12,4,3,1,3,1, + 24,11,12,6,12,4,12,4,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,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,140,0,0,0,218,5, + 95,112,97,116,104,114,237,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, + 76,0,0,0,114,72,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,77,0,0,0,165, + 4,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,102,0,0,0,114, + 30,0,0,0,114,7,0,0,0,114,35,0,0,0,114,160, + 0,0,0,41,2,122,3,115,121,115,122,4,112,97,116,104, + 41,2,114,140,0,0,0,114,32,0,0,0,41,4,114,76, + 0,0,0,114,7,1,0,0,218,3,100,111,116,114,81,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,171,4,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,20,1,0,0,114,62,0, + 0,0,114,7,0,0,0,114,141,0,0,0,41,3,114,76, + 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,15,1,0,0,181,4,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,4,0,0,0,3,0,0,0,67,0,0,0,115,103, + 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,96,0,124,0,0,106,3,0,124,0,0,106,4,0, + 124,1,0,131,2,0,92,2,0,125,2,0,125,3,0,124, + 2,0,100,0,0,107,8,0,114,84,0,124,3,0,124,0, + 0,95,5,0,110,0,0,124,1,0,124,0,0,95,2,0, + 110,0,0,124,0,0,106,5,0,83,41,1,78,41,6,114, + 237,0,0,0,114,15,1,0,0,114,16,1,0,0,114,17, + 1,0,0,114,140,0,0,0,114,14,1,0,0,41,4,114, + 76,0,0,0,90,11,112,97,114,101,110,116,95,112,97,116, + 104,114,161,0,0,0,90,8,110,101,119,95,112,97,116,104, + 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,185,4,0, + 0,115,14,0,0,0,0,2,18,1,15,1,27,3,12,1, + 12,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,40,1,0,0,0, - 78,40,2,0,0,0,117,4,0,0,0,105,116,101,114,117, - 12,0,0,0,95,114,101,99,97,108,99,117,108,97,116,101, - 40,1,0,0,0,117,4,0,0,0,115,101,108,102,40,0, - 0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,8,0,0,0,95, - 95,105,116,101,114,95,95,172,4,0,0,115,2,0,0,0, - 0,1,117,23,0,0,0,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,40,1,0,0,0,78,40,2, - 0,0,0,117,3,0,0,0,108,101,110,117,12,0,0,0, - 95,114,101,99,97,108,99,117,108,97,116,101,40,1,0,0, - 0,117,4,0,0,0,115,101,108,102,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,7,0,0,0,95,95,108,101,110, - 95,95,175,4,0,0,115,2,0,0,0,0,1,117,22,0, - 0,0,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,40,2,0,0,0,78,117,20,0,0,0,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,40,123,33,114,125, - 41,40,2,0,0,0,117,6,0,0,0,102,111,114,109,97, - 116,117,5,0,0,0,95,112,97,116,104,40,1,0,0,0, - 117,4,0,0,0,115,101,108,102,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,8,0,0,0,95,95,114,101,112,114, - 95,95,178,4,0,0,115,2,0,0,0,0,1,117,23,0, - 0,0,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,40,1,0,0,0,78,40,1,0,0,0,117,12, - 0,0,0,95,114,101,99,97,108,99,117,108,97,116,101,40, - 2,0,0,0,117,4,0,0,0,115,101,108,102,117,4,0, - 0,0,105,116,101,109,40,0,0,0,0,40,0,0,0,0, - 117,29,0,0,0,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,117,12,0,0,0,95,95,99,111,110,116,97,105,110, - 115,95,95,181,4,0,0,115,2,0,0,0,0,1,117,27, - 0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,116, + 0,106,1,0,131,0,0,131,1,0,83,41,1,78,41,2, + 218,4,105,116,101,114,114,21,1,0,0,41,1,114,76,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,197,4,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,21,1,0,0,41,1,114,76,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,200,4,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,14,1,0,0,41,1,114,76,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 88,0,0,0,203,4,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,21,1,0,0,41,2,114,76, + 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,206,4,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,40,1,0,0, - 0,78,40,2,0,0,0,117,5,0,0,0,95,112,97,116, - 104,117,6,0,0,0,97,112,112,101,110,100,40,2,0,0, - 0,117,4,0,0,0,115,101,108,102,117,4,0,0,0,105, - 116,101,109,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 6,0,0,0,97,112,112,101,110,100,184,4,0,0,115,2, - 0,0,0,0,1,117,21,0,0,0,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,78, - 40,13,0,0,0,117,8,0,0,0,95,95,110,97,109,101, - 95,95,117,10,0,0,0,95,95,109,111,100,117,108,101,95, - 95,117,12,0,0,0,95,95,113,117,97,108,110,97,109,101, - 95,95,117,7,0,0,0,95,95,100,111,99,95,95,117,8, - 0,0,0,95,95,105,110,105,116,95,95,117,23,0,0,0, - 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, - 104,95,110,97,109,101,115,117,16,0,0,0,95,103,101,116, - 95,112,97,114,101,110,116,95,112,97,116,104,117,12,0,0, - 0,95,114,101,99,97,108,99,117,108,97,116,101,117,8,0, - 0,0,95,95,105,116,101,114,95,95,117,7,0,0,0,95, - 95,108,101,110,95,95,117,8,0,0,0,95,95,114,101,112, - 114,95,95,117,12,0,0,0,95,95,99,111,110,116,97,105, - 110,115,95,95,117,6,0,0,0,97,112,112,101,110,100,40, - 1,0,0,0,117,10,0,0,0,95,95,108,111,99,97,108, - 115,95,95,40,0,0,0,0,40,0,0,0,0,117,29,0, - 0,0,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,117, - 14,0,0,0,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,133,4,0,0,115,20,0,0,0,16,5,6,2,12, - 6,12,10,12,4,12,12,12,3,12,3,12,3,12,3,117, - 14,0,0,0,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,99,1,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,66,0,0,0,115,68,0,0,0,124,0,0,69, - 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,101,6,0,100,5,0, - 100,6,0,132,0,0,131,1,0,90,7,0,100,7,0,83, - 40,8,0,0,0,117,15,0,0,0,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,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,40,1,0,0, - 0,78,40,2,0,0,0,117,14,0,0,0,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,117,5,0,0,0,95, - 112,97,116,104,40,4,0,0,0,117,4,0,0,0,115,101, - 108,102,117,4,0,0,0,110,97,109,101,117,4,0,0,0, - 112,97,116,104,117,11,0,0,0,112,97,116,104,95,102,105, - 110,100,101,114,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,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, - 117,8,0,0,0,95,95,105,110,105,116,95,95,189,4,0, - 0,115,2,0,0,0,0,1,117,24,0,0,0,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,40, - 2,0,0,0,78,117,25,0,0,0,60,109,111,100,117,108, - 101,32,39,123,125,39,32,40,110,97,109,101,115,112,97,99, - 101,41,62,40,2,0,0,0,117,6,0,0,0,102,111,114, - 109,97,116,117,8,0,0,0,95,95,110,97,109,101,95,95, - 40,2,0,0,0,117,3,0,0,0,99,108,115,117,6,0, - 0,0,109,111,100,117,108,101,40,0,0,0,0,40,0,0, - 0,0,117,29,0,0,0,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,117,11,0,0,0,109,111,100,117,108,101,95, - 114,101,112,114,192,4,0,0,115,2,0,0,0,0,2,117, - 27,0,0,0,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,3,0,0,0, - 67,0,0,0,115,32,0,0,0,116,0,0,100,1,0,124, - 0,0,106,1,0,131,2,0,1,124,0,0,106,1,0,124, - 1,0,95,2,0,124,1,0,83,40,2,0,0,0,117,24, - 0,0,0,76,111,97,100,32,97,32,110,97,109,101,115,112, - 97,99,101,32,109,111,100,117,108,101,46,117,38,0,0,0, - 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,40,3,0,0,0,117,16,0,0,0, - 95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,101, - 117,5,0,0,0,95,112,97,116,104,117,8,0,0,0,95, - 95,112,97,116,104,95,95,40,2,0,0,0,117,4,0,0, - 0,115,101,108,102,117,6,0,0,0,109,111,100,117,108,101, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0, - 0,108,111,97,100,95,109,111,100,117,108,101,196,4,0,0, - 115,6,0,0,0,0,3,16,1,12,1,117,27,0,0,0, - 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,40,8,0,0, - 0,117,8,0,0,0,95,95,110,97,109,101,95,95,117,10, - 0,0,0,95,95,109,111,100,117,108,101,95,95,117,12,0, - 0,0,95,95,113,117,97,108,110,97,109,101,95,95,117,8, - 0,0,0,95,95,105,110,105,116,95,95,117,11,0,0,0, - 99,108,97,115,115,109,101,116,104,111,100,117,11,0,0,0, - 109,111,100,117,108,101,95,114,101,112,114,117,17,0,0,0, - 109,111,100,117,108,101,95,102,111,114,95,108,111,97,100,101, - 114,117,11,0,0,0,108,111,97,100,95,109,111,100,117,108, - 101,40,1,0,0,0,117,10,0,0,0,95,95,108,111,99, - 97,108,115,95,95,40,0,0,0,0,40,0,0,0,0,117, - 29,0,0,0,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,117,15,0,0,0,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,188,4,0,0,115,6,0,0,0,16,1, - 12,3,18,4,117,15,0,0,0,78,97,109,101,115,112,97, - 99,101,76,111,97,100,101,114,99,1,0,0,0,0,0,0, - 0,1,0,0,0,4,0,0,0,66,0,0,0,115,119,0, - 0,0,124,0,0,69,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,12,0,100,10,0,100,11,0,132,1,0,131, - 1,0,90,10,0,100,12,0,83,40,13,0,0,0,117,10, - 0,0,0,80,97,116,104,70,105,110,100,101,114,117,62,0, - 0,0,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,40,3,0,0,0,117,125,0,0,0,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,117,17,0,0,0, + 0,124,1,0,131,1,0,1,100,0,0,83,41,1,78,41, + 2,114,14,1,0,0,114,166,0,0,0,41,2,114,76,0, + 0,0,114,25,1,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,166,0,0,0,209,4,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,77,0,0,0,114,20,1,0,0,114,15, + 1,0,0,114,21,1,0,0,114,23,1,0,0,114,24,1, + 0,0,114,88,0,0,0,114,26,1,0,0,114,166,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,13,1,0,0,158,4,0,0,115,20, + 0,0,0,12,5,6,2,12,6,12,10,12,4,12,12,12, + 3,12,3,12,3,12,3,114,13,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,218,15,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,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,13,1,0,0, + 114,14,1,0,0,41,4,114,76,0,0,0,114,72,0,0, + 0,114,35,0,0,0,114,18,1,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,214, + 4,0,0,115,2,0,0,0,0,1,122,24,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, + 78,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,216,0,0,0,114, + 162,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,217,0,0,0,217,4,0,0,115,2,0,0, + 0,0,2,122,27,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,76,0,0,0,114,179, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,157,0,0,0,221,4,0,0,115,2,0,0,0, + 0,1,122,26,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,76,0,0,0, + 114,179,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,221,0,0,0,224,4,0,0,115,2,0, + 0,0,0,1,122,26,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,241,0,0,0,114,251,0,0,0,84,41,1,114, + 252,0,0,0,41,2,114,76,0,0,0,114,179,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 220,0,0,0,227,4,0,0,115,2,0,0,0,0,1,122, + 24,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,2,0,0,0,67,0,0,0,115,25, + 0,0,0,124,0,0,124,1,0,95,0,0,124,1,0,106, + 1,0,124,1,0,95,2,0,100,0,0,83,41,1,78,41, + 3,114,172,0,0,0,114,57,0,0,0,114,159,0,0,0, + 41,2,114,76,0,0,0,114,162,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,240,0,0,0, + 230,4,0,0,115,4,0,0,0,0,1,9,1,122,33,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,105, + 110,105,116,95,109,111,100,117,108,101,95,97,116,116,114,115, + 99,2,0,0,0,0,0,0,0,3,0,0,0,9,0,0, + 0,67,0,0,0,115,70,0,0,0,116,0,0,100,1,0, + 124,0,0,106,1,0,131,2,0,1,116,2,0,124,1,0, + 131,1,0,143,36,0,125,2,0,124,0,0,106,3,0,124, + 2,0,131,1,0,1,124,0,0,106,1,0,124,2,0,95, + 4,0,124,2,0,83,87,100,2,0,81,88,100,2,0,83, + 41,3,122,24,76,111,97,100,32,97,32,110,97,109,101,115, + 112,97,99,101,32,109,111,100,117,108,101,46,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,78,41,5,114,138,0,0,0,114,14,1,0, + 0,114,156,0,0,0,114,240,0,0,0,114,160,0,0,0, + 41,3,114,76,0,0,0,114,179,0,0,0,114,162,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,219,0,0,0,234,4,0,0,115,10,0,0,0,0,2, + 16,1,15,1,13,1,12,1,122,27,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,77,0,0,0,114,222,0,0, + 0,114,217,0,0,0,114,157,0,0,0,114,221,0,0,0, + 114,220,0,0,0,114,240,0,0,0,114,219,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,27,1,0,0,213,4,0,0,115,14,0,0, + 0,12,1,12,3,18,4,12,3,12,3,12,3,12,4,114, + 27,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,115,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,100,10,0, + 83,41,13,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,78,40,5,0,0,0,117,3,0,0,0,115,121,115,117, - 19,0,0,0,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,117,6,0,0,0,118,97,108,117, - 101,115,117,7,0,0,0,104,97,115,97,116,116,114,117,17, - 0,0,0,105,110,118,97,108,105,100,97,116,101,95,99,97, - 99,104,101,115,40,2,0,0,0,117,3,0,0,0,99,108, - 115,117,6,0,0,0,102,105,110,100,101,114,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,17,0,0,0,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,210,4, - 0,0,115,6,0,0,0,0,4,22,1,15,1,117,28,0, - 0,0,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,40,3,0,0,0,117,113,0,0,0, - 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,117,23,0,0,0,115,121,115,46,112,97,116,104,95,104, - 111,111,107,115,32,105,115,32,101,109,112,116,121,78,40,7, - 0,0,0,117,3,0,0,0,115,121,115,117,10,0,0,0, - 112,97,116,104,95,104,111,111,107,115,117,9,0,0,0,95, - 119,97,114,110,105,110,103,115,117,4,0,0,0,119,97,114, - 110,117,13,0,0,0,73,109,112,111,114,116,87,97,114,110, - 105,110,103,117,11,0,0,0,73,109,112,111,114,116,69,114, - 114,111,114,117,4,0,0,0,78,111,110,101,40,3,0,0, - 0,117,3,0,0,0,99,108,115,117,4,0,0,0,112,97, - 116,104,117,4,0,0,0,104,111,111,107,40,0,0,0,0, - 40,0,0,0,0,117,29,0,0,0,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,117,11,0,0,0,95,112,97,116, - 104,95,104,111,111,107,115,218,4,0,0,115,16,0,0,0, - 0,7,9,1,19,1,16,1,3,1,14,1,13,1,12,2, - 117,22,0,0,0,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,91,0,0,0,124,1,0,100,1,0,107,2,0,114,21, - 0,100,2,0,125,1,0,110,0,0,121,17,0,116,0,0, - 106,1,0,124,1,0,25,125,2,0,87,110,46,0,4,116, - 2,0,107,10,0,114,86,0,1,1,1,124,0,0,106,3, - 0,124,1,0,131,1,0,125,2,0,124,2,0,116,0,0, - 106,1,0,124,1,0,60,89,110,1,0,88,124,2,0,83, - 40,3,0,0,0,117,210,0,0,0,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,99,104,101,46,10,10,32,32,32,32,32, - 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,101, - 110,116,114,121,32,105,115,32,110,111,116,32,105,110,32,116, - 104,101,32,99,97,99,104,101,44,32,102,105,110,100,32,116, - 104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,102, - 105,110,100,101,114,10,32,32,32,32,32,32,32,32,97,110, - 100,32,99,97,99,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,117,0,0,0, - 0,117,1,0,0,0,46,40,4,0,0,0,117,3,0,0, - 0,115,121,115,117,19,0,0,0,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,117,8,0,0, - 0,75,101,121,69,114,114,111,114,117,11,0,0,0,95,112, - 97,116,104,95,104,111,111,107,115,40,3,0,0,0,117,3, - 0,0,0,99,108,115,117,4,0,0,0,112,97,116,104,117, - 6,0,0,0,102,105,110,100,101,114,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,20,0,0,0,95,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,235, - 4,0,0,115,16,0,0,0,0,8,12,1,9,1,3,1, - 17,1,13,1,15,1,18,1,117,31,0,0,0,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,8,0,0,0,5,0,0,0,67,0,0, - 0,115,189,0,0,0,103,0,0,125,3,0,120,176,0,124, - 2,0,68,93,158,0,125,4,0,116,0,0,124,4,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,4,0,131,1,0, - 125,5,0,124,5,0,100,2,0,107,9,0,114,13,0,116, - 5,0,124,5,0,100,1,0,131,2,0,114,112,0,124,5, - 0,106,6,0,124,1,0,131,1,0,92,2,0,125,6,0, - 125,7,0,110,21,0,124,5,0,106,7,0,124,1,0,131, - 1,0,125,6,0,103,0,0,125,7,0,124,6,0,100,2, - 0,107,9,0,114,155,0,124,6,0,124,3,0,102,2,0, - 83,124,3,0,106,8,0,124,7,0,131,1,0,1,113,13, - 0,113,13,0,87,100,2,0,124,3,0,102,2,0,83,100, - 2,0,83,40,3,0,0,0,117,63,0,0,0,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,117,11,0,0, - 0,102,105,110,100,95,108,111,97,100,101,114,78,40,9,0, - 0,0,117,10,0,0,0,105,115,105,110,115,116,97,110,99, - 101,117,3,0,0,0,115,116,114,117,5,0,0,0,98,121, - 116,101,115,117,20,0,0,0,95,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,117,4,0,0, - 0,78,111,110,101,117,7,0,0,0,104,97,115,97,116,116, - 114,117,11,0,0,0,102,105,110,100,95,108,111,97,100,101, - 114,117,11,0,0,0,102,105,110,100,95,109,111,100,117,108, - 101,117,6,0,0,0,101,120,116,101,110,100,40,8,0,0, - 0,117,3,0,0,0,99,108,115,117,8,0,0,0,102,117, - 108,108,110,97,109,101,117,4,0,0,0,112,97,116,104,117, - 14,0,0,0,110,97,109,101,115,112,97,99,101,95,112,97, - 116,104,117,5,0,0,0,101,110,116,114,121,117,6,0,0, - 0,102,105,110,100,101,114,117,6,0,0,0,108,111,97,100, - 101,114,117,8,0,0,0,112,111,114,116,105,111,110,115,40, - 0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0,0, - 95,103,101,116,95,108,111,97,100,101,114,252,4,0,0,115, - 28,0,0,0,0,5,6,1,13,1,21,1,6,1,15,1, - 12,1,15,1,24,2,15,1,6,1,12,2,10,5,20,2, - 117,22,0,0,0,80,97,116,104,70,105,110,100,101,114,46, - 95,103,101,116,95,108,111,97,100,101,114,99,3,0,0,0, - 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, - 115,97,0,0,0,124,2,0,100,1,0,107,8,0,114,24, - 0,116,1,0,106,2,0,125,2,0,110,0,0,124,0,0, - 106,3,0,124,1,0,124,2,0,131,2,0,92,2,0,125, - 3,0,125,4,0,124,3,0,100,1,0,107,9,0,114,64, - 0,124,3,0,83,124,4,0,114,89,0,116,4,0,124,1, - 0,124,4,0,124,0,0,106,3,0,131,3,0,83,100,1, - 0,83,100,1,0,83,40,2,0,0,0,117,98,0,0,0, - 70,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,40,5,0,0,0,117,4,0,0,0,78,111,110, - 101,117,3,0,0,0,115,121,115,117,4,0,0,0,112,97, - 116,104,117,11,0,0,0,95,103,101,116,95,108,111,97,100, - 101,114,117,15,0,0,0,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,40,5,0,0,0,117,3,0,0,0, - 99,108,115,117,8,0,0,0,102,117,108,108,110,97,109,101, - 117,4,0,0,0,112,97,116,104,117,6,0,0,0,108,111, - 97,100,101,114,117,14,0,0,0,110,97,109,101,115,112,97, - 99,101,95,112,97,116,104,40,0,0,0,0,40,0,0,0, - 0,117,29,0,0,0,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,117,11,0,0,0,102,105,110,100,95,109,111,100, - 117,108,101,23,5,0,0,115,16,0,0,0,0,4,12,1, - 12,1,24,1,12,1,4,2,6,3,19,2,117,22,0,0, - 0,80,97,116,104,70,105,110,100,101,114,46,102,105,110,100, - 95,109,111,100,117,108,101,78,40,11,0,0,0,117,8,0, - 0,0,95,95,110,97,109,101,95,95,117,10,0,0,0,95, - 95,109,111,100,117,108,101,95,95,117,12,0,0,0,95,95, - 113,117,97,108,110,97,109,101,95,95,117,7,0,0,0,95, - 95,100,111,99,95,95,117,11,0,0,0,99,108,97,115,115, - 109,101,116,104,111,100,117,17,0,0,0,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,117,11,0,0, - 0,95,112,97,116,104,95,104,111,111,107,115,117,20,0,0, - 0,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,117,11,0,0,0,95,103,101,116,95,108, - 111,97,100,101,114,117,4,0,0,0,78,111,110,101,117,11, - 0,0,0,102,105,110,100,95,109,111,100,117,108,101,40,1, - 0,0,0,117,10,0,0,0,95,95,108,111,99,97,108,115, - 95,95,40,0,0,0,0,40,0,0,0,0,117,29,0,0, - 0,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,117,10, - 0,0,0,80,97,116,104,70,105,110,100,101,114,206,4,0, - 0,115,14,0,0,0,16,2,6,2,18,8,18,17,18,17, - 18,27,3,1,117,10,0,0,0,80,97,116,104,70,105,110, - 100,101,114,99,1,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,66,0,0,0,115,110,0,0,0,124,0,0, - 69,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, + 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,29,1,0,0,41,2,114,216,0,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,29,1,0,0,249,4,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,186,0,0,0,114,187,0,0,0,114,188,0,0,0,114, + 158,0,0,0,41,3,114,216,0,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,1,5,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,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,99,104,101, + 46,10,10,32,32,32,32,32,32,32,32,73,102,32,116,104, + 101,32,112,97,116,104,32,101,110,116,114,121,32,105,115,32, + 110,111,116,32,105,110,32,116,104,101,32,99,97,99,104,101, + 44,32,102,105,110,100,32,116,104,101,32,97,112,112,114,111, + 112,114,105,97,116,101,32,102,105,110,100,101,114,10,32,32, + 32,32,32,32,32,32,97,110,100,32,99,97,99,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,30,1,0,0,114, + 92,0,0,0,114,34,1,0,0,41,3,114,216,0,0,0, + 114,35,0,0,0,114,32,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,18, + 5,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,8,0,0,0,5,0,0,0,67,0,0,0,115,189, + 0,0,0,103,0,0,125,3,0,120,176,0,124,2,0,68, + 93,158,0,125,4,0,116,0,0,124,4,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,4,0,131,1,0,125,5,0, + 124,5,0,100,1,0,107,9,0,114,13,0,116,4,0,124, + 5,0,100,2,0,131,2,0,114,112,0,124,5,0,106,5, + 0,124,1,0,131,1,0,92,2,0,125,6,0,125,7,0, + 110,21,0,124,5,0,106,6,0,124,1,0,131,1,0,125, + 6,0,103,0,0,125,7,0,124,6,0,100,1,0,107,9, + 0,114,155,0,124,6,0,124,3,0,102,2,0,83,124,3, + 0,106,7,0,124,7,0,131,1,0,1,113,13,0,113,13, + 0,87,100,1,0,124,3,0,102,2,0,83,100,1,0,83, + 41,3,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,185,0,0,0,41,8,114,203,0,0,0, + 218,3,115,116,114,218,5,98,121,116,101,115,114,35,1,0, + 0,114,60,0,0,0,114,185,0,0,0,114,218,0,0,0, + 114,208,0,0,0,41,8,114,216,0,0,0,114,179,0,0, + 0,114,35,0,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,32,1, + 0,0,114,161,0,0,0,114,189,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,11,95,103,101, + 116,95,108,111,97,100,101,114,35,5,0,0,115,28,0,0, + 0,0,5,6,1,13,1,21,1,6,1,15,1,12,1,15, + 1,24,2,15,1,6,1,12,2,10,5,20,2,122,22,80, + 97,116,104,70,105,110,100,101,114,46,95,103,101,116,95,108, + 111,97,100,101,114,78,99,3,0,0,0,0,0,0,0,5, + 0,0,0,4,0,0,0,67,0,0,0,115,97,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,131,2,0,92,2,0,125,3,0,125,4,0, + 124,3,0,100,1,0,107,9,0,114,64,0,124,3,0,83, + 124,4,0,114,89,0,116,3,0,124,1,0,124,4,0,124, + 0,0,106,2,0,131,3,0,83,100,1,0,83,100,1,0, + 83,41,2,122,98,70,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,41,4,114,7,0,0,0,114, + 35,0,0,0,114,39,1,0,0,114,27,1,0,0,41,5, + 114,216,0,0,0,114,179,0,0,0,114,35,0,0,0,114, + 161,0,0,0,114,38,1,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,218,0,0,0,62,5,0, + 0,115,16,0,0,0,0,4,12,1,12,1,24,1,12,1, + 4,2,6,3,19,2,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,10, + 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, + 59,0,0,0,114,222,0,0,0,114,29,1,0,0,114,34, + 1,0,0,114,35,1,0,0,114,39,1,0,0,114,218,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,28,1,0,0,245,4,0,0,115, + 14,0,0,0,12,2,6,2,18,8,18,17,18,17,18,27, + 3,1,114,28,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, 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,101,10,0,100,10,0,100, 11,0,132,0,0,131,1,0,90,11,0,100,12,0,100,13, - 0,132,0,0,90,12,0,100,14,0,83,40,15,0,0,0, - 117,10,0,0,0,70,105,108,101,70,105,110,100,101,114,117, - 172,0,0,0,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,40,7,0,0,0,117,154,0,0,0,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,40,1,0, - 0,0,78,40,0,0,0,0,40,2,0,0,0,117,2,0, - 0,0,46,48,117,6,0,0,0,115,117,102,102,105,120,40, - 1,0,0,0,117,6,0,0,0,108,111,97,100,101,114,40, - 0,0,0,0,117,29,0,0,0,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,117,9,0,0,0,60,103,101,110,101, - 120,112,114,62,56,5,0,0,115,2,0,0,0,6,0,117, - 38,0,0,0,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,117,1,0,0,0,46, - 105,1,0,0,0,78,105,255,255,255,255,40,7,0,0,0, - 117,6,0,0,0,101,120,116,101,110,100,117,8,0,0,0, - 95,108,111,97,100,101,114,115,117,4,0,0,0,112,97,116, - 104,117,11,0,0,0,95,112,97,116,104,95,109,116,105,109, - 101,117,3,0,0,0,115,101,116,117,11,0,0,0,95,112, - 97,116,104,95,99,97,99,104,101,117,19,0,0,0,95,114, - 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, - 101,40,5,0,0,0,117,4,0,0,0,115,101,108,102,117, - 4,0,0,0,112,97,116,104,117,14,0,0,0,108,111,97, - 100,101,114,95,100,101,116,97,105,108,115,117,7,0,0,0, - 108,111,97,100,101,114,115,117,8,0,0,0,115,117,102,102, - 105,120,101,115,40,0,0,0,0,40,1,0,0,0,117,6, - 0,0,0,108,111,97,100,101,114,117,29,0,0,0,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,117,8,0,0,0, - 95,95,105,110,105,116,95,95,50,5,0,0,115,16,0,0, - 0,0,4,6,1,19,1,36,1,9,2,15,1,9,1,12, - 1,117,19,0,0,0,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, - 40,4,0,0,0,117,31,0,0,0,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,105,1,0,0,0,78,105, - 255,255,255,255,40,1,0,0,0,117,11,0,0,0,95,112, - 97,116,104,95,109,116,105,109,101,40,1,0,0,0,117,4, - 0,0,0,115,101,108,102,40,0,0,0,0,40,0,0,0, - 0,117,29,0,0,0,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,117,17,0,0,0,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,64,5,0,0,115,2,0, - 0,0,0,2,117,28,0,0,0,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,12,0, - 0,0,13,0,0,0,67,0,0,0,115,216,1,0,0,100, - 8,0,125,2,0,124,1,0,106,1,0,100,1,0,131,1, - 0,100,2,0,25,125,3,0,121,25,0,116,2,0,106,3, - 0,124,0,0,106,4,0,131,1,0,106,5,0,125,4,0, - 87,110,24,0,4,116,6,0,107,10,0,114,76,0,1,1, - 1,100,9,0,125,4,0,89,110,1,0,88,124,4,0,124, - 0,0,106,7,0,107,3,0,114,114,0,124,0,0,106,8, - 0,131,0,0,1,124,4,0,124,0,0,95,7,0,110,0, - 0,116,9,0,131,0,0,114,147,0,124,0,0,106,10,0, - 125,5,0,124,3,0,106,11,0,131,0,0,125,6,0,110, - 15,0,124,0,0,106,12,0,125,5,0,124,3,0,125,6, - 0,124,6,0,124,5,0,107,6,0,114,45,1,116,13,0, - 124,0,0,106,4,0,124,3,0,131,2,0,125,7,0,116, - 14,0,124,7,0,131,1,0,114,45,1,120,91,0,124,0, - 0,106,15,0,68,93,71,0,92,2,0,125,8,0,125,9, - 0,100,4,0,124,8,0,23,125,10,0,116,13,0,124,7, - 0,124,10,0,131,2,0,125,11,0,116,16,0,124,11,0, - 131,1,0,114,214,0,124,9,0,124,1,0,124,11,0,131, - 2,0,124,7,0,103,1,0,102,2,0,83,113,214,0,87, - 100,10,0,125,2,0,113,45,1,110,0,0,120,120,0,124, - 0,0,106,15,0,68,93,109,0,92,2,0,125,8,0,125, - 9,0,116,13,0,124,0,0,106,4,0,124,3,0,124,8, - 0,23,131,2,0,125,11,0,116,18,0,100,5,0,106,19, - 0,124,11,0,131,1,0,100,6,0,100,2,0,131,1,1, - 1,124,6,0,124,8,0,23,124,5,0,107,6,0,114,55, - 1,116,16,0,124,11,0,131,1,0,114,164,1,124,9,0, - 124,1,0,124,11,0,131,2,0,103,0,0,102,2,0,83, - 113,55,1,113,55,1,87,124,2,0,114,206,1,116,18,0, - 100,7,0,106,19,0,124,7,0,131,1,0,131,1,0,1, - 100,11,0,124,7,0,103,1,0,102,2,0,83,100,11,0, - 103,0,0,102,2,0,83,40,12,0,0,0,117,125,0,0, - 0,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, + 0,132,0,0,90,12,0,100,14,0,83,41,15,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,116,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,124,0,0,95,2,0, + 100,5,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,4,0,83,41,6,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,10,1,0,0,41,1,114,161, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,144,0, + 0,0,95,5,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,29,0,0,0,78,114,124,0,0,0, + 41,7,114,208,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,76,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, + 113,0,0,0,114,4,0,0,0,41,1,114,161,0,0,0, + 114,5,0,0,0,114,77,0,0,0,89,5,0,0,115,16, + 0,0,0,0,4,6,1,19,1,36,1,9,2,9,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,124,0,0,0,41,1,114, + 42,1,0,0,41,1,114,76,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,29,1,0,0,103, + 5,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,12,0,0,0,13,0,0,0,67,0,0,0,115,219,1, + 0,0,100,1,0,125,2,0,124,1,0,106,0,0,100,2, + 0,131,1,0,100,3,0,25,125,3,0,121,37,0,116,1, + 0,106,2,0,124,0,0,106,3,0,112,52,0,116,1,0, + 106,4,0,131,0,0,131,1,0,106,5,0,125,4,0,87, + 110,24,0,4,116,6,0,107,10,0,114,88,0,1,1,1, + 100,10,0,125,4,0,89,110,1,0,88,124,4,0,124,0, + 0,106,7,0,107,3,0,114,126,0,124,0,0,106,8,0, + 131,0,0,1,124,4,0,124,0,0,95,7,0,110,0,0, + 116,9,0,131,0,0,114,159,0,124,0,0,106,10,0,125, + 5,0,124,3,0,106,11,0,131,0,0,125,6,0,110,15, + 0,124,0,0,106,12,0,125,5,0,124,3,0,125,6,0, + 124,6,0,124,5,0,107,6,0,114,48,1,116,13,0,124, + 0,0,106,3,0,124,3,0,131,2,0,125,7,0,120,97, + 0,124,0,0,106,14,0,68,93,71,0,92,2,0,125,8, + 0,125,9,0,100,5,0,124,8,0,23,125,10,0,116,13, + 0,124,7,0,124,10,0,131,2,0,125,11,0,116,15,0, + 124,11,0,131,1,0,114,214,0,124,9,0,124,1,0,124, + 11,0,131,2,0,124,7,0,103,1,0,102,2,0,83,113, + 214,0,87,116,16,0,124,7,0,131,1,0,125,2,0,110, + 0,0,120,120,0,124,0,0,106,14,0,68,93,109,0,92, + 2,0,125,8,0,125,9,0,116,13,0,124,0,0,106,3, + 0,124,3,0,124,8,0,23,131,2,0,125,11,0,116,17, + 0,100,6,0,106,18,0,124,11,0,131,1,0,100,7,0, + 100,3,0,131,1,1,1,124,6,0,124,8,0,23,124,5, + 0,107,6,0,114,58,1,116,15,0,124,11,0,131,1,0, + 114,167,1,124,9,0,124,1,0,124,11,0,131,2,0,103, + 0,0,102,2,0,83,113,58,1,113,58,1,87,124,2,0, + 114,209,1,116,17,0,100,8,0,106,18,0,124,7,0,131, + 1,0,131,1,0,1,100,9,0,124,7,0,103,1,0,102, + 2,0,83,100,9,0,103,0,0,102,2,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,117,1, - 0,0,0,46,105,2,0,0,0,105,1,0,0,0,117,8, - 0,0,0,95,95,105,110,105,116,95,95,117,9,0,0,0, - 116,114,121,105,110,103,32,123,125,117,9,0,0,0,118,101, - 114,98,111,115,105,116,121,117,25,0,0,0,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,70,105,255,255,255,255,84,78,40,21,0, - 0,0,117,5,0,0,0,70,97,108,115,101,117,10,0,0, - 0,114,112,97,114,116,105,116,105,111,110,117,3,0,0,0, - 95,111,115,117,4,0,0,0,115,116,97,116,117,4,0,0, - 0,112,97,116,104,117,8,0,0,0,115,116,95,109,116,105, - 109,101,117,7,0,0,0,79,83,69,114,114,111,114,117,11, - 0,0,0,95,112,97,116,104,95,109,116,105,109,101,117,11, - 0,0,0,95,102,105,108,108,95,99,97,99,104,101,117,11, - 0,0,0,95,114,101,108,97,120,95,99,97,115,101,117,19, - 0,0,0,95,114,101,108,97,120,101,100,95,112,97,116,104, - 95,99,97,99,104,101,117,5,0,0,0,108,111,119,101,114, - 117,11,0,0,0,95,112,97,116,104,95,99,97,99,104,101, - 117,10,0,0,0,95,112,97,116,104,95,106,111,105,110,117, - 11,0,0,0,95,112,97,116,104,95,105,115,100,105,114,117, - 8,0,0,0,95,108,111,97,100,101,114,115,117,12,0,0, - 0,95,112,97,116,104,95,105,115,102,105,108,101,117,4,0, - 0,0,84,114,117,101,117,16,0,0,0,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,117,6,0,0,0, - 102,111,114,109,97,116,117,4,0,0,0,78,111,110,101,40, - 12,0,0,0,117,4,0,0,0,115,101,108,102,117,8,0, - 0,0,102,117,108,108,110,97,109,101,117,12,0,0,0,105, - 115,95,110,97,109,101,115,112,97,99,101,117,11,0,0,0, - 116,97,105,108,95,109,111,100,117,108,101,117,5,0,0,0, - 109,116,105,109,101,117,5,0,0,0,99,97,99,104,101,117, - 12,0,0,0,99,97,99,104,101,95,109,111,100,117,108,101, - 117,9,0,0,0,98,97,115,101,95,112,97,116,104,117,6, - 0,0,0,115,117,102,102,105,120,117,6,0,0,0,108,111, - 97,100,101,114,117,13,0,0,0,105,110,105,116,95,102,105, - 108,101,110,97,109,101,117,9,0,0,0,102,117,108,108,95, - 112,97,116,104,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,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, - 117,11,0,0,0,102,105,110,100,95,108,111,97,100,101,114, - 70,5,0,0,115,66,0,0,0,0,3,6,1,19,1,3, - 1,25,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,12,1,22,1,10, - 1,15,1,12,1,26,4,12,2,22,1,22,1,25,1,16, - 1,12,1,26,1,6,1,19,1,13,1,117,22,0,0,0, - 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, - 108,111,97,100,101,114,99,1,0,0,0,0,0,0,0,9, - 0,0,0,13,0,0,0,67,0,0,0,115,8,1,0,0, - 124,0,0,106,0,0,125,1,0,121,19,0,116,1,0,106, - 2,0,124,1,0,131,1,0,125,2,0,87,110,33,0,4, - 116,3,0,116,4,0,116,5,0,102,3,0,107,10,0,114, - 63,0,1,1,1,103,0,0,125,2,0,89,110,1,0,88, - 116,6,0,106,7,0,106,8,0,100,1,0,131,1,0,115, - 100,0,116,9,0,124,2,0,131,1,0,124,0,0,95,10, - 0,110,111,0,116,9,0,131,0,0,125,3,0,120,90,0, - 124,2,0,68,93,82,0,125,4,0,124,4,0,106,11,0, - 100,2,0,131,1,0,92,3,0,125,5,0,125,6,0,125, - 7,0,124,6,0,114,179,0,100,3,0,106,12,0,124,5, - 0,124,7,0,106,13,0,131,0,0,131,2,0,125,8,0, - 110,6,0,124,5,0,125,8,0,124,3,0,106,14,0,124, - 8,0,131,1,0,1,113,116,0,87,124,3,0,124,0,0, - 95,10,0,116,6,0,106,7,0,106,8,0,116,15,0,131, - 1,0,114,4,1,116,9,0,100,4,0,100,5,0,132,0, - 0,124,2,0,68,131,1,0,131,1,0,124,0,0,95,16, - 0,110,0,0,100,6,0,83,40,7,0,0,0,117,68,0, - 0,0,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,117,3,0,0,0,119,105,110,117,1, - 0,0,0,46,117,5,0,0,0,123,125,46,123,125,99,1, - 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,115, - 0,0,0,115,27,0,0,0,124,0,0,93,17,0,125,1, - 0,124,1,0,106,0,0,131,0,0,86,1,113,3,0,100, - 0,0,83,40,1,0,0,0,78,40,1,0,0,0,117,5, - 0,0,0,108,111,119,101,114,40,2,0,0,0,117,2,0, - 0,0,46,48,117,2,0,0,0,102,110,40,0,0,0,0, - 40,0,0,0,0,117,29,0,0,0,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,117,9,0,0,0,60,103,101,110, - 101,120,112,114,62,143,5,0,0,115,2,0,0,0,6,0, - 117,41,0,0,0,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,103,101,110,101,120,112,114,62,78,40, - 17,0,0,0,117,4,0,0,0,112,97,116,104,117,3,0, - 0,0,95,111,115,117,7,0,0,0,108,105,115,116,100,105, - 114,117,17,0,0,0,70,105,108,101,78,111,116,70,111,117, - 110,100,69,114,114,111,114,117,15,0,0,0,80,101,114,109, - 105,115,115,105,111,110,69,114,114,111,114,117,18,0,0,0, - 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, - 111,114,117,3,0,0,0,115,121,115,117,8,0,0,0,112, - 108,97,116,102,111,114,109,117,10,0,0,0,115,116,97,114, - 116,115,119,105,116,104,117,3,0,0,0,115,101,116,117,11, - 0,0,0,95,112,97,116,104,95,99,97,99,104,101,117,9, - 0,0,0,112,97,114,116,105,116,105,111,110,117,6,0,0, - 0,102,111,114,109,97,116,117,5,0,0,0,108,111,119,101, - 114,117,3,0,0,0,97,100,100,117,27,0,0,0,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,117,19,0,0,0,95,114, - 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, - 101,40,9,0,0,0,117,4,0,0,0,115,101,108,102,117, - 4,0,0,0,112,97,116,104,117,8,0,0,0,99,111,110, - 116,101,110,116,115,117,21,0,0,0,108,111,119,101,114,95, - 115,117,102,102,105,120,95,99,111,110,116,101,110,116,115,117, - 4,0,0,0,105,116,101,109,117,4,0,0,0,110,97,109, - 101,117,3,0,0,0,100,111,116,117,6,0,0,0,115,117, - 102,102,105,120,117,8,0,0,0,110,101,119,95,110,97,109, - 101,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, - 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,117,11,0, - 0,0,95,102,105,108,108,95,99,97,99,104,101,114,5,0, - 0,115,34,0,0,0,0,2,9,1,3,1,19,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,117,22,0,0,0,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,40,3,0,0,0,117,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,40,3,0,0, - 0,117,45,0,0,0,80,97,116,104,32,104,111,111,107,32, + 45,111,102,45,112,111,114,116,105,111,110,115,41,46,70,114, + 102,0,0,0,114,101,0,0,0,114,29,0,0,0,114,77, + 0,0,0,122,9,116,114,121,105,110,103,32,123,125,114,131, + 0,0,0,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,78,114, + 124,0,0,0,41,19,114,32,0,0,0,114,3,0,0,0, + 114,39,0,0,0,114,35,0,0,0,114,45,0,0,0,114, + 4,1,0,0,114,40,0,0,0,114,42,1,0,0,218,11, + 95,102,105,108,108,95,99,97,99,104,101,114,6,0,0,0, + 114,45,1,0,0,114,125,0,0,0,114,44,1,0,0,114, + 28,0,0,0,114,41,1,0,0,114,44,0,0,0,114,46, + 0,0,0,114,138,0,0,0,114,47,0,0,0,41,12,114, + 76,0,0,0,114,179,0,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,194,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,10,1,0,0,114,161, + 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,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,185,0,0, + 0,109,5,0,0,115,64,0,0,0,0,3,6,1,19,1, + 3,1,37,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,26,4,15,2,22,1,22,1,25,1,16,1, + 12,1,26,1,6,1,19,1,13,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,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,102,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,125,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,181,5,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,43,1,0,0,114,44,1,0,0,114,107,0,0, + 0,114,47,0,0,0,114,125,0,0,0,218,3,97,100,100, + 114,10,0,0,0,114,45,1,0,0,41,9,114,76,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,25,1,0,0,114,72,0,0, + 0,114,19,1,0,0,114,10,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,47,1,0,0,152,5,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, + 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,117,30,0,0,0,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,117,4,0,0,0,112,97,116,104,40, - 2,0,0,0,117,11,0,0,0,95,112,97,116,104,95,105, - 115,100,105,114,117,11,0,0,0,73,109,112,111,114,116,69, - 114,114,111,114,40,1,0,0,0,117,4,0,0,0,112,97, - 116,104,40,2,0,0,0,117,3,0,0,0,99,108,115,117, - 14,0,0,0,108,111,97,100,101,114,95,100,101,116,97,105, - 108,115,40,0,0,0,0,117,29,0,0,0,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,117,24,0,0,0,112,97, - 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, - 70,105,110,100,101,114,155,5,0,0,115,6,0,0,0,0, - 2,12,1,21,1,117,54,0,0,0,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, - 40,0,0,0,0,40,3,0,0,0,117,3,0,0,0,99, - 108,115,117,14,0,0,0,108,111,97,100,101,114,95,100,101, - 116,97,105,108,115,117,24,0,0,0,112,97,116,104,95,104, + 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, + 158,0,0,0,41,1,114,35,0,0,0,41,2,114,216,0, + 0,0,114,46,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,193,5,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,40,0,0,0,0,40,2,0,0,0,117,3,0,0, - 0,99,108,115,117,14,0,0,0,108,111,97,100,101,114,95, - 100,101,116,97,105,108,115,117,29,0,0,0,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,117,9,0,0,0,112,97, - 116,104,95,104,111,111,107,145,5,0,0,115,4,0,0,0, - 0,10,21,6,117,20,0,0,0,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,14,0,0,0,100,1,0,124,0,0,106,0,0, - 102,1,0,22,83,40,2,0,0,0,78,117,14,0,0,0, - 70,105,108,101,70,105,110,100,101,114,40,37,114,41,40,1, - 0,0,0,117,4,0,0,0,112,97,116,104,40,1,0,0, - 0,117,4,0,0,0,115,101,108,102,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,8,0,0,0,95,95,114,101,112, - 114,95,95,163,5,0,0,115,2,0,0,0,0,1,117,19, - 0,0,0,70,105,108,101,70,105,110,100,101,114,46,95,95, - 114,101,112,114,95,95,78,40,13,0,0,0,117,8,0,0, - 0,95,95,110,97,109,101,95,95,117,10,0,0,0,95,95, - 109,111,100,117,108,101,95,95,117,12,0,0,0,95,95,113, - 117,97,108,110,97,109,101,95,95,117,7,0,0,0,95,95, - 100,111,99,95,95,117,8,0,0,0,95,95,105,110,105,116, - 95,95,117,17,0,0,0,105,110,118,97,108,105,100,97,116, - 101,95,99,97,99,104,101,115,117,17,0,0,0,95,102,105, - 110,100,95,109,111,100,117,108,101,95,115,104,105,109,117,11, - 0,0,0,102,105,110,100,95,109,111,100,117,108,101,117,11, - 0,0,0,102,105,110,100,95,108,111,97,100,101,114,117,11, - 0,0,0,95,102,105,108,108,95,99,97,99,104,101,117,11, - 0,0,0,99,108,97,115,115,109,101,116,104,111,100,117,9, - 0,0,0,112,97,116,104,95,104,111,111,107,117,8,0,0, - 0,95,95,114,101,112,114,95,95,40,1,0,0,0,117,10, - 0,0,0,95,95,108,111,99,97,108,115,95,95,40,0,0, - 0,0,40,0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,70,105, - 108,101,70,105,110,100,101,114,41,5,0,0,115,16,0,0, - 0,16,7,6,2,12,14,12,4,6,2,12,44,12,31,18, - 18,117,10,0,0,0,70,105,108,101,70,105,110,100,101,114, - 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, - 0,66,0,0,0,115,50,0,0,0,124,0,0,69,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,40,7,0,0, - 0,117,18,0,0,0,95,73,109,112,111,114,116,76,111,99, - 107,67,111,110,116,101,120,116,117,36,0,0,0,67,111,110, + 101,114,114,4,0,0,0,41,3,114,216,0,0,0,114,46, + 1,0,0,114,53,1,0,0,114,4,0,0,0,41,2,114, + 216,0,0,0,114,46,1,0,0,114,5,0,0,0,218,9, + 112,97,116,104,95,104,111,111,107,183,5,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,76,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,88,0, + 0,0,201,5,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,78,41,13,114,57,0,0,0,114,56,0,0,0,114, + 58,0,0,0,114,59,0,0,0,114,77,0,0,0,114,29, + 1,0,0,114,191,0,0,0,114,218,0,0,0,114,185,0, + 0,0,114,47,1,0,0,114,222,0,0,0,114,54,1,0, + 0,114,88,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,40,1,0,0,80, + 5,0,0,115,16,0,0,0,12,7,6,2,12,14,12,4, + 6,2,12,43,12,31,18,18,114,40,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,40,2,0,0,0,117,24, - 0,0,0,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,40,2,0,0, - 0,117,4,0,0,0,95,105,109,112,117,12,0,0,0,97, - 99,113,117,105,114,101,95,108,111,99,107,40,1,0,0,0, - 117,4,0,0,0,115,101,108,102,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,9,0,0,0,95,95,101,110,116,101, - 114,95,95,173,5,0,0,115,2,0,0,0,0,2,117,28, - 0,0,0,95,73,109,112,111,114,116,76,111,99,107,67,111, + 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,95,0,0,0,218,12,97, + 99,113,117,105,114,101,95,108,111,99,107,41,1,114,76,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,143,0,0,0,211,5,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,40,2,0,0,0,117,60,0,0, - 0,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,40,2, - 0,0,0,117,4,0,0,0,95,105,109,112,117,12,0,0, - 0,114,101,108,101,97,115,101,95,108,111,99,107,40,4,0, - 0,0,117,4,0,0,0,115,101,108,102,117,8,0,0,0, - 101,120,99,95,116,121,112,101,117,9,0,0,0,101,120,99, - 95,118,97,108,117,101,117,13,0,0,0,101,120,99,95,116, - 114,97,99,101,98,97,99,107,40,0,0,0,0,40,0,0, - 0,0,117,29,0,0,0,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,117,8,0,0,0,95,95,101,120,105,116,95, - 95,177,5,0,0,115,2,0,0,0,0,2,117,27,0,0, - 0,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,40,6,0, - 0,0,117,8,0,0,0,95,95,110,97,109,101,95,95,117, - 10,0,0,0,95,95,109,111,100,117,108,101,95,95,117,12, - 0,0,0,95,95,113,117,97,108,110,97,109,101,95,95,117, - 7,0,0,0,95,95,100,111,99,95,95,117,9,0,0,0, - 95,95,101,110,116,101,114,95,95,117,8,0,0,0,95,95, - 101,120,105,116,95,95,40,1,0,0,0,117,10,0,0,0, - 95,95,108,111,99,97,108,115,95,95,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,18,0,0,0,95,73,109,112,111, - 114,116,76,111,99,107,67,111,110,116,101,120,116,169,5,0, - 0,115,6,0,0,0,16,2,6,2,12,4,117,18,0,0, - 0,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, - 101,120,116,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,40,6,0,0,0,117,50,0, - 0,0,82,101,115,111,108,118,101,32,97,32,114,101,108,97, + 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,95,0,0,0,114, + 96,0,0,0,41,4,114,76,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,146, + 0,0,0,215,5,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,143,0,0,0,114,146,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,55,1,0,0,207,5,0,0,115,6,0,0,0,12,2, + 6,2,12,4,114,55,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,117,1,0,0,0,46,105,1,0,0,0,117, - 50,0,0,0,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,105,0,0,0,0,117,5,0,0,0, - 123,125,46,123,125,40,4,0,0,0,117,6,0,0,0,114, - 115,112,108,105,116,117,3,0,0,0,108,101,110,117,10,0, - 0,0,86,97,108,117,101,69,114,114,111,114,117,6,0,0, - 0,102,111,114,109,97,116,40,5,0,0,0,117,4,0,0, - 0,110,97,109,101,117,7,0,0,0,112,97,99,107,97,103, - 101,117,5,0,0,0,108,101,118,101,108,117,4,0,0,0, - 98,105,116,115,117,4,0,0,0,98,97,115,101,40,0,0, - 0,0,40,0,0,0,0,117,29,0,0,0,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,117,13,0,0,0,95,114, - 101,115,111,108,118,101,95,110,97,109,101,182,5,0,0,115, - 10,0,0,0,0,2,22,1,18,1,15,1,10,1,117,13, - 0,0,0,95,114,101,115,111,108,118,101,95,110,97,109,101, - 99,2,0,0,0,0,0,0,0,4,0,0,0,11,0,0, - 0,67,0,0,0,115,138,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,103,0,116,0,0,106,1,0,68, - 93,88,0,125,2,0,116,5,0,131,0,0,143,23,0,1, - 124,2,0,106,6,0,124,0,0,124,1,0,131,2,0,125, - 3,0,87,100,2,0,81,88,124,3,0,100,2,0,107,9, - 0,114,38,0,124,0,0,116,0,0,106,8,0,107,7,0, - 114,109,0,124,3,0,83,116,0,0,106,8,0,124,0,0, - 25,106,9,0,83,113,38,0,113,38,0,87,100,2,0,83, - 100,2,0,83,40,3,0,0,0,117,23,0,0,0,70,105, - 110,100,32,97,32,109,111,100,117,108,101,39,115,32,108,111, - 97,100,101,114,46,117,22,0,0,0,115,121,115,46,109,101, - 116,97,95,112,97,116,104,32,105,115,32,101,109,112,116,121, - 78,40,10,0,0,0,117,3,0,0,0,115,121,115,117,9, - 0,0,0,109,101,116,97,95,112,97,116,104,117,9,0,0, - 0,95,119,97,114,110,105,110,103,115,117,4,0,0,0,119, - 97,114,110,117,13,0,0,0,73,109,112,111,114,116,87,97, - 114,110,105,110,103,117,18,0,0,0,95,73,109,112,111,114, - 116,76,111,99,107,67,111,110,116,101,120,116,117,11,0,0, - 0,102,105,110,100,95,109,111,100,117,108,101,117,4,0,0, - 0,78,111,110,101,117,7,0,0,0,109,111,100,117,108,101, - 115,117,10,0,0,0,95,95,108,111,97,100,101,114,95,95, - 40,4,0,0,0,117,4,0,0,0,110,97,109,101,117,4, - 0,0,0,112,97,116,104,117,6,0,0,0,102,105,110,100, - 101,114,117,6,0,0,0,108,111,97,100,101,114,40,0,0, - 0,0,40,0,0,0,0,117,29,0,0,0,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,117,12,0,0,0,95,102, - 105,110,100,95,109,111,100,117,108,101,191,5,0,0,115,20, - 0,0,0,0,2,9,1,19,1,16,1,10,1,24,1,12, - 2,15,1,4,2,21,2,117,12,0,0,0,95,102,105,110, - 100,95,109,111,100,117,108,101,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,40,8,0,0,0,117,28,0,0,0,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,117,31,0,0,0,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,105,0, - 0,0,0,117,18,0,0,0,108,101,118,101,108,32,109,117, - 115,116,32,98,101,32,62,61,32,48,117,31,0,0,0,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,117,61, - 0,0,0,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, - 117,17,0,0,0,69,109,112,116,121,32,109,111,100,117,108, - 101,32,110,97,109,101,78,40,9,0,0,0,117,10,0,0, - 0,105,115,105,110,115,116,97,110,99,101,117,3,0,0,0, - 115,116,114,117,9,0,0,0,84,121,112,101,69,114,114,111, - 114,117,6,0,0,0,102,111,114,109,97,116,117,4,0,0, - 0,116,121,112,101,117,10,0,0,0,86,97,108,117,101,69, - 114,114,111,114,117,3,0,0,0,115,121,115,117,7,0,0, - 0,109,111,100,117,108,101,115,117,11,0,0,0,83,121,115, - 116,101,109,69,114,114,111,114,40,4,0,0,0,117,4,0, - 0,0,110,97,109,101,117,7,0,0,0,112,97,99,107,97, - 103,101,117,5,0,0,0,108,101,118,101,108,117,3,0,0, - 0,109,115,103,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,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, - 117,13,0,0,0,95,115,97,110,105,116,121,95,99,104,101, - 99,107,208,5,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,117,13,0,0,0,95,115,97,110,105,116,121,95, - 99,104,101,99,107,117,20,0,0,0,78,111,32,109,111,100, - 117,108,101,32,110,97,109,101,100,32,123,33,114,125,99,2, - 0,0,0,0,0,0,0,9,0,0,0,27,0,0,0,67, - 0,0,0,115,12,2,0,0,100,0,0,125,2,0,124,0, - 0,106,1,0,100,1,0,131,1,0,100,2,0,25,125,3, - 0,124,3,0,114,178,0,124,3,0,116,2,0,106,3,0, - 107,7,0,114,62,0,116,4,0,124,1,0,124,3,0,131, - 2,0,1,110,0,0,124,0,0,116,2,0,106,3,0,107, - 6,0,114,88,0,116,2,0,106,3,0,124,0,0,25,83, - 116,2,0,106,3,0,124,3,0,25,125,4,0,121,13,0, - 124,4,0,106,5,0,125,2,0,87,113,178,0,4,116,6, - 0,107,10,0,114,174,0,1,1,1,116,7,0,100,3,0, - 23,106,8,0,124,0,0,124,3,0,131,2,0,125,5,0, - 116,9,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,10,0,124,0,0, - 124,2,0,131,2,0,125,6,0,124,6,0,100,0,0,107, - 8,0,114,250,0,116,9,0,116,7,0,106,8,0,124,0, - 0,131,1,0,100,4,0,124,0,0,131,1,1,125,7,0, - 100,10,0,124,7,0,95,12,0,124,7,0,130,1,0,110, - 47,0,124,0,0,116,2,0,106,3,0,107,7,0,114,41, - 1,124,6,0,106,13,0,124,0,0,131,1,0,1,116,14, - 0,100,5,0,124,0,0,124,6,0,131,3,0,1,110,0, - 0,116,2,0,106,3,0,124,0,0,25,125,8,0,124,3, - 0,114,105,1,116,2,0,106,3,0,124,3,0,25,125,4, - 0,116,15,0,124,4,0,124,0,0,106,1,0,100,1,0, - 131,1,0,100,6,0,25,124,8,0,131,3,0,1,110,0, - 0,116,16,0,124,8,0,100,7,0,100,0,0,131,3,0, - 100,0,0,107,8,0,114,212,1,121,59,0,124,8,0,106, - 17,0,124,8,0,95,18,0,116,19,0,124,8,0,100,8, - 0,131,2,0,115,187,1,124,8,0,106,18,0,106,1,0, - 100,1,0,131,1,0,100,2,0,25,124,8,0,95,18,0, - 110,0,0,87,113,212,1,4,116,6,0,107,10,0,114,208, - 1,1,1,1,89,113,212,1,88,110,0,0,116,19,0,124, - 8,0,100,9,0,131,2,0,115,8,2,121,13,0,124,6, - 0,124,8,0,95,20,0,87,113,8,2,4,116,6,0,107, - 10,0,114,4,2,1,1,1,89,113,8,2,88,110,0,0, - 124,8,0,83,40,11,0,0,0,78,117,1,0,0,0,46, - 105,0,0,0,0,117,21,0,0,0,59,32,123,125,32,105, - 115,32,110,111,116,32,97,32,112,97,99,107,97,103,101,117, - 4,0,0,0,110,97,109,101,117,18,0,0,0,105,109,112, - 111,114,116,32,123,33,114,125,32,35,32,123,33,114,125,105, - 2,0,0,0,117,11,0,0,0,95,95,112,97,99,107,97, - 103,101,95,95,117,8,0,0,0,95,95,112,97,116,104,95, - 95,117,10,0,0,0,95,95,108,111,97,100,101,114,95,95, - 84,40,21,0,0,0,117,4,0,0,0,78,111,110,101,117, - 10,0,0,0,114,112,97,114,116,105,116,105,111,110,117,3, - 0,0,0,115,121,115,117,7,0,0,0,109,111,100,117,108, - 101,115,117,25,0,0,0,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, - 117,8,0,0,0,95,95,112,97,116,104,95,95,117,14,0, - 0,0,65,116,116,114,105,98,117,116,101,69,114,114,111,114, - 117,8,0,0,0,95,69,82,82,95,77,83,71,117,6,0, - 0,0,102,111,114,109,97,116,117,11,0,0,0,73,109,112, - 111,114,116,69,114,114,111,114,117,12,0,0,0,95,102,105, - 110,100,95,109,111,100,117,108,101,117,4,0,0,0,84,114, - 117,101,117,10,0,0,0,95,110,111,116,95,102,111,117,110, - 100,117,11,0,0,0,108,111,97,100,95,109,111,100,117,108, - 101,117,16,0,0,0,95,118,101,114,98,111,115,101,95,109, - 101,115,115,97,103,101,117,7,0,0,0,115,101,116,97,116, - 116,114,117,7,0,0,0,103,101,116,97,116,116,114,117,8, - 0,0,0,95,95,110,97,109,101,95,95,117,11,0,0,0, - 95,95,112,97,99,107,97,103,101,95,95,117,7,0,0,0, - 104,97,115,97,116,116,114,117,10,0,0,0,95,95,108,111, - 97,100,101,114,95,95,40,9,0,0,0,117,4,0,0,0, - 110,97,109,101,117,7,0,0,0,105,109,112,111,114,116,95, - 117,4,0,0,0,112,97,116,104,117,6,0,0,0,112,97, - 114,101,110,116,117,13,0,0,0,112,97,114,101,110,116,95, - 109,111,100,117,108,101,117,3,0,0,0,109,115,103,117,6, - 0,0,0,108,111,97,100,101,114,117,3,0,0,0,101,120, - 99,117,6,0,0,0,109,111,100,117,108,101,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,23,0,0,0,95,102,105, - 110,100,95,97,110,100,95,108,111,97,100,95,117,110,108,111, - 99,107,101,100,227,5,0,0,115,76,0,0,0,0,1,6, - 1,19,1,6,1,15,1,16,2,15,1,11,2,13,1,3, - 1,13,1,13,1,22,1,26,1,15,1,12,1,27,3,9, - 1,9,1,15,2,13,1,19,2,13,1,6,2,13,1,32, - 2,24,1,3,1,12,1,15,1,32,1,13,1,8,2,15, - 1,3,1,13,1,13,1,8,1,117,23,0,0,0,95,102, - 105,110,100,95,97,110,100,95,108,111,97,100,95,117,110,108, - 111,99,107,101,100,99,2,0,0,0,0,0,0,0,3,0, - 0,0,18,0,0,0,67,0,0,0,115,75,0,0,0,122, - 16,0,116,0,0,124,0,0,131,1,0,125,2,0,87,100, - 1,0,116,1,0,106,2,0,131,0,0,1,88,124,2,0, - 106,3,0,131,0,0,1,122,17,0,116,4,0,124,0,0, - 124,1,0,131,2,0,83,87,100,1,0,124,2,0,106,5, - 0,131,0,0,1,88,100,1,0,83,40,2,0,0,0,117, - 54,0,0,0,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,40,6,0,0,0, - 117,16,0,0,0,95,103,101,116,95,109,111,100,117,108,101, - 95,108,111,99,107,117,4,0,0,0,95,105,109,112,117,12, - 0,0,0,114,101,108,101,97,115,101,95,108,111,99,107,117, - 7,0,0,0,97,99,113,117,105,114,101,117,23,0,0,0, - 95,102,105,110,100,95,97,110,100,95,108,111,97,100,95,117, - 110,108,111,99,107,101,100,117,7,0,0,0,114,101,108,101, - 97,115,101,40,3,0,0,0,117,4,0,0,0,110,97,109, - 101,117,7,0,0,0,105,109,112,111,114,116,95,117,4,0, - 0,0,108,111,99,107,40,0,0,0,0,40,0,0,0,0, - 117,29,0,0,0,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,117,14,0,0,0,95,102,105,110,100,95,97,110,100, - 95,108,111,97,100,21,6,0,0,115,14,0,0,0,0,2, - 3,1,16,2,11,1,10,1,3,1,17,2,117,14,0,0, - 0,95,102,105,110,100,95,97,110,100,95,108,111,97,100,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,4,0,107,8,0,114,158,0,116,2,0,106,9,0,131, - 0,0,1,100,2,0,106,10,0,124,0,0,131,1,0,125, - 4,0,116,11,0,124,4,0,100,3,0,124,0,0,131,1, - 1,130,1,0,110,0,0,116,12,0,124,0,0,131,1,0, - 1,124,3,0,83,40,5,0,0,0,117,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,105,0,0,0,0,117,40,0,0,0,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,117,4,0,0,0,110,97,109,101,78,40,13,0, - 0,0,117,13,0,0,0,95,115,97,110,105,116,121,95,99, - 104,101,99,107,117,13,0,0,0,95,114,101,115,111,108,118, - 101,95,110,97,109,101,117,4,0,0,0,95,105,109,112,117, - 12,0,0,0,97,99,113,117,105,114,101,95,108,111,99,107, - 117,3,0,0,0,115,121,115,117,7,0,0,0,109,111,100, - 117,108,101,115,117,14,0,0,0,95,102,105,110,100,95,97, - 110,100,95,108,111,97,100,117,11,0,0,0,95,103,99,100, - 95,105,109,112,111,114,116,117,4,0,0,0,78,111,110,101, - 117,12,0,0,0,114,101,108,101,97,115,101,95,108,111,99, - 107,117,6,0,0,0,102,111,114,109,97,116,117,11,0,0, - 0,73,109,112,111,114,116,69,114,114,111,114,117,19,0,0, - 0,95,108,111,99,107,95,117,110,108,111,99,107,95,109,111, - 100,117,108,101,40,5,0,0,0,117,4,0,0,0,110,97, - 109,101,117,7,0,0,0,112,97,99,107,97,103,101,117,5, - 0,0,0,108,101,118,101,108,117,6,0,0,0,109,111,100, - 117,108,101,117,7,0,0,0,109,101,115,115,97,103,101,40, - 0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,11,0,0,0, - 95,103,99,100,95,105,109,112,111,114,116,34,6,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, - 117,11,0,0,0,95,103,99,100,95,105,109,112,111,114,116, - 99,3,0,0,0,0,0,0,0,6,0,0,0,17,0,0, - 0,67,0,0,0,115,254,0,0,0,116,0,0,124,0,0, - 100,1,0,131,2,0,114,250,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,158,0,124,1,0,68,93,147,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,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,243,0,4,116,8,0,107,10,0,114, - 239,0,1,125,5,0,1,122,50,0,116,9,0,124,5,0, - 100,5,0,100,7,0,131,3,0,114,218,0,124,5,0,106, - 11,0,124,4,0,107,2,0,114,218,0,119,96,0,113,218, - 0,110,0,0,130,0,0,87,89,100,6,0,100,6,0,125, - 5,0,126,5,0,88,113,243,0,88,113,96,0,113,96,0, - 87,110,0,0,124,0,0,83,40,8,0,0,0,117,238,0, - 0,0,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, - 117,8,0,0,0,95,95,112,97,116,104,95,95,117,1,0, - 0,0,42,117,7,0,0,0,95,95,97,108,108,95,95,117, - 5,0,0,0,123,125,46,123,125,117,10,0,0,0,95,110, - 111,116,95,102,111,117,110,100,78,70,40,12,0,0,0,117, - 7,0,0,0,104,97,115,97,116,116,114,117,4,0,0,0, - 108,105,115,116,117,6,0,0,0,114,101,109,111,118,101,117, - 6,0,0,0,101,120,116,101,110,100,117,7,0,0,0,95, - 95,97,108,108,95,95,117,6,0,0,0,102,111,114,109,97, - 116,117,8,0,0,0,95,95,110,97,109,101,95,95,117,25, - 0,0,0,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,117,11,0,0, - 0,73,109,112,111,114,116,69,114,114,111,114,117,7,0,0, - 0,103,101,116,97,116,116,114,117,5,0,0,0,70,97,108, - 115,101,117,4,0,0,0,110,97,109,101,40,6,0,0,0, - 117,6,0,0,0,109,111,100,117,108,101,117,8,0,0,0, - 102,114,111,109,108,105,115,116,117,7,0,0,0,105,109,112, - 111,114,116,95,117,1,0,0,0,120,117,9,0,0,0,102, - 114,111,109,95,110,97,109,101,117,3,0,0,0,101,120,99, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,16,0,0, - 0,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, - 116,58,6,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,6,18,1,15,1,9,1,32,1,117,16,0,0, - 0,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, - 116,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,6,0, - 107,8,0,114,74,0,124,0,0,100,2,0,25,125,1,0, - 100,3,0,124,0,0,107,7,0,114,74,0,124,1,0,106, - 2,0,100,4,0,131,1,0,100,5,0,25,125,1,0,113, - 74,0,110,0,0,124,1,0,83,40,7,0,0,0,117,167, - 0,0,0,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,117,11,0,0,0,95, - 95,112,97,99,107,97,103,101,95,95,117,8,0,0,0,95, - 95,110,97,109,101,95,95,117,8,0,0,0,95,95,112,97, - 116,104,95,95,117,1,0,0,0,46,105,0,0,0,0,78, - 40,3,0,0,0,117,3,0,0,0,103,101,116,117,4,0, - 0,0,78,111,110,101,117,10,0,0,0,114,112,97,114,116, - 105,116,105,111,110,40,2,0,0,0,117,7,0,0,0,103, - 108,111,98,97,108,115,117,7,0,0,0,112,97,99,107,97, - 103,101,40,0,0,0,0,40,0,0,0,0,117,29,0,0, - 0,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,117,17, - 0,0,0,95,99,97,108,99,95,95,95,112,97,99,107,97, - 103,101,95,95,92,6,0,0,115,12,0,0,0,0,7,15, - 1,12,1,10,1,12,1,25,1,117,17,0,0,0,95,99, - 97,108,99,95,95,95,112,97,99,107,97,103,101,95,95,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, - 40,1,0,0,0,117,95,0,0,0,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,40,7,0,0,0,117,19, - 0,0,0,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,117,4,0,0,0,95,105,109,112,117, - 18,0,0,0,101,120,116,101,110,115,105,111,110,95,115,117, - 102,102,105,120,101,115,117,16,0,0,0,83,111,117,114,99, - 101,70,105,108,101,76,111,97,100,101,114,117,15,0,0,0, - 83,79,85,82,67,69,95,83,85,70,70,73,88,69,83,117, - 20,0,0,0,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,117,17,0,0,0,66,89,84, - 69,67,79,68,69,95,83,85,70,70,73,88,69,83,40,3, - 0,0,0,117,10,0,0,0,101,120,116,101,110,115,105,111, - 110,115,117,6,0,0,0,115,111,117,114,99,101,117,8,0, - 0,0,98,121,116,101,99,111,100,101,40,0,0,0,0,40, - 0,0,0,0,117,29,0,0,0,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,117,27,0,0,0,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,107,6,0,0,115,8,0,0,0,0, - 5,18,1,12,1,12,1,117,27,0,0,0,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,99,5,0,0,0,0,0,0,0, + 111,110,101,46,114,102,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,68,0,0,0,122,5,123,125,46,123,125,41,4, + 114,34,0,0,0,114,31,0,0,0,114,119,0,0,0,114, + 47,0,0,0,41,5,114,72,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,90,4,98,97,115,101,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,220,5,0,0,115,10,0,0,0,0,2, + 22,1,18,1,15,1,10,1,114,59,1,0,0,99,2,0, + 0,0,0,0,0,0,4,0,0,0,11,0,0,0,67,0, + 0,0,115,138,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,103,0,116,0,0,106,1,0,68,93,88,0, + 125,2,0,116,5,0,131,0,0,143,23,0,1,124,2,0, + 106,6,0,124,0,0,124,1,0,131,2,0,125,3,0,87, + 100,2,0,81,88,124,3,0,100,2,0,107,9,0,114,38, + 0,124,0,0,116,0,0,106,7,0,107,7,0,114,109,0, + 124,3,0,83,116,0,0,106,7,0,124,0,0,25,106,8, + 0,83,113,38,0,113,38,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,9,114,7,0,0,0,218,9,109,101, + 116,97,95,112,97,116,104,114,186,0,0,0,114,187,0,0, + 0,114,188,0,0,0,114,55,1,0,0,114,218,0,0,0, + 114,141,0,0,0,114,172,0,0,0,41,4,114,72,0,0, + 0,114,35,0,0,0,114,32,1,0,0,114,161,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 12,95,102,105,110,100,95,109,111,100,117,108,101,229,5,0, + 0,115,20,0,0,0,0,2,9,1,19,1,16,1,10,1, + 24,1,12,2,15,1,4,2,21,2,114,61,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,68,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,203,0,0,0, + 114,36,1,0,0,218,9,84,121,112,101,69,114,114,111,114, + 114,47,0,0,0,114,153,0,0,0,114,119,0,0,0,114, + 7,0,0,0,114,141,0,0,0,218,11,83,121,115,116,101, + 109,69,114,114,111,114,41,4,114,72,0,0,0,114,57,1, + 0,0,114,58,1,0,0,114,190,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,246,5,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,64,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,27,0,0,0,67,0,0,0,115,6,2, + 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,47,0,124,0,0, + 116,1,0,106,2,0,107,7,0,114,26,1,124,6,0,106, + 10,0,124,0,0,131,1,0,1,116,11,0,100,5,0,124, + 0,0,124,6,0,131,3,0,1,110,0,0,116,1,0,106, + 2,0,124,0,0,25,125,7,0,124,3,0,114,90,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,6, + 0,25,124,7,0,131,3,0,1,110,0,0,116,13,0,124, + 7,0,100,7,0,100,0,0,131,3,0,100,0,0,107,8, + 0,114,197,1,121,59,0,124,7,0,106,14,0,124,7,0, + 95,15,0,116,16,0,124,7,0,100,8,0,131,2,0,115, + 172,1,124,7,0,106,15,0,106,0,0,100,1,0,131,1, + 0,100,2,0,25,124,7,0,95,15,0,110,0,0,87,113, + 197,1,4,116,5,0,107,10,0,114,193,1,1,1,1,89, + 113,197,1,88,110,0,0,116,13,0,124,7,0,100,9,0, + 100,0,0,131,3,0,100,0,0,107,8,0,114,2,2,121, + 13,0,124,6,0,124,7,0,95,17,0,87,113,2,2,4, + 116,5,0,107,10,0,114,254,1,1,1,1,89,113,2,2, + 88,110,0,0,124,7,0,83,41,10,78,114,102,0,0,0, + 114,68,0,0,0,122,21,59,32,123,125,32,105,115,32,110, + 111,116,32,97,32,112,97,99,107,97,103,101,114,72,0,0, + 0,122,18,105,109,112,111,114,116,32,123,33,114,125,32,35, + 32,123,33,114,125,114,101,0,0,0,114,159,0,0,0,114, + 160,0,0,0,114,172,0,0,0,41,18,114,32,0,0,0, + 114,7,0,0,0,114,141,0,0,0,114,100,0,0,0,114, + 160,0,0,0,114,155,0,0,0,218,8,95,69,82,82,95, + 77,83,71,114,47,0,0,0,114,158,0,0,0,114,61,1, + 0,0,114,219,0,0,0,114,138,0,0,0,114,61,0,0, + 0,114,62,0,0,0,114,57,0,0,0,114,159,0,0,0, + 114,60,0,0,0,114,172,0,0,0,41,8,114,72,0,0, + 0,218,7,105,109,112,111,114,116,95,114,35,0,0,0,114, + 7,1,0,0,90,13,112,97,114,101,110,116,95,109,111,100, + 117,108,101,114,190,0,0,0,114,161,0,0,0,114,162,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,10,6,0,0,115,72, + 0,0,0,0,1,6,1,19,1,6,1,15,1,16,2,15, + 1,11,2,13,1,3,1,13,1,13,1,22,1,26,1,15, + 1,12,1,30,1,15,2,13,1,19,2,13,1,6,2,13, + 1,32,2,24,1,3,1,12,1,15,1,32,1,13,1,8, + 2,24,1,3,1,13,1,13,1,8,1,114,67,1,0,0, + 99,2,0,0,0,0,0,0,0,3,0,0,0,18,0,0, + 0,67,0,0,0,115,75,0,0,0,122,16,0,116,0,0, + 124,0,0,131,1,0,125,2,0,87,100,1,0,116,1,0, + 106,2,0,131,0,0,1,88,124,2,0,106,3,0,131,0, + 0,1,122,17,0,116,4,0,124,0,0,124,1,0,131,2, + 0,83,87,100,1,0,124,2,0,106,5,0,131,0,0,1, + 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,6,114,94,0,0,0,114,95,0,0,0,114,96,0,0, + 0,114,84,0,0,0,114,67,1,0,0,114,85,0,0,0, + 41,3,114,72,0,0,0,114,66,1,0,0,114,70,0,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, + 56,6,0,0,115,14,0,0,0,0,2,3,1,16,2,11, + 1,10,1,3,1,17,2,114,68,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,68,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,72,0,0,0, + 41,12,114,64,1,0,0,114,59,1,0,0,114,95,0,0, + 0,114,56,1,0,0,114,7,0,0,0,114,141,0,0,0, + 114,68,1,0,0,218,11,95,103,99,100,95,105,109,112,111, + 114,116,114,96,0,0,0,114,47,0,0,0,114,158,0,0, + 0,114,97,0,0,0,41,5,114,72,0,0,0,114,57,1, + 0,0,114,58,1,0,0,114,162,0,0,0,114,137,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,69,1,0,0,69,6,0,0,115,26,0,0,0,0,9, + 16,1,12,1,21,1,10,1,15,1,13,1,13,1,12,1, + 10,2,15,1,21,1,10,1,114,69,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,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,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,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,160,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,218,4,108,105,115,116, + 218,6,114,101,109,111,118,101,114,208,0,0,0,114,71,1, + 0,0,114,47,0,0,0,114,57,0,0,0,114,100,0,0, + 0,114,158,0,0,0,114,36,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,72,0,0,0,41,6,114,162,0,0,0,218,8,102, + 114,111,109,108,105,115,116,114,66,1,0,0,114,16,0,0, + 0,90,9,102,114,111,109,95,110,97,109,101,114,249,0,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,93,6,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,76,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,159,0,0,0,78,114,57,0,0,0, + 114,160,0,0,0,114,102,0,0,0,114,68,0,0,0,41, + 2,114,80,0,0,0,114,32,0,0,0,41,2,218,7,103, + 108,111,98,97,108,115,114,57,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,125,6,0, + 0,115,12,0,0,0,0,7,15,1,12,1,10,1,12,1, + 25,1,114,78,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,9,1, + 0,0,114,95,0,0,0,218,18,101,120,116,101,110,115,105, + 111,110,95,115,117,102,102,105,120,101,115,114,3,1,0,0, + 114,120,0,0,0,114,8,1,0,0,218,17,66,89,84,69, + 67,79,68,69,95,83,85,70,70,73,88,69,83,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,235,0,0, + 0,140,6,0,0,115,8,0,0,0,0,5,18,1,12,1, + 12,1,114,235,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, - 3,0,107,9,0,114,45,0,124,1,0,110,3,0,105,0, - 0,125,6,0,116,2,0,124,6,0,131,1,0,125,7,0, + 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,3,0,100,2,0, + 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,4,0,124,0,0,131,1,0,116,4, - 0,124,0,0,106,3,0,100,2,0,131,1,0,100,1,0, - 25,131,1,0,24,125,8,0,116,5,0,106,6,0,124,5, - 0,106,7,0,100,3,0,116,4,0,124,5,0,106,7,0, + 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,8,0,124,5,0,124,3,0,116,0,0,131,3,0,83, - 100,3,0,83,40,4,0,0,0,117,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,105,0,0,0,0,117,1,0,0,0,46,78, - 40,9,0,0,0,117,11,0,0,0,95,103,99,100,95,105, - 109,112,111,114,116,117,4,0,0,0,78,111,110,101,117,17, - 0,0,0,95,99,97,108,99,95,95,95,112,97,99,107,97, - 103,101,95,95,117,9,0,0,0,112,97,114,116,105,116,105, - 111,110,117,3,0,0,0,108,101,110,117,3,0,0,0,115, - 121,115,117,7,0,0,0,109,111,100,117,108,101,115,117,8, - 0,0,0,95,95,110,97,109,101,95,95,117,16,0,0,0, - 95,104,97,110,100,108,101,95,102,114,111,109,108,105,115,116, - 40,9,0,0,0,117,4,0,0,0,110,97,109,101,117,7, - 0,0,0,103,108,111,98,97,108,115,117,6,0,0,0,108, - 111,99,97,108,115,117,8,0,0,0,102,114,111,109,108,105, - 115,116,117,5,0,0,0,108,101,118,101,108,117,6,0,0, - 0,109,111,100,117,108,101,117,8,0,0,0,103,108,111,98, - 97,108,115,95,117,7,0,0,0,112,97,99,107,97,103,101, - 117,7,0,0,0,99,117,116,95,111,102,102,40,0,0,0, - 0,40,0,0,0,0,117,29,0,0,0,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,117,10,0,0,0,95,95,105, - 109,112,111,114,116,95,95,118,6,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,117,10,0,0,0,95, - 95,105,109,112,111,114,116,95,95,99,2,0,0,0,0,0, - 0,0,16,0,0,0,13,0,0,0,67,0,0,0,115,24, - 3,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,119,0,116,1,0,106,8,0,106, - 9,0,131,0,0,68,93,102,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,116,11,0,124,4,0,100,1,0,131,2,0,115,169,0, - 124,3,0,116,1,0,106,12,0,107,6,0,114,136,0,116, - 13,0,124,4,0,95,14,0,113,166,0,116,0,0,106,15, - 0,124,3,0,131,1,0,114,166,0,116,16,0,124,4,0, - 95,14,0,113,166,0,113,169,0,113,67,0,113,67,0,87, - 116,1,0,106,8,0,116,17,0,25,125,5,0,120,76,0, - 100,28,0,68,93,68,0,125,6,0,124,6,0,116,1,0, - 106,8,0,107,7,0,114,232,0,116,13,0,106,18,0,124, - 6,0,131,1,0,125,7,0,110,13,0,116,1,0,106,8, - 0,124,6,0,25,125,7,0,116,19,0,124,5,0,124,6, - 0,124,7,0,131,3,0,1,113,193,0,87,100,6,0,100, - 7,0,103,1,0,102,2,0,100,8,0,100,9,0,100,7, - 0,103,2,0,102,2,0,100,10,0,100,9,0,100,7,0, - 103,2,0,102,2,0,102,3,0,125,8,0,120,189,0,124, - 8,0,68,93,169,0,92,2,0,125,9,0,125,10,0,116, - 20,0,100,11,0,100,12,0,132,0,0,124,10,0,68,131, - 1,0,131,1,0,115,107,1,116,21,0,130,1,0,124,10, - 0,100,13,0,25,125,11,0,124,9,0,116,1,0,106,8, - 0,107,6,0,114,149,1,116,1,0,106,8,0,124,9,0, - 25,125,12,0,80,113,64,1,121,60,0,116,13,0,106,18, - 0,124,9,0,131,1,0,125,12,0,124,9,0,100,10,0, - 107,2,0,114,207,1,100,14,0,116,1,0,106,22,0,107, - 6,0,114,207,1,124,10,0,100,15,0,25,125,11,0,110, - 0,0,80,87,113,64,1,4,116,23,0,107,10,0,114,232, - 1,1,1,1,119,64,1,89,113,64,1,88,113,64,1,87, - 116,23,0,100,16,0,131,1,0,130,1,0,121,19,0,116, - 13,0,106,18,0,100,17,0,131,1,0,125,13,0,87,110, - 24,0,4,116,23,0,107,10,0,114,38,2,1,1,1,100, - 27,0,125,13,0,89,110,1,0,88,116,13,0,106,18,0, - 100,18,0,131,1,0,125,14,0,124,9,0,100,8,0,107, - 2,0,114,100,2,116,13,0,106,18,0,100,19,0,131,1, - 0,125,15,0,116,19,0,124,5,0,100,20,0,124,15,0, - 131,3,0,1,110,0,0,116,19,0,124,5,0,100,21,0, - 124,12,0,131,3,0,1,116,19,0,124,5,0,100,17,0, - 124,13,0,131,3,0,1,116,19,0,124,5,0,100,18,0, - 124,14,0,131,3,0,1,116,19,0,124,5,0,100,22,0, - 124,11,0,131,3,0,1,116,19,0,124,5,0,100,23,0, - 116,25,0,124,10,0,131,1,0,131,3,0,1,116,19,0, - 124,5,0,100,24,0,116,26,0,131,0,0,131,3,0,1, - 116,27,0,106,28,0,116,0,0,106,29,0,131,0,0,131, - 1,0,1,124,9,0,100,8,0,107,2,0,114,20,3,116, - 30,0,106,31,0,100,25,0,131,1,0,1,100,26,0,116, - 27,0,107,6,0,114,20,3,100,29,0,116,33,0,95,34, - 0,113,20,3,110,0,0,100,27,0,83,40,30,0,0,0, - 117,250,0,0,0,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, - 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, - 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32, - 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108, - 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32, - 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101, - 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101, - 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109, - 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108, - 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32, - 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32, - 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,117, - 10,0,0,0,95,95,108,111,97,100,101,114,95,95,117,3, - 0,0,0,95,105,111,117,9,0,0,0,95,119,97,114,110, - 105,110,103,115,117,8,0,0,0,98,117,105,108,116,105,110, - 115,117,7,0,0,0,109,97,114,115,104,97,108,117,5,0, - 0,0,112,111,115,105,120,117,1,0,0,0,47,117,2,0, - 0,0,110,116,117,1,0,0,0,92,117,3,0,0,0,111, - 115,50,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,40,2,0, - 0,0,105,1,0,0,0,78,40,1,0,0,0,117,3,0, - 0,0,108,101,110,40,2,0,0,0,117,2,0,0,0,46, - 48,117,3,0,0,0,115,101,112,40,0,0,0,0,40,0, - 0,0,0,117,29,0,0,0,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,117,9,0,0,0,60,103,101,110,101,120, - 112,114,62,191,6,0,0,115,2,0,0,0,6,0,117,25, - 0,0,0,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,105,0,0,0, - 0,117,7,0,0,0,69,77,88,32,71,67,67,105,1,0, - 0,0,117,30,0,0,0,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,117,7,0,0,0,95,116,104,114,101,97, - 100,117,8,0,0,0,95,119,101,97,107,114,101,102,117,6, - 0,0,0,119,105,110,114,101,103,117,7,0,0,0,95,119, - 105,110,114,101,103,117,3,0,0,0,95,111,115,117,8,0, - 0,0,112,97,116,104,95,115,101,112,117,15,0,0,0,112, - 97,116,104,95,115,101,112,97,114,97,116,111,114,115,117,11, - 0,0,0,95,114,101,108,97,120,95,99,97,115,101,117,4, - 0,0,0,46,112,121,119,117,6,0,0,0,95,100,46,112, - 121,100,78,40,4,0,0,0,117,3,0,0,0,95,105,111, - 117,9,0,0,0,95,119,97,114,110,105,110,103,115,117,8, - 0,0,0,98,117,105,108,116,105,110,115,117,7,0,0,0, - 109,97,114,115,104,97,108,84,40,35,0,0,0,117,4,0, - 0,0,95,105,109,112,117,3,0,0,0,115,121,115,117,5, - 0,0,0,102,108,97,103,115,117,8,0,0,0,111,112,116, - 105,109,105,122,101,117,27,0,0,0,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,117,17,0,0,0,66,89,84,69,67,79, - 68,69,95,83,85,70,70,73,88,69,83,117,23,0,0,0, - 68,69,66,85,71,95,66,89,84,69,67,79,68,69,95,83, - 85,70,70,73,88,69,83,117,4,0,0,0,116,121,112,101, - 117,7,0,0,0,109,111,100,117,108,101,115,117,5,0,0, - 0,105,116,101,109,115,117,10,0,0,0,105,115,105,110,115, - 116,97,110,99,101,117,7,0,0,0,104,97,115,97,116,116, - 114,117,20,0,0,0,98,117,105,108,116,105,110,95,109,111, - 100,117,108,101,95,110,97,109,101,115,117,15,0,0,0,66, - 117,105,108,116,105,110,73,109,112,111,114,116,101,114,117,10, - 0,0,0,95,95,108,111,97,100,101,114,95,95,117,9,0, - 0,0,105,115,95,102,114,111,122,101,110,117,14,0,0,0, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,117,8, - 0,0,0,95,95,110,97,109,101,95,95,117,11,0,0,0, - 108,111,97,100,95,109,111,100,117,108,101,117,7,0,0,0, - 115,101,116,97,116,116,114,117,3,0,0,0,97,108,108,117, - 14,0,0,0,65,115,115,101,114,116,105,111,110,69,114,114, - 111,114,117,7,0,0,0,118,101,114,115,105,111,110,117,11, - 0,0,0,73,109,112,111,114,116,69,114,114,111,114,117,4, - 0,0,0,78,111,110,101,117,3,0,0,0,115,101,116,117, - 16,0,0,0,95,109,97,107,101,95,114,101,108,97,120,95, - 99,97,115,101,117,18,0,0,0,69,88,84,69,78,83,73, - 79,78,95,83,85,70,70,73,88,69,83,117,6,0,0,0, - 101,120,116,101,110,100,117,18,0,0,0,101,120,116,101,110, - 115,105,111,110,95,115,117,102,102,105,120,101,115,117,15,0, - 0,0,83,79,85,82,67,69,95,83,85,70,70,73,88,69, - 83,117,6,0,0,0,97,112,112,101,110,100,117,4,0,0, - 0,84,114,117,101,117,21,0,0,0,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,117, - 11,0,0,0,68,69,66,85,71,95,66,85,73,76,68,40, - 16,0,0,0,117,10,0,0,0,115,121,115,95,109,111,100, - 117,108,101,117,11,0,0,0,95,105,109,112,95,109,111,100, - 117,108,101,117,11,0,0,0,109,111,100,117,108,101,95,116, - 121,112,101,117,4,0,0,0,110,97,109,101,117,6,0,0, - 0,109,111,100,117,108,101,117,11,0,0,0,115,101,108,102, - 95,109,111,100,117,108,101,117,12,0,0,0,98,117,105,108, - 116,105,110,95,110,97,109,101,117,14,0,0,0,98,117,105, - 108,116,105,110,95,109,111,100,117,108,101,117,10,0,0,0, - 111,115,95,100,101,116,97,105,108,115,117,10,0,0,0,98, - 117,105,108,116,105,110,95,111,115,117,15,0,0,0,112,97, - 116,104,95,115,101,112,97,114,97,116,111,114,115,117,8,0, - 0,0,112,97,116,104,95,115,101,112,117,9,0,0,0,111, - 115,95,109,111,100,117,108,101,117,13,0,0,0,116,104,114, - 101,97,100,95,109,111,100,117,108,101,117,14,0,0,0,119, - 101,97,107,114,101,102,95,109,111,100,117,108,101,117,13,0, - 0,0,119,105,110,114,101,103,95,109,111,100,117,108,101,40, - 0,0,0,0,40,0,0,0,0,117,29,0,0,0,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,117,6,0,0,0, - 95,115,101,116,117,112,154,6,0,0,115,106,0,0,0,0, - 9,6,1,6,2,12,1,9,2,6,2,12,1,28,1,15, - 1,15,1,15,1,12,1,15,1,22,2,13,1,13,1,15, - 1,18,2,13,1,20,2,48,1,19,2,31,1,10,1,15, - 1,13,1,4,2,3,1,15,2,27,1,13,1,5,1,13, - 1,12,2,12,2,3,1,19,1,13,2,11,1,15,2,12, - 1,15,1,19,2,16,1,16,1,16,1,16,1,22,2,19, - 1,19,1,12,1,13,1,12,1,117,6,0,0,0,95,115, - 101,116,117,112,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,40,3,0,0,0,117,50,0,0,0, - 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,117,2,0,0,0,110,116,78,40,15,0,0,0,117, - 6,0,0,0,95,115,101,116,117,112,117,27,0,0,0,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,117,3,0,0,0,115, - 121,115,117,10,0,0,0,112,97,116,104,95,104,111,111,107, - 115,117,6,0,0,0,101,120,116,101,110,100,117,10,0,0, - 0,70,105,108,101,70,105,110,100,101,114,117,9,0,0,0, - 112,97,116,104,95,104,111,111,107,117,9,0,0,0,109,101, - 116,97,95,112,97,116,104,117,6,0,0,0,97,112,112,101, - 110,100,117,15,0,0,0,66,117,105,108,116,105,110,73,109, - 112,111,114,116,101,114,117,14,0,0,0,70,114,111,122,101, - 110,73,109,112,111,114,116,101,114,117,3,0,0,0,95,111, - 115,117,8,0,0,0,95,95,110,97,109,101,95,95,117,21, - 0,0,0,87,105,110,100,111,119,115,82,101,103,105,115,116, - 114,121,70,105,110,100,101,114,117,10,0,0,0,80,97,116, - 104,70,105,110,100,101,114,40,3,0,0,0,117,10,0,0, - 0,115,121,115,95,109,111,100,117,108,101,117,11,0,0,0, - 95,105,109,112,95,109,111,100,117,108,101,117,17,0,0,0, - 115,117,112,112,111,114,116,101,100,95,108,111,97,100,101,114, - 115,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, - 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,117,8,0, - 0,0,95,105,110,115,116,97,108,108,233,6,0,0,115,16, - 0,0,0,0,2,13,1,9,1,28,1,16,1,16,1,15, - 1,19,1,117,8,0,0,0,95,105,110,115,116,97,108,108, - 78,40,3,0,0,0,117,3,0,0,0,119,105,110,117,6, - 0,0,0,99,121,103,119,105,110,117,6,0,0,0,100,97, - 114,119,105,110,40,74,0,0,0,117,7,0,0,0,95,95, - 100,111,99,95,95,117,27,0,0,0,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,117,16,0,0,0,95,109,97,107,101,95, - 114,101,108,97,120,95,99,97,115,101,117,7,0,0,0,95, - 119,95,108,111,110,103,117,7,0,0,0,95,114,95,108,111, - 110,103,117,10,0,0,0,95,112,97,116,104,95,106,111,105, - 110,117,11,0,0,0,95,112,97,116,104,95,115,112,108,105, - 116,117,18,0,0,0,95,112,97,116,104,95,105,115,95,109, - 111,100,101,95,116,121,112,101,117,12,0,0,0,95,112,97, - 116,104,95,105,115,102,105,108,101,117,11,0,0,0,95,112, - 97,116,104,95,105,115,100,105,114,117,13,0,0,0,95,119, - 114,105,116,101,95,97,116,111,109,105,99,117,5,0,0,0, - 95,119,114,97,112,117,4,0,0,0,116,121,112,101,117,8, - 0,0,0,95,95,99,111,100,101,95,95,117,10,0,0,0, - 95,99,111,100,101,95,116,121,112,101,117,10,0,0,0,110, - 101,119,95,109,111,100,117,108,101,117,13,0,0,0,95,109, - 111,100,117,108,101,95,108,111,99,107,115,117,12,0,0,0, - 95,98,108,111,99,107,105,110,103,95,111,110,117,12,0,0, - 0,82,117,110,116,105,109,101,69,114,114,111,114,117,14,0, - 0,0,95,68,101,97,100,108,111,99,107,69,114,114,111,114, - 117,11,0,0,0,95,77,111,100,117,108,101,76,111,99,107, - 117,16,0,0,0,95,68,117,109,109,121,77,111,100,117,108, - 101,76,111,99,107,117,16,0,0,0,95,103,101,116,95,109, - 111,100,117,108,101,95,108,111,99,107,117,19,0,0,0,95, - 108,111,99,107,95,117,110,108,111,99,107,95,109,111,100,117, - 108,101,117,25,0,0,0,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, - 117,3,0,0,0,111,114,100,117,17,0,0,0,95,82,65, - 87,95,77,65,71,73,67,95,78,85,77,66,69,82,117,5, - 0,0,0,98,121,116,101,115,117,5,0,0,0,114,97,110, - 103,101,117,12,0,0,0,95,77,65,71,73,67,95,66,89, - 84,69,83,117,8,0,0,0,95,80,89,67,65,67,72,69, - 117,15,0,0,0,83,79,85,82,67,69,95,83,85,70,70, - 73,88,69,83,117,23,0,0,0,68,69,66,85,71,95,66, - 89,84,69,67,79,68,69,95,83,85,70,70,73,88,69,83, - 117,27,0,0,0,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, - 117,4,0,0,0,78,111,110,101,117,17,0,0,0,99,97, - 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,117, - 17,0,0,0,115,111,117,114,99,101,95,102,114,111,109,95, - 99,97,99,104,101,117,15,0,0,0,95,103,101,116,95,115, - 111,117,114,99,101,102,105,108,101,117,16,0,0,0,95,118, - 101,114,98,111,115,101,95,109,101,115,115,97,103,101,117,11, - 0,0,0,115,101,116,95,112,97,99,107,97,103,101,117,10, - 0,0,0,115,101,116,95,108,111,97,100,101,114,117,17,0, - 0,0,109,111,100,117,108,101,95,102,111,114,95,108,111,97, - 100,101,114,117,11,0,0,0,95,99,104,101,99,107,95,110, - 97,109,101,117,17,0,0,0,95,114,101,113,117,105,114,101, - 115,95,98,117,105,108,116,105,110,117,16,0,0,0,95,114, - 101,113,117,105,114,101,115,95,102,114,111,122,101,110,117,17, - 0,0,0,95,102,105,110,100,95,109,111,100,117,108,101,95, - 115,104,105,109,117,15,0,0,0,66,117,105,108,116,105,110, - 73,109,112,111,114,116,101,114,117,14,0,0,0,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,117,21,0,0,0, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,101,114,117,13,0,0,0,95,76,111,97,100,101, - 114,66,97,115,105,99,115,117,12,0,0,0,83,111,117,114, - 99,101,76,111,97,100,101,114,117,10,0,0,0,70,105,108, - 101,76,111,97,100,101,114,117,16,0,0,0,83,111,117,114, - 99,101,70,105,108,101,76,111,97,100,101,114,117,20,0,0, - 0,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, - 111,97,100,101,114,117,18,0,0,0,69,88,84,69,78,83, - 73,79,78,95,83,85,70,70,73,88,69,83,117,19,0,0, - 0,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,117,14,0,0,0,95,78,97,109,101,115,112, - 97,99,101,80,97,116,104,117,15,0,0,0,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,117,10,0,0,0, - 80,97,116,104,70,105,110,100,101,114,117,10,0,0,0,70, - 105,108,101,70,105,110,100,101,114,117,18,0,0,0,95,73, - 109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116, - 117,13,0,0,0,95,114,101,115,111,108,118,101,95,110,97, - 109,101,117,12,0,0,0,95,102,105,110,100,95,109,111,100, - 117,108,101,117,13,0,0,0,95,115,97,110,105,116,121,95, - 99,104,101,99,107,117,8,0,0,0,95,69,82,82,95,77, - 83,71,117,23,0,0,0,95,102,105,110,100,95,97,110,100, - 95,108,111,97,100,95,117,110,108,111,99,107,101,100,117,14, - 0,0,0,95,102,105,110,100,95,97,110,100,95,108,111,97, - 100,117,11,0,0,0,95,103,99,100,95,105,109,112,111,114, - 116,117,16,0,0,0,95,104,97,110,100,108,101,95,102,114, - 111,109,108,105,115,116,117,17,0,0,0,95,99,97,108,99, - 95,95,95,112,97,99,107,97,103,101,95,95,117,27,0,0, - 0,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,117,10,0,0, - 0,95,95,105,109,112,111,114,116,95,95,117,6,0,0,0, - 95,115,101,116,117,112,117,8,0,0,0,95,105,110,115,116, - 97,108,108,40,0,0,0,0,40,0,0,0,0,40,0,0, - 0,0,117,29,0,0,0,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,117,8,0,0,0,60,109,111,100,117,108,101, - 62,8,0,0,0,115,132,0,0,0,6,21,6,3,12,13, - 12,16,12,13,12,12,12,12,12,10,12,6,12,7,15,22, - 12,8,15,3,12,12,6,2,6,3,22,4,19,68,19,23, - 12,19,12,20,12,100,34,1,37,2,6,2,9,2,9,1, - 9,2,15,27,12,23,12,19,18,8,12,13,12,11,12,55, - 12,18,12,11,12,11,12,17,19,57,19,54,19,50,19,83, - 22,134,19,29,25,49,25,25,6,3,19,45,19,55,19,18, - 19,91,19,128,19,13,12,9,12,17,12,17,6,2,12,50, - 12,13,18,24,12,34,12,15,12,11,24,36,12,79, + 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,68,0,0,0,78,114,102,0,0,0,41,8,114,69, + 1,0,0,114,78,1,0,0,114,107,0,0,0,114,31,0, + 0,0,114,7,0,0,0,114,141,0,0,0,114,57,0,0, + 0,114,76,1,0,0,41,9,114,72,0,0,0,114,77,1, + 0,0,218,6,108,111,99,97,108,115,114,75,1,0,0,114, + 58,1,0,0,114,162,0,0,0,90,8,103,108,111,98,97, + 108,115,95,114,57,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,151,6,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, + 82,1,0,0,99,2,0,0,0,0,0,0,0,16,0,0, + 0,13,0,0,0,67,0,0,0,115,237,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,128,0,116,1,0,106,8,0,106,9,0,131,0,0, + 68,93,111,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,116,11,0,124, + 4,0,100,1,0,100,2,0,131,3,0,100,2,0,107,8, + 0,114,178,0,124,3,0,116,1,0,106,12,0,107,6,0, + 114,145,0,116,13,0,124,4,0,95,14,0,113,175,0,116, + 0,0,106,15,0,124,3,0,131,1,0,114,175,0,116,16, + 0,124,4,0,95,14,0,113,175,0,113,178,0,113,67,0, + 113,67,0,87,116,1,0,106,8,0,116,17,0,25,125,5, + 0,120,76,0,100,27,0,68,93,68,0,125,6,0,124,6, + 0,116,1,0,106,8,0,107,7,0,114,241,0,116,13,0, + 106,18,0,124,6,0,131,1,0,125,7,0,110,13,0,116, + 1,0,106,8,0,124,6,0,25,125,7,0,116,19,0,124, + 5,0,124,6,0,124,7,0,131,3,0,1,113,202,0,87, + 100,7,0,100,8,0,103,1,0,102,2,0,100,9,0,100, + 10,0,100,8,0,103,2,0,102,2,0,102,2,0,125,8, + 0,120,149,0,124,8,0,68,93,129,0,92,2,0,125,9, + 0,125,10,0,116,20,0,100,11,0,100,12,0,132,0,0, + 124,10,0,68,131,1,0,131,1,0,115,101,1,116,21,0, + 130,1,0,124,10,0,100,13,0,25,125,11,0,124,9,0, + 116,1,0,106,8,0,107,6,0,114,143,1,116,1,0,106, + 8,0,124,9,0,25,125,12,0,80,113,58,1,121,20,0, + 116,13,0,106,18,0,124,9,0,131,1,0,125,12,0,80, + 87,113,58,1,4,116,22,0,107,10,0,114,186,1,1,1, + 1,119,58,1,89,113,58,1,88,113,58,1,87,116,22,0, + 100,14,0,131,1,0,130,1,0,121,19,0,116,13,0,106, + 18,0,100,15,0,131,1,0,125,13,0,87,110,24,0,4, + 116,22,0,107,10,0,114,248,1,1,1,1,100,2,0,125, + 13,0,89,110,1,0,88,116,13,0,106,18,0,100,16,0, + 131,1,0,125,14,0,124,9,0,100,9,0,107,2,0,114, + 54,2,116,13,0,106,18,0,100,17,0,131,1,0,125,15, + 0,116,19,0,124,5,0,100,18,0,124,15,0,131,3,0, + 1,110,0,0,116,19,0,124,5,0,100,19,0,124,12,0, + 131,3,0,1,116,19,0,124,5,0,100,15,0,124,13,0, + 131,3,0,1,116,19,0,124,5,0,100,16,0,124,14,0, + 131,3,0,1,116,19,0,124,5,0,100,20,0,124,11,0, + 131,3,0,1,116,19,0,124,5,0,100,21,0,100,22,0, + 106,23,0,124,10,0,131,1,0,131,3,0,1,116,19,0, + 124,5,0,100,23,0,116,24,0,131,0,0,131,3,0,1, + 116,25,0,106,26,0,116,0,0,106,27,0,131,0,0,131, + 1,0,1,124,9,0,100,9,0,107,2,0,114,233,2,116, + 28,0,106,29,0,100,24,0,131,1,0,1,100,25,0,116, + 25,0,107,6,0,114,233,2,100,26,0,116,30,0,95,31, + 0,113,233,2,110,0,0,100,2,0,83,41,28,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,110,32,109,111,100,117, + 108,101,115,32,97,110,100,32,105,110,106,101,99,116,105,110, + 103,32,116,104,101,109,10,32,32,32,32,105,110,116,111,32, + 116,104,101,32,103,108,111,98,97,108,32,110,97,109,101,115, + 112,97,99,101,46,10,10,32,32,32,32,65,115,32,115,121, + 115,32,105,115,32,110,101,101,100,101,100,32,102,111,114,32, + 115,121,115,46,109,111,100,117,108,101,115,32,97,99,99,101, + 115,115,32,97,110,100,32,95,105,109,112,32,105,115,32,110, + 101,101,100,101,100,32,116,111,32,108,111,97,100,32,98,117, + 105,108,116,45,105,110,10,32,32,32,32,109,111,100,117,108, + 101,115,44,32,116,104,111,115,101,32,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,172,0,0,0,78,114, + 49,0,0,0,114,186,0,0,0,218,8,98,117,105,108,116, + 105,110,115,114,202,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,116,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,144, + 0,0,0,224,6,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,68,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,69, + 0,0,0,114,93,0,0,0,90,6,119,105,110,114,101,103, + 114,226,0,0,0,114,3,0,0,0,114,25,0,0,0,114, + 21,0,0,0,114,30,0,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,32,114,95,0,0,0,114,7,0,0,0,114,103, + 0,0,0,114,104,0,0,0,114,106,0,0,0,114,80,1, + 0,0,114,105,0,0,0,114,153,0,0,0,114,141,0,0, + 0,218,5,105,116,101,109,115,114,203,0,0,0,114,62,0, + 0,0,114,178,0,0,0,114,215,0,0,0,114,172,0,0, + 0,114,182,0,0,0,114,223,0,0,0,114,57,0,0,0, + 114,219,0,0,0,114,61,0,0,0,218,3,97,108,108,114, + 87,0,0,0,114,158,0,0,0,114,26,0,0,0,114,11, + 0,0,0,114,12,1,0,0,114,208,0,0,0,114,79,1, + 0,0,114,120,0,0,0,114,166,0,0,0,114,225,0,0, + 0,114,229,0,0,0,41,16,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,72, + 0,0,0,114,162,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,187,6,0,0,115,102,0,0,0,0,9, + 6,1,6,2,12,1,9,2,6,2,12,1,28,1,15,1, + 24,1,15,1,12,1,15,1,22,2,13,1,13,1,15,1, + 18,2,13,1,20,2,33,1,19,2,31,1,10,1,15,1, + 13,1,4,2,3,1,15,1,5,1,13,1,12,2,12,2, + 3,1,19,1,13,2,11,1,15,2,12,1,15,1,19,2, + 16,1,16,1,16,1,16,1,25,2,19,1,19,1,12,1, + 13,1,12,1,114,91,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,85,1,0,0,78,41,15,114,91,1,0,0,114,235, + 0,0,0,114,7,0,0,0,114,33,1,0,0,114,208,0, + 0,0,114,40,1,0,0,114,54,1,0,0,114,60,1,0, + 0,114,166,0,0,0,114,215,0,0,0,114,223,0,0,0, + 114,3,0,0,0,114,57,0,0,0,114,225,0,0,0,114, + 28,1,0,0,41,3,114,89,1,0,0,114,90,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,7,7,0,0, + 115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,16, + 1,15,1,19,1,114,92,1,0,0,41,3,122,3,119,105, + 110,114,1,0,0,0,114,2,0,0,0,41,82,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,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,153,0,0,0,218,8, + 95,95,99,111,100,101,95,95,114,204,0,0,0,114,90,0, + 0,0,114,79,0,0,0,114,86,0,0,0,114,66,0,0, + 0,114,67,0,0,0,114,89,0,0,0,114,94,0,0,0, + 114,97,0,0,0,114,100,0,0,0,114,15,0,0,0,114, + 196,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,111,0,0,0,114,120,0,0,0,114,105,0,0,0, + 114,106,0,0,0,114,118,0,0,0,114,121,0,0,0,114, + 128,0,0,0,114,130,0,0,0,114,138,0,0,0,114,139, + 0,0,0,114,147,0,0,0,114,156,0,0,0,114,163,0, + 0,0,114,167,0,0,0,114,171,0,0,0,114,174,0,0, + 0,114,177,0,0,0,114,181,0,0,0,114,184,0,0,0, + 114,191,0,0,0,114,201,0,0,0,114,206,0,0,0,114, + 209,0,0,0,114,214,0,0,0,114,215,0,0,0,114,223, + 0,0,0,114,225,0,0,0,114,238,0,0,0,114,242,0, + 0,0,114,1,1,0,0,114,3,1,0,0,114,8,1,0, + 0,114,12,1,0,0,114,9,1,0,0,114,13,1,0,0, + 114,27,1,0,0,114,28,1,0,0,114,40,1,0,0,114, + 55,1,0,0,114,59,1,0,0,114,61,1,0,0,114,64, + 1,0,0,114,74,1,0,0,114,65,1,0,0,114,67,1, + 0,0,114,68,1,0,0,114,69,1,0,0,114,76,1,0, + 0,114,78,1,0,0,114,235,0,0,0,114,82,1,0,0, + 114,91,1,0,0,114,92,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,150,0,0, + 0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12, + 10,12,6,12,7,15,22,12,8,15,6,6,2,6,3,22, + 4,19,68,19,23,12,19,12,20,12,113,22,1,18,2,6, + 2,9,2,9,1,9,2,15,27,12,23,12,19,12,12,18, + 8,19,17,22,42,18,9,12,15,12,11,12,13,12,11,12, + 18,12,11,12,11,12,13,21,55,21,12,18,10,12,14,19, + 52,19,49,19,50,19,41,22,110,19,29,25,43,25,20,6, + 3,19,45,19,55,19,32,19,91,19,127,19,13,12,9,12, + 17,12,17,6,1,10,2,12,46,12,13,18,24,12,32,12, + 15,12,11,24,36,12,76, }; diff --git a/Python/marshal.c b/Python/marshal.c index cc17329..4401afb 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -1,8 +1,10 @@ /* Write Python objects to files and read them back. - This is intended for writing and reading compiled Python code only; - a true persistent storage facility would be much harder, since - it would have to take circular links and sharing into account. */ + This is primarily intended for writing and reading compiled Python code, + even though dicts, lists, sets and frozensets, not commonly seen in + code objects, are supported. + Version 3 of this protocol properly supports circular links + and sharing. */ #define PY_SSIZE_T_CLEAN @@ -31,16 +33,14 @@ #define TYPE_STOPITER 'S' #define TYPE_ELLIPSIS '.' #define TYPE_INT 'i' -/* TYPE_INT64 is deprecated. It is not - generated anymore, and support for reading it - will be removed in Python 3.4. */ -#define TYPE_INT64 'I' #define TYPE_FLOAT 'f' #define TYPE_BINARY_FLOAT 'g' #define TYPE_COMPLEX 'x' #define TYPE_BINARY_COMPLEX 'y' #define TYPE_LONG 'l' #define TYPE_STRING 's' +#define TYPE_INTERNED 't' +#define TYPE_REF 'r' #define TYPE_TUPLE '(' #define TYPE_LIST '[' #define TYPE_DICT '{' @@ -49,6 +49,13 @@ #define TYPE_UNKNOWN '?' #define TYPE_SET '<' #define TYPE_FROZENSET '>' +#define FLAG_REF '\x80' /* with a type, add obj to index */ + +#define TYPE_ASCII 'a' +#define TYPE_ASCII_INTERNED 'A' +#define TYPE_SMALL_TUPLE ')' +#define TYPE_SHORT_ASCII 'z' +#define TYPE_SHORT_ASCII_INTERNED 'Z' #define WFERR_OK 0 #define WFERR_UNMARSHALLABLE 1 @@ -65,6 +72,9 @@ typedef struct { PyObject *current_filename; char *ptr; char *end; + char *buf; + Py_ssize_t buf_size; + PyObject *refs; /* dict on marshal, list on unmarshal */ int version; } WFILE; @@ -73,7 +83,7 @@ typedef struct { else w_more(c, p) static void -w_more(int c, WFILE *p) +w_more(char c, WFILE *p) { Py_ssize_t size, newsize; if (p->str == NULL) @@ -90,7 +100,7 @@ w_more(int c, WFILE *p) p->ptr = PyBytes_AS_STRING((PyBytesObject *)p->str) + size; p->end = PyBytes_AS_STRING((PyBytesObject *)p->str) + newsize; - *p->ptr++ = Py_SAFE_DOWNCAST(c, int, char); + *p->ptr++ = c; } } @@ -146,6 +156,13 @@ w_pstring(const char *s, Py_ssize_t n, WFILE *p) w_string(s, n, p); } +static void +w_short_pstring(const char *s, Py_ssize_t n, WFILE *p) +{ + w_byte(Py_SAFE_DOWNCAST(n, Py_ssize_t, unsigned char), p); + w_string(s, n, p); +} + /* We assume that Python ints are stored internally in base some power of 2**15; for the sake of portability we'll always read and write them in base exactly 2**15. */ @@ -158,13 +175,17 @@ w_pstring(const char *s, Py_ssize_t n, WFILE *p) #endif #define PyLong_MARSHAL_RATIO (PyLong_SHIFT / PyLong_MARSHAL_SHIFT) +#define W_TYPE(t, p) do { \ + w_byte((t) | flag, (p)); \ +} while(0) + static void -w_PyLong(const PyLongObject *ob, WFILE *p) +w_PyLong(const PyLongObject *ob, char flag, WFILE *p) { Py_ssize_t i, j, n, l; digit d; - w_byte(TYPE_LONG, p); + W_TYPE(TYPE_LONG, p); if (Py_SIZE(ob) == 0) { w_long((long)0, p); return; @@ -201,10 +222,64 @@ w_PyLong(const PyLongObject *ob, WFILE *p) } while (d != 0); } +static int +w_ref(PyObject *v, char *flag, WFILE *p) +{ + PyObject *id; + PyObject *idx; + + if (p->version < 3 || p->refs == 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) { + /* write the reference index to the stream */ + long w = PyLong_AsLong(idx); + Py_DECREF(id); + if (w == -1 && PyErr_Occurred()) { + goto err; + } + /* 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); + /* 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) + goto err; + *flag |= FLAG_REF; + return 0; + } +err: + p->error = WFERR_UNMARSHALLABLE; + return 1; +} + +static void +w_complex_object(PyObject *v, char flag, WFILE *p); + static void w_object(PyObject *v, WFILE *p) { - Py_ssize_t i, n; + char flag = '\0'; p->depth++; @@ -229,24 +304,35 @@ w_object(PyObject *v, WFILE *p) else if (v == Py_True) { w_byte(TYPE_TRUE, p); } - else if (PyLong_CheckExact(v)) { + else if (!w_ref(v, &flag, p)) + w_complex_object(v, flag, p); + + p->depth--; +} + +static void +w_complex_object(PyObject *v, char flag, WFILE *p) +{ + Py_ssize_t i, n; + + if (PyLong_CheckExact(v)) { long x = PyLong_AsLong(v); if ((x == -1) && PyErr_Occurred()) { PyLongObject *ob = (PyLongObject *)v; PyErr_Clear(); - w_PyLong(ob, p); + w_PyLong(ob, flag, p); } else { #if SIZEOF_LONG > 4 long y = Py_ARITHMETIC_RIGHT_SHIFT(long, x, 31); if (y && y != -1) { /* Too large for TYPE_INT */ - w_PyLong((PyLongObject*)v, p); + w_PyLong((PyLongObject*)v, flag, p); } else #endif { - w_byte(TYPE_INT, p); + W_TYPE(TYPE_INT, p); w_long(x, p); } } @@ -259,7 +345,7 @@ w_object(PyObject *v, WFILE *p) p->error = WFERR_UNMARSHALLABLE; return; } - w_byte(TYPE_BINARY_FLOAT, p); + W_TYPE(TYPE_BINARY_FLOAT, p); w_string((char*)buf, 8, p); } else { @@ -270,7 +356,7 @@ w_object(PyObject *v, WFILE *p) return; } n = strlen(buf); - w_byte(TYPE_FLOAT, p); + W_TYPE(TYPE_FLOAT, p); w_byte((int)n, p); w_string(buf, n, p); PyMem_Free(buf); @@ -284,7 +370,7 @@ w_object(PyObject *v, WFILE *p) p->error = WFERR_UNMARSHALLABLE; return; } - w_byte(TYPE_BINARY_COMPLEX, p); + W_TYPE(TYPE_BINARY_COMPLEX, p); w_string((char*)buf, 8, p); if (_PyFloat_Pack8(PyComplex_ImagAsDouble(v), buf, 1) < 0) { @@ -295,7 +381,7 @@ w_object(PyObject *v, WFILE *p) } else { char *buf; - w_byte(TYPE_COMPLEX, p); + W_TYPE(TYPE_COMPLEX, p); buf = PyOS_double_to_string(PyComplex_RealAsDouble(v), 'g', 17, 0, NULL); if (!buf) { @@ -319,31 +405,61 @@ w_object(PyObject *v, WFILE *p) } } else if (PyBytes_CheckExact(v)) { - w_byte(TYPE_STRING, p); + W_TYPE(TYPE_STRING, p); w_pstring(PyBytes_AS_STRING(v), PyBytes_GET_SIZE(v), p); } else if (PyUnicode_CheckExact(v)) { - PyObject *utf8; - utf8 = PyUnicode_AsEncodedString(v, "utf8", "surrogatepass"); - if (utf8 == NULL) { - p->depth--; - p->error = WFERR_UNMARSHALLABLE; - return; + if (p->version >= 4 && PyUnicode_IS_ASCII(v)) { + int is_short = PyUnicode_GET_LENGTH(v) < 256; + if (is_short) { + if (PyUnicode_CHECK_INTERNED(v)) + W_TYPE(TYPE_SHORT_ASCII_INTERNED, p); + else + W_TYPE(TYPE_SHORT_ASCII, p); + w_short_pstring((char *) PyUnicode_1BYTE_DATA(v), + PyUnicode_GET_LENGTH(v), p); + } + else { + if (PyUnicode_CHECK_INTERNED(v)) + W_TYPE(TYPE_ASCII_INTERNED, p); + else + W_TYPE(TYPE_ASCII, p); + w_pstring((char *) PyUnicode_1BYTE_DATA(v), + PyUnicode_GET_LENGTH(v), p); + } + } + else { + PyObject *utf8; + utf8 = PyUnicode_AsEncodedString(v, "utf8", "surrogatepass"); + if (utf8 == NULL) { + p->depth--; + p->error = WFERR_UNMARSHALLABLE; + return; + } + if (p->version >= 3 && PyUnicode_CHECK_INTERNED(v)) + W_TYPE(TYPE_INTERNED, p); + else + W_TYPE(TYPE_UNICODE, p); + w_pstring(PyBytes_AS_STRING(utf8), PyBytes_GET_SIZE(utf8), p); + Py_DECREF(utf8); } - w_byte(TYPE_UNICODE, p); - w_pstring(PyBytes_AS_STRING(utf8), PyBytes_GET_SIZE(utf8), p); - Py_DECREF(utf8); } else if (PyTuple_CheckExact(v)) { - w_byte(TYPE_TUPLE, p); n = PyTuple_Size(v); - W_SIZE(n, p); + if (p->version >= 4 && n < 256) { + W_TYPE(TYPE_SMALL_TUPLE, p); + w_byte(n, p); + } + else { + W_TYPE(TYPE_TUPLE, p); + W_SIZE(n, p); + } for (i = 0; i < n; i++) { w_object(PyTuple_GET_ITEM(v, i), p); } } else if (PyList_CheckExact(v)) { - w_byte(TYPE_LIST, p); + W_TYPE(TYPE_LIST, p); n = PyList_GET_SIZE(v); W_SIZE(n, p); for (i = 0; i < n; i++) { @@ -353,7 +469,7 @@ w_object(PyObject *v, WFILE *p) else if (PyDict_CheckExact(v)) { Py_ssize_t pos; PyObject *key, *value; - w_byte(TYPE_DICT, p); + W_TYPE(TYPE_DICT, p); /* This one is NULL object terminated! */ pos = 0; while (PyDict_Next(v, &pos, &key, &value)) { @@ -366,9 +482,9 @@ w_object(PyObject *v, WFILE *p) PyObject *value, *it; if (PyObject_TypeCheck(v, &PySet_Type)) - w_byte(TYPE_SET, p); + W_TYPE(TYPE_SET, p); else - w_byte(TYPE_FROZENSET, p); + W_TYPE(TYPE_FROZENSET, p); n = PyObject_Size(v); if (n == -1) { p->depth--; @@ -395,7 +511,7 @@ w_object(PyObject *v, WFILE *p) } else if (PyCode_Check(v)) { PyCodeObject *co = (PyCodeObject *)v; - w_byte(TYPE_CODE, p); + W_TYPE(TYPE_CODE, p); w_long(co->co_argcount, p); w_long(co->co_kwonlyargcount, p); w_long(co->co_nlocals, p); @@ -421,15 +537,14 @@ w_object(PyObject *v, WFILE *p) p->error = WFERR_UNMARSHALLABLE; return; } - w_byte(TYPE_STRING, p); + W_TYPE(TYPE_STRING, p); w_pstring(view.buf, view.len, p); PyBuffer_Release(&view); } else { - w_byte(TYPE_UNKNOWN, p); + W_TYPE(TYPE_UNKNOWN, p); p->error = WFERR_UNMARSHALLABLE; } - p->depth--; } /* version currently has no effect for writing ints. */ @@ -440,6 +555,7 @@ PyMarshal_WriteLongToFile(long x, FILE *fp, int version) wf.fp = fp; wf.error = WFERR_OK; wf.depth = 0; + wf.refs = NULL; wf.version = version; w_long(x, &wf); } @@ -451,81 +567,106 @@ PyMarshal_WriteObjectToFile(PyObject *x, FILE *fp, int version) wf.fp = fp; 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; w_object(x, &wf); + Py_XDECREF(wf.refs); } typedef WFILE RFILE; /* Same struct with different invariants */ -#define rs_byte(p) (((p)->ptr < (p)->end) ? (unsigned char)*(p)->ptr++ : EOF) - -static Py_ssize_t -r_string(char *s, Py_ssize_t n, RFILE *p) +static char * +r_string(Py_ssize_t n, RFILE *p) { - char *ptr; - Py_ssize_t read, left; - - if (!p->readable) { - if (p->fp != NULL) - /* The result fits into int because it must be <=n. */ - read = fread(s, 1, n, p->fp); - else { - left = p->end - p->ptr; - read = (left < n) ? left : n; - memcpy(s, p->ptr, read); - p->ptr += read; + Py_ssize_t read = -1; + + if (p->ptr != NULL) { + /* Fast path for loads() */ + char *res = p->ptr; + Py_ssize_t left = p->end - p->ptr; + if (left < n) { + PyErr_SetString(PyExc_EOFError, + "marshal data too short"); + return NULL; + } + p->ptr += n; + return res; + } + if (p->buf == NULL) { + p->buf = PyMem_MALLOC(n); + if (p->buf == NULL) { + PyErr_NoMemory(); + return NULL; + } + p->buf_size = n; + } + else if (p->buf_size < n) { + p->buf = PyMem_REALLOC(p->buf, n); + if (p->buf == NULL) { + PyErr_NoMemory(); + return NULL; } + p->buf_size = n; + } + if (!p->readable) { + assert(p->fp != NULL); + read = fread(p->buf, 1, n, p->fp); } else { - _Py_IDENTIFIER(read); - - PyObject *data = _PyObject_CallMethodId(p->readable, &PyId_read, "n", n); - read = 0; - if (data != NULL) { - if (!PyBytes_Check(data)) { - PyErr_Format(PyExc_TypeError, - "f.read() returned not bytes but %.100s", - data->ob_type->tp_name); - } - else { - read = PyBytes_GET_SIZE(data); - if (read > 0) { - if (read > n) { - PyErr_Format(PyExc_ValueError, - "read() returned too much data: " - "%zd bytes requested, %zd returned", - n, read); - read = -1; - } - else { - ptr = PyBytes_AS_STRING(data); - memcpy(s, ptr, read); - } - } - } - Py_DECREF(data); + _Py_IDENTIFIER(readinto); + PyObject *res, *mview; + Py_buffer buf; + + if (PyBuffer_FillInfo(&buf, NULL, p->buf, n, 0, PyBUF_CONTIG) == -1) + return NULL; + mview = PyMemoryView_FromBuffer(&buf); + if (mview == NULL) + return NULL; + + res = _PyObject_CallMethodId(p->readable, &PyId_readinto, "N", mview); + if (res != NULL) { + read = PyNumber_AsSsize_t(res, PyExc_ValueError); + Py_DECREF(res); } } - if (!PyErr_Occurred() && (read < n)) { - PyErr_SetString(PyExc_EOFError, "EOF read where not expected"); + if (read != n) { + if (!PyErr_Occurred()) { + if (read > n) + PyErr_Format(PyExc_ValueError, + "read() returned too much data: " + "%zd bytes requested, %zd returned", + n, read); + else + PyErr_SetString(PyExc_EOFError, + "EOF read where not expected"); + } + return NULL; } - return read; + return p->buf; } - static int r_byte(RFILE *p) { int c = EOF; - unsigned char ch; - Py_ssize_t n; - if (!p->readable) - c = p->fp ? getc(p->fp) : rs_byte(p); + if (p->ptr != NULL) { + if (p->ptr < p->end) + c = (unsigned char) *p->ptr++; + return c; + } + if (!p->readable) { + assert(p->fp); + c = getc(p->fp); + } else { - n = r_string((char *) &ch, 1, p); - if (n > 0) - c = ch; + char *ptr = r_string(1, p); + if (ptr != NULL) + c = *(unsigned char *) ptr; } return c; } @@ -533,69 +674,37 @@ r_byte(RFILE *p) static int r_short(RFILE *p) { - register short x; - unsigned char buffer[2]; - - r_string((char *) buffer, 2, p); - x = buffer[0]; - x |= buffer[1] << 8; - /* Sign-extension, in case short greater than 16 bits */ - x |= -(x & 0x8000); + short x = -1; + unsigned char *buffer; + + buffer = (unsigned char *) r_string(2, p); + if (buffer != NULL) { + x = buffer[0]; + x |= buffer[1] << 8; + /* Sign-extension, in case short greater than 16 bits */ + x |= -(x & 0x8000); + } return x; } static long r_long(RFILE *p) { - register long x; - unsigned char buffer[4]; - - r_string((char *) buffer, 4, p); - x = buffer[0]; - x |= (long)buffer[1] << 8; - x |= (long)buffer[2] << 16; - x |= (long)buffer[3] << 24; -#if SIZEOF_LONG > 4 - /* Sign extension for 64-bit machines */ - x |= -(x & 0x80000000L); -#endif - return x; -} - -/* r_long64 deals with the TYPE_INT64 code. On a machine with - sizeof(long) > 4, it returns a Python int object, else a Python long - object. Note that w_long64 writes out TYPE_INT if 32 bits is enough, - so there's no inefficiency here in returning a PyLong on 32-bit boxes - for everything written via TYPE_INT64 (i.e., if an int is written via - TYPE_INT64, it *needs* more than 32 bits). -*/ -static PyObject * -r_long64(RFILE *p) -{ - PyObject *result = NULL; - long lo4 = r_long(p); - long hi4 = r_long(p); - - if (!PyErr_Occurred()) { + long x = -1; + unsigned char *buffer; + + buffer = (unsigned char *) r_string(4, p); + if (buffer != NULL) { + x = buffer[0]; + x |= (long)buffer[1] << 8; + x |= (long)buffer[2] << 16; + x |= (long)buffer[3] << 24; #if SIZEOF_LONG > 4 - long x = (hi4 << 32) | (lo4 & 0xFFFFFFFFL); - result = PyLong_FromLong(x); -#else - unsigned char buf[8]; - int one = 1; - int is_little_endian = (int)*(char*)&one; - if (is_little_endian) { - memcpy(buf, &lo4, 4); - memcpy(buf+4, &hi4, 4); - } - else { - memcpy(buf, &hi4, 4); - memcpy(buf+4, &lo4, 4); - } - result = _PyLong_FromByteArray(buf, 8, is_little_endian, 1); + /* Sign extension for 64-bit machines */ + x |= -(x & 0x80000000L); #endif } - return result; + return x; } static PyObject * @@ -667,6 +776,58 @@ r_PyLong(RFILE *p) return NULL; } +/* allocate the reflist index for a new object. Return -1 on failure */ +static Py_ssize_t +r_ref_reserve(int flag, RFILE *p) +{ + if (flag) { /* currently only FLAG_REF is defined */ + Py_ssize_t idx = PyList_GET_SIZE(p->refs); + if (idx >= 0x7ffffffe) { + PyErr_SetString(PyExc_ValueError, "bad marshal data (index list too large)"); + return -1; + } + if (PyList_Append(p->refs, Py_None) < 0) + return -1; + return idx; + } else + return 0; +} + +/* insert the new object 'o' to the reflist at previously + * allocated index 'idx'. + * 'o' can be NULL, in which case nothing is done. + * if 'o' was non-NULL, and the function succeeds, 'o' is returned. + * if 'o' was non-NULL, and the function fails, 'o' is released and + * NULL returned. This simplifies error checking at the call site since + * a single test for NULL for the function result is enough. + */ +static PyObject * +r_ref_insert(PyObject *o, Py_ssize_t idx, int flag, RFILE *p) +{ + if (o != NULL && flag) { /* currently only FLAG_REF is defined */ + PyObject *tmp = PyList_GET_ITEM(p->refs, idx); + Py_INCREF(o); + PyList_SET_ITEM(p->refs, idx, o); + Py_DECREF(tmp); + } + return o; +} + +/* combination of both above, used when an object can be + * created whenever it is seen in the file, as opposed to + * after having loaded its sub-objects. + */ +static PyObject * +r_ref(PyObject *o, int flag, RFILE *p) +{ + if (o != NULL && flag) { /* currently only FLAG_REF is defined */ + if (PyList_Append(p->refs, o) < 0) { + Py_DECREF(o); /* release the new object */ + return NULL; + } + } + return o; +} static PyObject * r_object(RFILE *p) @@ -674,9 +835,17 @@ r_object(RFILE *p) /* NULL is a valid return value, it does not necessarily means that an exception is set. */ PyObject *v, *v2; + Py_ssize_t idx = 0; long i, n; - int type = r_byte(p); - PyObject *retval; + int type, code = r_byte(p); + int flag, is_interned = 0; + PyObject *retval = NULL; + + if (code == EOF) { + PyErr_SetString(PyExc_EOFError, + "EOF read where object expected"); + return NULL; + } p->depth++; @@ -686,16 +855,17 @@ r_object(RFILE *p) return NULL; } - switch (type) { + flag = code & FLAG_REF; + type = code & ~FLAG_REF; - case EOF: - PyErr_SetString(PyExc_EOFError, - "EOF read where object expected"); - retval = NULL; - break; +#define R_REF(O) do{\ + if (flag) \ + O = r_ref(O, flag, p);\ +} while (0) + + switch (type) { case TYPE_NULL: - retval = NULL; break; case TYPE_NONE: @@ -726,67 +896,66 @@ r_object(RFILE *p) case TYPE_INT: n = r_long(p); retval = PyErr_Occurred() ? NULL : PyLong_FromLong(n); - break; - - case TYPE_INT64: - retval = r_long64(p); + R_REF(retval); break; case TYPE_LONG: retval = r_PyLong(p); + R_REF(retval); break; case TYPE_FLOAT: { - char buf[256]; + char buf[256], *ptr; double dx; - retval = NULL; n = r_byte(p); if (n == EOF) { PyErr_SetString(PyExc_EOFError, "EOF read where object expected"); break; } - if (r_string(buf, n, p) != n) + ptr = r_string(n, p); + if (ptr == NULL) break; + memcpy(buf, ptr, n); buf[n] = '\0'; dx = PyOS_string_to_double(buf, NULL, NULL); if (dx == -1.0 && PyErr_Occurred()) break; retval = PyFloat_FromDouble(dx); + R_REF(retval); break; } case TYPE_BINARY_FLOAT: { - unsigned char buf[8]; + unsigned char *buf; double x; - if (r_string((char*)buf, 8, p) != 8) { - retval = NULL; + buf = (unsigned char *) r_string(8, p); + if (buf == NULL) break; - } x = _PyFloat_Unpack8(buf, 1); - if (x == -1.0 && PyErr_Occurred()) { - retval = NULL; + if (x == -1.0 && PyErr_Occurred()) break; - } retval = PyFloat_FromDouble(x); + R_REF(retval); break; } case TYPE_COMPLEX: { - char buf[256]; + char buf[256], *ptr; Py_complex c; - retval = NULL; n = r_byte(p); if (n == EOF) { PyErr_SetString(PyExc_EOFError, "EOF read where object expected"); break; } - if (r_string(buf, n, p) != n) + ptr = r_string(n, p); + if (ptr == NULL) break; + memcpy(buf, ptr, n); buf[n] = '\0'; c.real = PyOS_string_to_double(buf, NULL, NULL); if (c.real == -1.0 && PyErr_Occurred()) @@ -797,112 +966,148 @@ r_object(RFILE *p) "EOF read where object expected"); break; } - if (r_string(buf, n, p) != n) + ptr = r_string(n, p); + if (ptr == NULL) break; + memcpy(buf, ptr, n); buf[n] = '\0'; c.imag = PyOS_string_to_double(buf, NULL, NULL); if (c.imag == -1.0 && PyErr_Occurred()) break; retval = PyComplex_FromCComplex(c); + R_REF(retval); break; } case TYPE_BINARY_COMPLEX: { - unsigned char buf[8]; + unsigned char *buf; Py_complex c; - if (r_string((char*)buf, 8, p) != 8) { - retval = NULL; + buf = (unsigned char *) r_string(8, p); + if (buf == NULL) break; - } c.real = _PyFloat_Unpack8(buf, 1); - if (c.real == -1.0 && PyErr_Occurred()) { - retval = NULL; + if (c.real == -1.0 && PyErr_Occurred()) break; - } - if (r_string((char*)buf, 8, p) != 8) { - retval = NULL; + buf = (unsigned char *) r_string(8, p); + if (buf == NULL) break; - } c.imag = _PyFloat_Unpack8(buf, 1); - if (c.imag == -1.0 && PyErr_Occurred()) { - retval = NULL; + if (c.imag == -1.0 && PyErr_Occurred()) break; - } retval = PyComplex_FromCComplex(c); + R_REF(retval); break; } case TYPE_STRING: - n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + { + char *ptr; + n = r_long(p); + if (PyErr_Occurred()) + break; + if (n < 0 || n > SIZE32_MAX) { + PyErr_SetString(PyExc_ValueError, "bad marshal data (string size out of range)"); + break; + } + v = PyBytes_FromStringAndSize((char *)NULL, n); + if (v == NULL) + break; + ptr = r_string(n, p); + if (ptr == NULL) { + Py_DECREF(v); + break; + } + memcpy(PyBytes_AS_STRING(v), ptr, n); + retval = v; + R_REF(retval); break; } + + case TYPE_ASCII_INTERNED: + is_interned = 1; + case TYPE_ASCII: + n = r_long(p); + if (PyErr_Occurred()) + break; if (n < 0 || n > SIZE32_MAX) { - PyErr_SetString(PyExc_ValueError, "bad marshal data (string size out of range)"); - retval = NULL; + PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)"); break; } - v = PyBytes_FromStringAndSize((char *)NULL, n); - if (v == NULL) { - retval = NULL; + goto _read_ascii; + + case TYPE_SHORT_ASCII_INTERNED: + is_interned = 1; + case TYPE_SHORT_ASCII: + n = r_byte(p); + if (n == EOF) { + PyErr_SetString(PyExc_EOFError, + "EOF read where object expected"); break; } - if (r_string(PyBytes_AS_STRING(v), n, p) != n) { - Py_DECREF(v); - retval = NULL; + _read_ascii: + { + char *ptr; + ptr = r_string(n, p); + if (ptr == NULL) + break; + v = PyUnicode_FromKindAndData(PyUnicode_1BYTE_KIND, ptr, n); + if (v == NULL) + break; + if (is_interned) + PyUnicode_InternInPlace(&v); + retval = v; + R_REF(retval); break; } - retval = v; - break; + case TYPE_INTERNED: + is_interned = 1; case TYPE_UNICODE: { char *buffer; n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + if (PyErr_Occurred()) break; - } if (n < 0 || n > SIZE32_MAX) { PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)"); - retval = NULL; break; } - buffer = PyMem_NEW(char, n); - if (buffer == NULL) { - retval = PyErr_NoMemory(); - break; + if (n != 0) { + buffer = r_string(n, p); + if (buffer == NULL) + break; + v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass"); } - if (r_string(buffer, n, p) != n) { - PyMem_DEL(buffer); - retval = NULL; - break; + else { + v = PyUnicode_New(0, 0); } - v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass"); - PyMem_DEL(buffer); + if (v == NULL) + break; + if (is_interned) + PyUnicode_InternInPlace(&v); retval = v; + R_REF(retval); break; } + case TYPE_SMALL_TUPLE: + n = (unsigned char) r_byte(p); + goto _read_tuple; case TYPE_TUPLE: n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + if (PyErr_Occurred()) break; - } if (n < 0 || n > SIZE32_MAX) { PyErr_SetString(PyExc_ValueError, "bad marshal data (tuple size out of range)"); - retval = NULL; break; } + _read_tuple: v = PyTuple_New(n); - if (v == NULL) { - retval = NULL; + R_REF(v); + if (v == NULL) break; - } for (i = 0; i < n; i++) { v2 = r_object(p); if ( v2 == NULL ) { @@ -920,20 +1125,16 @@ r_object(RFILE *p) case TYPE_LIST: n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + if (PyErr_Occurred()) break; - } if (n < 0 || n > SIZE32_MAX) { PyErr_SetString(PyExc_ValueError, "bad marshal data (list size out of range)"); - retval = NULL; break; } v = PyList_New(n); - if (v == NULL) { - retval = NULL; + R_REF(v); + if (v == NULL) break; - } for (i = 0; i < n; i++) { v2 = r_object(p); if ( v2 == NULL ) { @@ -951,10 +1152,9 @@ r_object(RFILE *p) case TYPE_DICT: v = PyDict_New(); - if (v == NULL) { - retval = NULL; + R_REF(v); + if (v == NULL) break; - } for (;;) { PyObject *key, *val; key = r_object(p); @@ -976,20 +1176,25 @@ r_object(RFILE *p) case TYPE_SET: case TYPE_FROZENSET: n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + if (PyErr_Occurred()) break; - } if (n < 0 || n > SIZE32_MAX) { PyErr_SetString(PyExc_ValueError, "bad marshal data (set size out of range)"); - retval = NULL; break; } v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL); - if (v == NULL) { - retval = NULL; - break; + if (type == TYPE_SET) { + R_REF(v); + } else { + /* must use delayed registration of frozensets because they must + * be init with a refcount of 1 + */ + idx = r_ref_reserve(flag, p); + if (idx < 0) + Py_CLEAR(v); /* signal error */ } + if (v == NULL) + break; for (i = 0; i < n; i++) { v2 = r_object(p); if ( v2 == NULL ) { @@ -1008,6 +1213,8 @@ r_object(RFILE *p) } Py_DECREF(v2); } + if (type != TYPE_SET) + v = r_ref_insert(v, idx, flag, p); retval = v; break; @@ -1029,6 +1236,10 @@ r_object(RFILE *p) int firstlineno; PyObject *lnotab = NULL; + idx = r_ref_reserve(flag, p); + if (idx < 0) + break; + v = NULL; /* XXX ignore long->int overflows for now */ @@ -1084,6 +1295,8 @@ r_object(RFILE *p) if (name == NULL) goto code_error; firstlineno = (int)r_long(p); + if (firstlineno == -1 && PyErr_Occurred()) + break; lnotab = r_object(p); if (lnotab == NULL) goto code_error; @@ -1094,6 +1307,7 @@ r_object(RFILE *p) code, consts, names, varnames, freevars, cellvars, filename, name, firstlineno, lnotab); + v = r_ref_insert(v, idx, flag, p); code_error: Py_XDECREF(code); @@ -1109,11 +1323,27 @@ r_object(RFILE *p) retval = v; break; + case TYPE_REF: + n = r_long(p); + if (n < 0 || n >= PyList_GET_SIZE(p->refs)) { + if (n == -1 && PyErr_Occurred()) + break; + PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)"); + break; + } + v = PyList_GET_ITEM(p->refs, n); + if (v == Py_None) { + PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)"); + break; + } + Py_INCREF(v); + retval = v; + break; + default: /* Bogus data got written, which isn't ideal. This will let you keep working and recover. */ PyErr_SetString(PyExc_ValueError, "bad marshal data (unknown type code)"); - retval = NULL; break; } @@ -1139,23 +1369,33 @@ int PyMarshal_ReadShortFromFile(FILE *fp) { RFILE rf; + int res; assert(fp); rf.readable = NULL; rf.fp = fp; rf.current_filename = NULL; rf.end = rf.ptr = NULL; - return r_short(&rf); + rf.buf = NULL; + res = r_short(&rf); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); + return res; } long PyMarshal_ReadLongFromFile(FILE *fp) { RFILE rf; + long res; rf.fp = fp; rf.readable = NULL; rf.current_filename = NULL; rf.ptr = rf.end = NULL; - return r_long(&rf); + rf.buf = NULL; + res = r_long(&rf); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); + return res; } #ifdef HAVE_FSTAT @@ -1214,22 +1454,36 @@ PyMarshal_ReadObjectFromFile(FILE *fp) rf.current_filename = NULL; rf.depth = 0; rf.ptr = rf.end = NULL; + rf.buf = NULL; + rf.refs = PyList_New(0); + if (rf.refs == NULL) + return NULL; result = r_object(&rf); + Py_DECREF(rf.refs); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); return result; } PyObject * -PyMarshal_ReadObjectFromString(char *str, Py_ssize_t len) +PyMarshal_ReadObjectFromString(const char *str, Py_ssize_t len) { RFILE rf; PyObject *result; rf.fp = NULL; rf.readable = NULL; rf.current_filename = NULL; - rf.ptr = str; - rf.end = str + len; + rf.ptr = (char *)str; + rf.end = (char *)str + len; + rf.buf = NULL; rf.depth = 0; + rf.refs = PyList_New(0); + if (rf.refs == NULL) + return NULL; result = r_object(&rf); + Py_DECREF(rf.refs); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); return result; } @@ -1248,7 +1502,13 @@ PyMarshal_WriteObjectToString(PyObject *x, int version) wf.error = WFERR_OK; wf.depth = 0; wf.version = version; + if (version >= 3) { + if ((wf.refs = PyDict_New()) == NULL) + return NULL; + } else + wf.refs = NULL; w_object(x, &wf); + Py_XDECREF(wf.refs); if (wf.str != NULL) { char *base = PyBytes_AS_STRING((PyBytesObject *)wf.str); if (wf.ptr - base > PY_SSIZE_T_MAX) { @@ -1320,6 +1580,8 @@ marshal_load(PyObject *self, PyObject *f) * Make a call to the read method, but read zero bytes. * This is to ensure that the object passed in at least * has a read method which returns bytes. + * This can be removed if we guarantee good error handling + * for r_string() */ data = _PyObject_CallMethodId(f, &PyId_read, "i", 0); if (data == NULL) @@ -1335,7 +1597,15 @@ marshal_load(PyObject *self, PyObject *f) rf.fp = NULL; rf.readable = f; rf.current_filename = NULL; - result = read_object(&rf); + rf.ptr = rf.end = NULL; + rf.buf = NULL; + if ((rf.refs = PyList_New(0)) != NULL) { + result = read_object(&rf); + Py_DECREF(rf.refs); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); + } else + result = NULL; } Py_DECREF(data); return result; @@ -1392,8 +1662,11 @@ marshal_loads(PyObject *self, PyObject *args) rf.ptr = s; rf.end = s + n; rf.depth = 0; + if ((rf.refs = PyList_New(0)) == NULL) + return NULL; result = read_object(&rf); PyBuffer_Release(&p); + Py_DECREF(rf.refs); return result; } @@ -1433,6 +1706,7 @@ Variables:\n\ version -- indicates the format that the module uses. Version 0 is the\n\ historical format, version 1 shares interned strings and version 2\n\ uses a binary format for floating point numbers.\n\ + Version 3 shares common object references (New in version 3.4).\n\ \n\ Functions:\n\ \n\ diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c index 8a54cbf..98429d4 100644 --- a/Python/mystrtoul.c +++ b/Python/mystrtoul.c @@ -92,11 +92,11 @@ static int digitlimit[] = { ** exceptions - we don't check for them. */ unsigned long -PyOS_strtoul(register char *str, char **ptr, int base) +PyOS_strtoul(const char *str, char **ptr, int base) { - register unsigned long result = 0; /* return value of the function */ - register int c; /* current input character */ - register int ovlimit; /* required digits to overflow */ + unsigned long result = 0; /* return value of the function */ + int c; /* current input character */ + int ovlimit; /* required digits to overflow */ /* skip leading white space */ while (*str && Py_ISSPACE(Py_CHARMASK(*str))) @@ -111,7 +111,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0x */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -120,7 +120,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0o */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -129,7 +129,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0b */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -141,7 +141,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) while (Py_ISSPACE(Py_CHARMASK(*str))) ++str; if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } } @@ -157,7 +157,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0x */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -171,7 +171,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0o */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -185,7 +185,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0b */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -197,7 +197,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* catch silly bases */ if (base < 2 || base > 36) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } @@ -213,7 +213,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) if (ovlimit > 0) /* no overflow check required */ result = result * base + c; else { /* requires overflow check */ - register unsigned long temp_result; + unsigned long temp_result; if (ovlimit < 0) /* guaranteed overflow */ goto overflowed; @@ -239,7 +239,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* set pointer to point to the last character scanned */ if (ptr) - *ptr = str; + *ptr = (char *)str; return result; @@ -248,7 +248,7 @@ overflowed: /* spool through remaining digit characters */ while (_PyLong_DigitValue[Py_CHARMASK(*str)] < base) ++str; - *ptr = str; + *ptr = (char *)str; } errno = ERANGE; return (unsigned long)-1; @@ -260,7 +260,7 @@ overflowed: #define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN) long -PyOS_strtol(char *str, char **ptr, int base) +PyOS_strtol(const char *str, char **ptr, int base) { long result; unsigned long uresult; diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 2d6bcda..f90a17a 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -68,7 +68,7 @@ static void *opcode_targets[256] = { &&TARGET_BINARY_OR, &&TARGET_INPLACE_POWER, &&TARGET_GET_ITER, - &&TARGET_STORE_LOCALS, + &&_unknown_opcode, &&TARGET_PRINT_EXPR, &&TARGET_LOAD_BUILD_CLASS, &&TARGET_YIELD_FROM, @@ -147,7 +147,7 @@ static void *opcode_targets[256] = { &&TARGET_LIST_APPEND, &&TARGET_SET_ADD, &&TARGET_MAP_ADD, - &&_unknown_opcode, + &&TARGET_LOAD_CLASSDEREF, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, diff --git a/Python/peephole.c b/Python/peephole.c index 5d53677..a49790a 100644 --- a/Python/peephole.c +++ b/Python/peephole.c @@ -327,37 +327,6 @@ markblocks(unsigned char *code, Py_ssize_t len) return blocks; } -/* Helper to replace LOAD_NAME None/True/False with LOAD_CONST - Returns: 0 if no change, 1 if change, -1 if error */ -static int -load_global(unsigned char *codestr, Py_ssize_t i, char *name, PyObject *consts) -{ - Py_ssize_t j; - PyObject *obj; - if (name == NULL) - return 0; - if (strcmp(name, "None") == 0) - obj = Py_None; - else if (strcmp(name, "True") == 0) - obj = Py_True; - else if (strcmp(name, "False") == 0) - obj = Py_False; - else - return 0; - for (j = 0; j < PyList_GET_SIZE(consts); j++) { - if (PyList_GET_ITEM(consts, j) == obj) - break; - } - if (j == PyList_GET_SIZE(consts)) { - if (PyList_Append(consts, obj) < 0) - return -1; - } - assert(PyList_GET_ITEM(consts, j) == obj); - codestr[i] = LOAD_CONST; - SETARG(codestr, i, j); - return 1; -} - /* Perform basic peephole optimizations to components of a code object. The consts object should still be in list form to allow new constants to be appended. @@ -392,7 +361,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, Py_ssize_t const_stack_size = 0; int in_consts = 0; /* whether we are in a LOAD_CONST sequence */ unsigned int *blocks = NULL; - char *name; /* Bail out if an exception is set */ if (PyErr_Occurred()) @@ -413,8 +381,10 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Make a modifiable copy of the code string */ codestr = (unsigned char *)PyMem_Malloc(codelen); - if (codestr == NULL) + if (codestr == NULL) { + PyErr_NoMemory(); goto exitError; + } codestr = (unsigned char *)memcpy(codestr, PyBytes_AS_STRING(code), codelen); @@ -428,8 +398,10 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Mapping to new jump targets after NOPs are removed */ addrmap = (int *)PyMem_Malloc(codelen * sizeof(int)); - if (addrmap == NULL) + if (addrmap == NULL) { + PyErr_NoMemory(); goto exitError; + } blocks = markblocks(codestr, codelen); if (blocks == NULL) @@ -475,20 +447,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, codestr[i+3] = NOP; break; - /* Replace LOAD_GLOBAL/LOAD_NAME None/True/False - with LOAD_CONST None/True/False */ - case LOAD_NAME: - case LOAD_GLOBAL: - j = GETARG(codestr, i); - name = _PyUnicode_AsString(PyTuple_GET_ITEM(names, j)); - h = load_global(codestr, i, name, consts); - if (h < 0) - goto exitError; - else if (h == 0) - continue; - CONST_STACK_PUSH_OP(i); - break; - /* Skip over LOAD_CONST trueconst POP_JUMP_IF_FALSE xx. This improves "while 1" performance. */ diff --git a/Python/pyarena.c b/Python/pyarena.c index 02a31d8..103603f 100644 --- a/Python/pyarena.c +++ b/Python/pyarena.c @@ -77,7 +77,7 @@ block_new(size_t size) { /* Allocate header and block as one unit. ab_mem points just past header. */ - block *b = (block *)malloc(sizeof(block) + size); + block *b = (block *)PyMem_Malloc(sizeof(block) + size); if (!b) return NULL; b->ab_size = size; @@ -92,7 +92,7 @@ static void block_free(block *b) { while (b) { block *next = b->ab_next; - free(b); + PyMem_Free(b); b = next; } } @@ -127,20 +127,20 @@ block_alloc(block *b, size_t size) PyArena * PyArena_New() { - PyArena* arena = (PyArena *)malloc(sizeof(PyArena)); + PyArena* arena = (PyArena *)PyMem_Malloc(sizeof(PyArena)); if (!arena) return (PyArena*)PyErr_NoMemory(); arena->a_head = block_new(DEFAULT_BLOCK_SIZE); arena->a_cur = arena->a_head; if (!arena->a_head) { - free((void *)arena); + PyMem_Free((void *)arena); return (PyArena*)PyErr_NoMemory(); } arena->a_objects = PyList_New(0); if (!arena->a_objects) { block_free(arena->a_head); - free((void *)arena); + PyMem_Free((void *)arena); return (PyArena*)PyErr_NoMemory(); } #if defined(Py_DEBUG) @@ -173,7 +173,7 @@ PyArena_Free(PyArena *arena) */ Py_DECREF(arena->a_objects); - free(arena); + PyMem_Free(arena); } void * diff --git a/Python/pystate.c b/Python/pystate.c index 772aa53..6be71de 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -6,11 +6,11 @@ /* -------------------------------------------------------------------------- CAUTION -Always use malloc() and free() directly in this file. A number of these -functions are advertised as safe to call when the GIL isn't held, and in -a debug build Python redirects (e.g.) PyMem_NEW (etc) to Python's debugging -obmalloc functions. Those aren't thread-safe (they rely on the GIL to avoid -the expense of doing their own locking). +Always use PyMem_RawMalloc() and PyMem_RawFree() directly in this file. A +number of these functions are advertised as safe to call when the GIL isn't +held, and in a debug build Python redirects (e.g.) PyMem_NEW (etc) to Python's +debugging obmalloc functions. Those aren't thread-safe (they rely on the GIL +to avoid the expense of doing their own locking). -------------------------------------------------------------------------- */ #ifdef HAVE_DLOPEN @@ -60,7 +60,7 @@ PyInterpreterState * PyInterpreterState_New(void) { PyInterpreterState *interp = (PyInterpreterState *) - malloc(sizeof(PyInterpreterState)); + PyMem_RawMalloc(sizeof(PyInterpreterState)); if (interp != NULL) { HEAD_INIT(); @@ -148,7 +148,7 @@ PyInterpreterState_Delete(PyInterpreterState *interp) Py_FatalError("PyInterpreterState_Delete: remaining threads"); *p = interp->next; HEAD_UNLOCK(); - free(interp); + PyMem_RawFree(interp); #ifdef WITH_THREAD if (interp_head == NULL && head_mutex != NULL) { PyThread_free_lock(head_mutex); @@ -168,7 +168,7 @@ threadstate_getframe(PyThreadState *self) static PyThreadState * new_threadstate(PyInterpreterState *interp, int init) { - PyThreadState *tstate = (PyThreadState *)malloc(sizeof(PyThreadState)); + PyThreadState *tstate = (PyThreadState *)PyMem_RawMalloc(sizeof(PyThreadState)); if (_PyThreadState_GetFrame == NULL) _PyThreadState_GetFrame = threadstate_getframe; @@ -182,7 +182,6 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->recursion_critical = 0; tstate->tracing = 0; tstate->use_tracing = 0; - tstate->tick_counter = 0; tstate->gilstate_counter = 0; tstate->async_exc = NULL; #ifdef WITH_THREAD @@ -208,12 +207,17 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->trash_delete_nesting = 0; tstate->trash_delete_later = NULL; + tstate->on_delete = NULL; + tstate->on_delete_data = NULL; if (init) _PyThreadState_Init(tstate); HEAD_LOCK(); + tstate->prev = NULL; tstate->next = interp->tstate_head; + if (tstate->next) + tstate->next->prev = tstate; interp->tstate_head = tstate; HEAD_UNLOCK(); } @@ -317,6 +321,31 @@ PyState_RemoveModule(struct PyModuleDef* def) return PyList_SetItem(state->modules_by_index, index, Py_None); } +/* used by import.c:PyImport_Cleanup */ +void +_PyState_ClearModules(void) +{ + PyInterpreterState *state = PyThreadState_GET()->interp; + if (state->modules_by_index) { + Py_ssize_t i; + for (i = 0; i < PyList_GET_SIZE(state->modules_by_index); i++) { + PyObject *m = PyList_GET_ITEM(state->modules_by_index, i); + if (PyModule_Check(m)) { + /* cleanup the saved copy of module dicts */ + PyModuleDef *md = PyModule_GetDef(m); + if (md) + Py_CLEAR(md->m_base.m_copy); + } + } + /* Setting modules_by_index to NULL could be dangerous, so we + clear the list instead. */ + if (PyList_SetSlice(state->modules_by_index, + 0, PyList_GET_SIZE(state->modules_by_index), + NULL)) + PyErr_WriteUnraisable(state->modules_by_index); + } +} + void PyThreadState_Clear(PyThreadState *tstate) { @@ -349,37 +378,23 @@ static void tstate_delete_common(PyThreadState *tstate) { PyInterpreterState *interp; - PyThreadState **p; - PyThreadState *prev_p = NULL; if (tstate == NULL) Py_FatalError("PyThreadState_Delete: NULL tstate"); interp = tstate->interp; if (interp == NULL) Py_FatalError("PyThreadState_Delete: NULL interp"); HEAD_LOCK(); - for (p = &interp->tstate_head; ; p = &(*p)->next) { - if (*p == NULL) - Py_FatalError( - "PyThreadState_Delete: invalid tstate"); - if (*p == tstate) - break; - /* Sanity check. These states should never happen but if - * they do we must abort. Otherwise we'll end up spinning in - * in a tight loop with the lock held. A similar check is done - * in thread.c find_key(). */ - if (*p == prev_p) - Py_FatalError( - "PyThreadState_Delete: small circular list(!)" - " and tstate not found."); - prev_p = *p; - if ((*p)->next == interp->tstate_head) - Py_FatalError( - "PyThreadState_Delete: circular list(!) and" - " tstate not found."); - } - *p = tstate->next; + if (tstate->prev) + tstate->prev->next = tstate->next; + else + interp->tstate_head = tstate->next; + if (tstate->next) + tstate->next->prev = tstate->prev; HEAD_UNLOCK(); - free(tstate); + if (tstate->on_delete != NULL) { + tstate->on_delete(tstate->on_delete_data); + } + PyMem_RawFree(tstate); } @@ -414,6 +429,43 @@ PyThreadState_DeleteCurrent() #endif /* WITH_THREAD */ +/* + * Delete all thread states except the one passed as argument. + * Note that, if there is a current thread state, it *must* be the one + * passed as argument. Also, this won't touch any other interpreters + * than the current one, since we don't know which thread state should + * be kept in those other interpreteres. + */ +void +_PyThreadState_DeleteExcept(PyThreadState *tstate) +{ + PyInterpreterState *interp = tstate->interp; + PyThreadState *p, *next, *garbage; + HEAD_LOCK(); + /* Remove all thread states, except tstate, from the linked list of + thread states. This will allow calling PyThreadState_Clear() + without holding the lock. */ + garbage = interp->tstate_head; + if (garbage == tstate) + garbage = tstate->next; + if (tstate->prev) + tstate->prev->next = tstate->next; + if (tstate->next) + tstate->next->prev = tstate->prev; + tstate->prev = tstate->next = NULL; + interp->tstate_head = tstate; + HEAD_UNLOCK(); + /* Clear and deallocate all stale thread states. Even if this + executes Python code, we should be safe since it executes + in the current thread, not one of the stale threads. */ + for (p = garbage; p; p = next) { + next = p->next; + PyThreadState_Clear(p); + PyMem_RawFree(p); + } +} + + PyThreadState * PyThreadState_Get(void) { @@ -697,6 +749,15 @@ PyGILState_GetThisThreadState(void) return (PyThreadState *)PyThread_get_key_value(autoTLSkey); } +int +PyGILState_Check(void) +{ + /* can't use PyThreadState_Get() since it will assert that it has the GIL */ + PyThreadState *tstate = (PyThreadState*)_Py_atomic_load_relaxed( + &_PyThreadState_Current); + return tstate && (tstate == PyGILState_GetThisThreadState()); +} + PyGILState_STATE PyGILState_Ensure(void) { diff --git a/Python/pystrtod.c b/Python/pystrtod.c index 4ab8f08..b8dd919 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -164,7 +164,7 @@ static double _PyOS_ascii_strtod(const char *nptr, char **endptr) { char *fail_pos; - double val = -1.0; + double val; struct lconv *locale_data; const char *decimal_point; size_t decimal_point_len; @@ -923,7 +923,7 @@ static char *uc_float_strings[] = { static char * format_float_short(double d, char format_code, - int mode, Py_ssize_t precision, + int mode, int precision, int always_add_sign, int add_dot_0_if_integer, int use_alt_formatting, char **float_strings, int *type) { @@ -1059,7 +1059,7 @@ format_float_short(double d, char format_code, /* if using an exponent, reset decimal point position to 1 and adjust exponent accordingly.*/ if (use_exp) { - exp = decpt - 1; + exp = (int)decpt - 1; decpt = 1; } /* ensure vdigits_start < decpt <= vdigits_end, or vdigits_start < diff --git a/Python/pythonrun.c b/Python/pythonrun.c index ee277b6..b963ce1 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -35,12 +35,30 @@ #define PATH_MAX MAXPATHLEN #endif +#ifdef Py_REF_DEBUG +static +void _print_total_refs(void) { + PyObject *xoptions, *key, *value; + xoptions = PySys_GetXOptions(); + if (xoptions == NULL) + return; + key = PyUnicode_FromString("showrefcount"); + if (key == NULL) + return; + value = PyDict_GetItem(xoptions, key); + Py_DECREF(key); + 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() fprintf(stderr, \ - "[%" PY_FORMAT_SIZE_T "d refs]\n", \ - _Py_GetRefTotal()) +#define PRINT_TOTAL_REFS() _print_total_refs() #endif #ifdef __cplusplus @@ -68,6 +86,7 @@ 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); @@ -93,6 +112,7 @@ 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; @@ -114,6 +134,45 @@ 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 @@ -156,7 +215,7 @@ get_codec_name(const char *encoding) name_utf8 = _PyUnicode_AsString(name); if (name_utf8 == NULL) goto error; - name_str = strdup(name_utf8); + name_str = _PyMem_RawStrdup(name_utf8); Py_DECREF(name); if (name_str == NULL) { PyErr_NoMemory(); @@ -309,7 +368,8 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) if (!PyByteArray_Init()) Py_FatalError("Py_Initialize: can't init bytearray"); - _PyFloat_Init(); + if (!_PyFloat_Init()) + Py_FatalError("Py_Initialize: can't init float"); interp->modules = PyDict_New(); if (interp->modules == NULL) @@ -318,6 +378,8 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) /* 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) @@ -526,10 +588,6 @@ Py_Finalize(void) while (PyGC_Collect() > 0) /* nothing */; #endif - /* We run this while most interpreter state is still alive, so that - debug information can be printed out */ - _PyGC_Fini(); - /* Destroy all modules */ PyImport_Cleanup(); @@ -592,11 +650,6 @@ Py_Finalize(void) _PyExc_Fini(); - /* Cleanup auto-thread-state */ -#ifdef WITH_THREAD - _PyGILState_Fini(); -#endif /* WITH_THREAD */ - /* Sundry finalizers */ PyMethod_Fini(); PyFrame_Fini(); @@ -610,17 +663,15 @@ Py_Finalize(void) PyFloat_Fini(); PyDict_Fini(); PySlice_Fini(); + _PyGC_Fini(); + _PyRandom_Fini(); /* Cleanup Unicode implementation */ _PyUnicode_Fini(); - /* Delete current thread. After this, many C API calls become crashy. */ - PyThreadState_Swap(NULL); - PyInterpreterState_Delete(interp); - /* reset file system default encoding */ if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) { - free((char*)Py_FileSystemDefaultEncoding); + PyMem_RawFree((char*)Py_FileSystemDefaultEncoding); Py_FileSystemDefaultEncoding = NULL; } @@ -632,6 +683,15 @@ Py_Finalize(void) 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 @@ -769,6 +829,9 @@ Py_EndInterpreter(PyThreadState *tstate) 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"); @@ -798,7 +861,7 @@ Py_GetProgramName(void) } static wchar_t *default_home = NULL; -static wchar_t env_home[PATH_MAX+1]; +static wchar_t env_home[MAXPATHLEN+1]; void Py_SetPythonHome(wchar_t *home) @@ -827,7 +890,7 @@ Py_GetPythonHome(void) static void initmain(PyInterpreterState *interp) { - PyObject *m, *d; + PyObject *m, *d, *loader; m = PyImport_AddModule("__main__"); if (m == NULL) Py_FatalError("can't create __main__ module"); @@ -848,7 +911,8 @@ initmain(PyInterpreterState *interp) * be set if __main__ gets further initialized later in the startup * process. */ - if (PyDict_GetItemString(d, "__loader__") == NULL) { + loader = PyDict_GetItemString(d, "__loader__"); + if (loader == NULL || loader == Py_None) { PyObject *loader = PyObject_GetAttrString(interp->importlib, "BuiltinImporter"); if (loader == NULL) { @@ -898,6 +962,7 @@ 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); @@ -1030,7 +1095,7 @@ initstdio(void) PyObject *std = NULL; int status = 0, fd; PyObject * encoding_attr; - char *encoding = NULL, *errors; + 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 */ @@ -1062,14 +1127,28 @@ initstdio(void) } Py_DECREF(wrapper); - encoding = Py_GETENV("PYTHONIOENCODING"); - errors = NULL; - if (encoding) { - encoding = strdup(encoding); - errors = strchr(encoding, ':'); - if (errors) { - *errors = '\0'; - errors++; + 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; + } } } @@ -1124,18 +1203,24 @@ initstdio(void) when import.c tries to write to stderr in verbose mode. */ encoding_attr = PyObject_GetAttrString(std, "encoding"); if (encoding_attr != NULL) { - const char * encoding; - encoding = _PyUnicode_AsString(encoding_attr); - if (encoding != NULL) { - PyObject *codec_info = _PyCodec_Lookup(encoding); + 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 */ - PySys_SetObject("__stderr__", std); - PySys_SetObject("stderr", std); + if (PySys_SetObject("__stderr__", std) < 0) { + Py_DECREF(std); + goto error; + } + if (PySys_SetObject("stderr", std) < 0) { + Py_DECREF(std); + goto error; + } Py_DECREF(std); #endif @@ -1144,8 +1229,16 @@ initstdio(void) status = -1; } - if (encoding) - free(encoding); + /* 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; @@ -1352,8 +1445,8 @@ maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit) return 0; } -int -static set_main_loader(PyObject *d, const char *filename, const char *loader_name) +static int +set_main_loader(PyObject *d, const char *filename, const char *loader_name) { PyInterpreterState *interp; PyThreadState *tstate; @@ -1420,7 +1513,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, /* Try to run a pyc file. First, re-open in binary */ if (closeit) fclose(fp); - if ((pyc_fp = fopen(filename, "rb")) == NULL) { + if ((pyc_fp = _Py_fopen(filename, "rb")) == NULL) { fprintf(stderr, "python: Can't reopen .pyc file\n"); goto done; } @@ -2027,8 +2120,8 @@ run_pyc_file(FILE *fp, const char *filename, PyObject *globals, } PyObject * -Py_CompileStringExFlags(const char *str, const char *filename, int start, - PyCompilerFlags *flags, int optimize) +Py_CompileStringObject(const char *str, PyObject *filename, int start, + PyCompilerFlags *flags, int optimize) { PyCodeObject *co; mod_ty mod; @@ -2036,7 +2129,7 @@ Py_CompileStringExFlags(const char *str, const char *filename, int start, if (arena == NULL) return NULL; - mod = PyParser_ASTFromString(str, filename, start, flags, arena); + mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena); if (mod == NULL) { PyArena_Free(arena); return NULL; @@ -2046,11 +2139,24 @@ Py_CompileStringExFlags(const char *str, const char *filename, int start, PyArena_Free(arena); return result; } - co = PyAST_CompileEx(mod, filename, flags, optimize, arena); + co = PyAST_CompileObject(mod, filename, flags, optimize, arena); PyArena_Free(arena); return (PyObject *)co; } +PyObject * +Py_CompileStringExFlags(const char *str, const char *filename_str, int start, + PyCompilerFlags *flags, int optimize) +{ + PyObject *filename, *co; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + co = Py_CompileStringObject(str, filename, start, flags, optimize); + Py_DECREF(filename); + return co; +} + /* For use in Py_LIMITED_API */ #undef Py_CompileString PyObject * @@ -2060,46 +2166,62 @@ PyCompileString(const char *str, const char *filename, int start) } struct symtable * -Py_SymtableString(const char *str, const char *filename, int start) +Py_SymtableStringObject(const char *str, PyObject *filename, int start) { struct symtable *st; mod_ty mod; PyCompilerFlags flags; - PyArena *arena = PyArena_New(); + PyArena *arena; + + arena = PyArena_New(); if (arena == NULL) return NULL; flags.cf_flags = 0; - mod = PyParser_ASTFromString(str, filename, start, &flags, arena); + mod = PyParser_ASTFromStringObject(str, filename, start, &flags, arena); if (mod == NULL) { PyArena_Free(arena); return NULL; } - st = PySymtable_Build(mod, filename, 0); + st = PySymtable_BuildObject(mod, filename, 0); PyArena_Free(arena); return st; } +struct symtable * +Py_SymtableString(const char *str, const char *filename_str, int start) +{ + PyObject *filename; + struct symtable *st; + + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + st = Py_SymtableStringObject(str, filename, start); + Py_DECREF(filename); + return st; +} + /* Preferred access to parser is through AST. */ mod_ty -PyParser_ASTFromString(const char *s, const char *filename, int start, - PyCompilerFlags *flags, PyArena *arena) +PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start, + PyCompilerFlags *flags, PyArena *arena) { mod_ty mod; PyCompilerFlags localflags; perrdetail err; int iflags = PARSER_FLAGS(flags); - node *n = PyParser_ParseStringFlagsFilenameEx(s, filename, - &_PyParser_Grammar, start, &err, - &iflags); + node *n = PyParser_ParseStringObject(s, filename, + &_PyParser_Grammar, start, &err, + &iflags); if (flags == NULL) { localflags.cf_flags = 0; flags = &localflags; } if (n) { flags->cf_flags |= iflags & PyCF_MASK; - mod = PyAST_FromNode(n, flags, filename, arena); + mod = PyAST_FromNodeObject(n, flags, filename, arena); PyNode_Free(n); } else { @@ -2111,26 +2233,40 @@ PyParser_ASTFromString(const char *s, const char *filename, int start, } mod_ty -PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc, - int start, char *ps1, - char *ps2, PyCompilerFlags *flags, int *errcode, - PyArena *arena) +PyParser_ASTFromString(const char *s, const char *filename_str, int start, + PyCompilerFlags *flags, PyArena *arena) +{ + PyObject *filename; + mod_ty mod; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + mod = PyParser_ASTFromStringObject(s, filename, start, flags, arena); + Py_DECREF(filename); + return mod; +} + +mod_ty +PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc, + int start, char *ps1, + char *ps2, PyCompilerFlags *flags, int *errcode, + PyArena *arena) { mod_ty mod; PyCompilerFlags localflags; perrdetail err; int iflags = PARSER_FLAGS(flags); - node *n = PyParser_ParseFileFlagsEx(fp, filename, enc, - &_PyParser_Grammar, - start, ps1, ps2, &err, &iflags); + node *n = PyParser_ParseFileObject(fp, filename, enc, + &_PyParser_Grammar, + start, ps1, ps2, &err, &iflags); if (flags == NULL) { localflags.cf_flags = 0; flags = &localflags; } if (n) { flags->cf_flags |= iflags & PyCF_MASK; - mod = PyAST_FromNode(n, flags, filename, arena); + mod = PyAST_FromNodeObject(n, flags, filename, arena); PyNode_Free(n); } else { @@ -2143,6 +2279,23 @@ PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc, return mod; } +mod_ty +PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc, + int start, char *ps1, + char *ps2, PyCompilerFlags *flags, int *errcode, + PyArena *arena) +{ + mod_ty mod; + PyObject *filename; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + mod = PyParser_ASTFromFileObject(fp, filename, enc, start, ps1, ps2, + flags, errcode, arena); + Py_DECREF(filename); + return mod; +} + /* Simplified interface to parsefile -- return node or set exception */ node * @@ -2469,6 +2622,9 @@ initsigs(void) PyOS_setsig(SIGXFSZ, SIG_IGN); #endif PyOS_InitInterrupts(); /* May imply initsignal() */ + if (PyErr_Occurred()) { + Py_FatalError("Py_Initialize: can't import signal"); + } } diff --git a/Python/random.c b/Python/random.c index 337be86..9c9370c 100644 --- a/Python/random.c +++ b/Python/random.c @@ -12,13 +12,6 @@ static int _Py_HashSecret_Initialized = 0; #endif #ifdef MS_WINDOWS -typedef BOOL (WINAPI *CRYPTACQUIRECONTEXTA)(HCRYPTPROV *phProv,\ - LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType,\ - DWORD dwFlags ); -typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV hProv, DWORD dwLen,\ - BYTE *pbBuffer ); - -static CRYPTGENRANDOM pCryptGenRandom = NULL; /* This handle is never explicitly released. Instead, the operating system will release it when the process terminates. */ static HCRYPTPROV hCryptProv = 0; @@ -26,29 +19,9 @@ static HCRYPTPROV hCryptProv = 0; static int win32_urandom_init(int raise) { - HINSTANCE hAdvAPI32 = NULL; - CRYPTACQUIRECONTEXTA pCryptAcquireContext = NULL; - - /* Obtain handle to the DLL containing CryptoAPI. This should not fail. */ - hAdvAPI32 = GetModuleHandle("advapi32.dll"); - if(hAdvAPI32 == NULL) - goto error; - - /* Obtain pointers to the CryptoAPI functions. This will fail on some early - versions of Win95. */ - pCryptAcquireContext = (CRYPTACQUIRECONTEXTA)GetProcAddress( - hAdvAPI32, "CryptAcquireContextA"); - if (pCryptAcquireContext == NULL) - goto error; - - pCryptGenRandom = (CRYPTGENRANDOM)GetProcAddress(hAdvAPI32, - "CryptGenRandom"); - if (pCryptGenRandom == NULL) - goto error; - /* Acquire context */ - if (! pCryptAcquireContext(&hCryptProv, NULL, NULL, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) + if (!CryptAcquireContext(&hCryptProv, NULL, NULL, + PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) goto error; return 0; @@ -77,7 +50,7 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise) while (size > 0) { chunk = size > INT_MAX ? INT_MAX : size; - if (!pCryptGenRandom(hCryptProv, chunk, buffer)) + if (!CryptGenRandom(hCryptProv, chunk, buffer)) { /* CryptGenRandom() failed */ if (raise) @@ -117,6 +90,7 @@ vms_urandom(unsigned char *buffer, Py_ssize_t size, int raise) #if !defined(MS_WINDOWS) && !defined(__VMS) +static int urandom_fd = -1; /* Read size bytes from /dev/urandom into buffer. Call Py_FatalError() on error. */ @@ -128,7 +102,7 @@ dev_urandom_noraise(char *buffer, Py_ssize_t size) assert (0 < size); - fd = open("/dev/urandom", O_RDONLY); + fd = _Py_open("/dev/urandom", O_RDONLY); if (fd < 0) Py_FatalError("Failed to open /dev/urandom"); @@ -160,18 +134,30 @@ dev_urandom_python(char *buffer, Py_ssize_t size) if (size <= 0) return 0; - Py_BEGIN_ALLOW_THREADS - fd = open("/dev/urandom", O_RDONLY); - Py_END_ALLOW_THREADS - if (fd < 0) - { - if (errno == ENOENT || errno == ENXIO || - errno == ENODEV || errno == EACCES) - PyErr_SetString(PyExc_NotImplementedError, - "/dev/urandom (or equivalent) not found"); + if (urandom_fd >= 0) + fd = urandom_fd; + else { + Py_BEGIN_ALLOW_THREADS + fd = _Py_open("/dev/urandom", O_RDONLY); + Py_END_ALLOW_THREADS + 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); + return -1; + } + if (urandom_fd >= 0) { + /* urandom_fd was initialized by another thread while we were + not holding the GIL, keep it. */ + close(fd); + fd = urandom_fd; + } else - PyErr_SetFromErrno(PyExc_OSError); - return -1; + urandom_fd = fd; } Py_BEGIN_ALLOW_THREADS @@ -195,12 +181,20 @@ dev_urandom_python(char *buffer, Py_ssize_t size) PyErr_Format(PyExc_RuntimeError, "Failed to read %zi bytes from /dev/urandom", size); - close(fd); return -1; } - close(fd); return 0; } + +static void +dev_urandom_close(void) +{ + if (urandom_fd >= 0) { + close(urandom_fd); + urandom_fd = -1; + } +} + #endif /* !defined(MS_WINDOWS) && !defined(__VMS) */ /* Fill buffer with pseudo-random bytes generated by a linear congruent @@ -299,3 +293,11 @@ _PyRandom_Init(void) #endif } } + +void +_PyRandom_Fini(void) +{ +#if !defined(MS_WINDOWS) && !defined(__VMS) + dev_urandom_close(); +#endif +} diff --git a/Python/strdup.c b/Python/strdup.c index 20187e0..769d3db 100644 --- a/Python/strdup.c +++ b/Python/strdup.c @@ -6,7 +6,7 @@ char * strdup(const char *str) { if (str != NULL) { - register char *copy = malloc(strlen(str) + 1); + char *copy = malloc(strlen(str) + 1); if (copy != NULL) return strcpy(copy, str); } diff --git a/Python/symtable.c b/Python/symtable.c index 1e13b790..da164aa 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -37,24 +37,14 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, ste->ste_table = st; ste->ste_id = k; /* ste owns reference to k */ - ste->ste_name = name; Py_INCREF(name); + ste->ste_name = name; ste->ste_symbols = NULL; ste->ste_varnames = NULL; ste->ste_children = NULL; - ste->ste_symbols = PyDict_New(); - if (ste->ste_symbols == NULL) - goto fail; - - ste->ste_varnames = PyList_New(0); - if (ste->ste_varnames == NULL) - goto fail; - - ste->ste_children = PyList_New(0); - if (ste->ste_children == NULL) - goto fail; + ste->ste_directives = NULL; ste->ste_type = block; ste->ste_unoptimized = 0; @@ -75,6 +65,15 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, ste->ste_child_free = 0; ste->ste_generator = 0; ste->ste_returns_value = 0; + ste->ste_needs_class_closure = 0; + + ste->ste_symbols = PyDict_New(); + ste->ste_varnames = PyList_New(0); + ste->ste_children = PyList_New(0); + if (ste->ste_symbols == NULL + || ste->ste_varnames == NULL + || ste->ste_children == NULL) + goto fail; if (PyDict_SetItem(st->st_blocks, ste->ste_id, (PyObject *)ste) < 0) goto fail; @@ -102,6 +101,7 @@ ste_dealloc(PySTEntryObject *ste) Py_XDECREF(ste->ste_symbols); Py_XDECREF(ste->ste_varnames); Py_XDECREF(ste->ste_children); + Py_XDECREF(ste->ste_directives); PyObject_Del(ste); } @@ -188,7 +188,7 @@ static int symtable_visit_withitem(struct symtable *st, withitem_ty item); static identifier top = NULL, lambda = NULL, genexpr = NULL, listcomp = NULL, setcomp = NULL, dictcomp = NULL, - __class__ = NULL, __locals__ = NULL; + __class__ = NULL; #define GET_IDENTIFIER(VAR) \ ((VAR) ? (VAR) : ((VAR) = PyUnicode_InternFromString(# VAR))) @@ -233,7 +233,7 @@ symtable_new(void) #define COMPILER_STACK_FRAME_SCALE 3 struct symtable * -PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future) +PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future) { struct symtable *st = symtable_new(); asdl_seq *seq; @@ -242,7 +242,12 @@ PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future) int recursion_limit = Py_GetRecursionLimit(); if (st == NULL) - return st; + return NULL; + if (filename == NULL) { + PySymtable_Free(st); + return NULL; + } + Py_INCREF(filename); st->st_filename = filename; st->st_future = future; @@ -306,9 +311,23 @@ PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future) return NULL; } +struct symtable * +PySymtable_Build(mod_ty mod, const char *filename_str, PyFutureFeatures *future) +{ + PyObject *filename; + struct symtable *st; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + st = PySymtable_BuildObject(mod, filename, future); + Py_DECREF(filename); + return st; +} + void PySymtable_Free(struct symtable *st) { + Py_XDECREF(st->st_filename); Py_XDECREF(st->st_blocks); Py_XDECREF(st->st_stack); PyMem_Free((void *)st); @@ -346,6 +365,24 @@ PyST_GetScope(PySTEntryObject *ste, PyObject *name) return (PyLong_AS_LONG(v) >> SCOPE_OFFSET) & SCOPE_MASK; } +static int +error_at_directive(PySTEntryObject *ste, PyObject *name) +{ + Py_ssize_t i; + PyObject *data; + assert(ste->ste_directives); + for (i = 0; ; i++) { + data = PyList_GET_ITEM(ste->ste_directives, i); + assert(PyTuple_CheckExact(data)); + if (PyTuple_GET_ITEM(data, 0) == name) + break; + } + PyErr_SyntaxLocationObject(ste->ste_table->st_filename, + PyLong_AsLong(PyTuple_GET_ITEM(data, 1)), + PyLong_AsLong(PyTuple_GET_ITEM(data, 2))); + return 0; +} + /* Analyze raw symbol information to determine scope of each name. @@ -420,16 +457,13 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, PyErr_Format(PyExc_SyntaxError, "name '%U' is parameter and global", name); - PyErr_SyntaxLocationEx(ste->ste_table->st_filename, - ste->ste_lineno, ste->ste_col_offset); - - return 0; + return error_at_directive(ste, name); } if (flags & DEF_NONLOCAL) { PyErr_Format(PyExc_SyntaxError, "name '%U' is nonlocal and global", name); - return 0; + return error_at_directive(ste, name); } SET_SCOPE(scopes, name, GLOBAL_EXPLICIT); if (PySet_Add(global, name) < 0) @@ -443,19 +477,19 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, PyErr_Format(PyExc_SyntaxError, "name '%U' is parameter and nonlocal", name); - return 0; + return error_at_directive(ste, name); } if (!bound) { PyErr_Format(PyExc_SyntaxError, "nonlocal declaration not allowed at module level"); - return 0; + return error_at_directive(ste, name); } if (!PySet_Contains(bound, name)) { PyErr_Format(PyExc_SyntaxError, "no binding for nonlocal '%U' found", name); - return 0; + return error_at_directive(ste, name); } SET_SCOPE(scopes, name, FREE); ste->ste_free = 1; @@ -500,13 +534,10 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, Note that the current block's free variables are included in free. That's safe because no name can be free and local in the same scope. - - The 'restricted' argument may be set to a string to restrict the analysis - to the one variable whose name equals that string (e.g. "__class__"). */ static int -analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) +analyze_cells(PyObject *scopes, PyObject *free) { PyObject *name, *v, *v_cell; int success = 0; @@ -523,9 +554,6 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) continue; if (!PySet_Contains(free, name)) continue; - if (restricted != NULL && - PyUnicode_CompareWithASCIIString(name, restricted)) - continue; /* Replace LOCAL with CELL for this name, and remove from free. It is safe to replace the value of name in the dict, because it will not cause a resize. @@ -541,6 +569,20 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) return success; } +static int +drop_class_free(PySTEntryObject *ste, PyObject *free) +{ + int res; + if (!GET_IDENTIFIER(__class__)) + return 0; + res = PySet_Discard(free, __class__); + if (res < 0) + return 0; + if (res) + ste->ste_needs_class_closure = 1; + return 1; +} + /* Check for illegal statements in unoptimized namespaces */ static int check_unoptimized(const PySTEntryObject* ste) { @@ -564,8 +606,9 @@ check_unoptimized(const PySTEntryObject* ste) { break; } - PyErr_SyntaxLocationEx(ste->ste_table->st_filename, ste->ste_opt_lineno, - ste->ste_opt_col_offset); + PyErr_SyntaxLocationObject(ste->ste_table->st_filename, + ste->ste_opt_lineno, + ste->ste_opt_col_offset); return 0; } @@ -771,7 +814,6 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free, /* Special-case __class__ */ if (!GET_IDENTIFIER(__class__)) goto error; - assert(PySet_Contains(local, __class__) == 1); if (PySet_Add(newbound, __class__) < 0) goto error; } @@ -804,11 +846,9 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free, Py_DECREF(temp); /* Check if any local variables must be converted to cell variables */ - if (ste->ste_type == FunctionBlock && !analyze_cells(scopes, newfree, - NULL)) + if (ste->ste_type == FunctionBlock && !analyze_cells(scopes, newfree)) goto error; - else if (ste->ste_type == ClassBlock && !analyze_cells(scopes, newfree, - "__class__")) + else if (ste->ste_type == ClassBlock && !drop_class_free(ste, newfree)) goto error; /* Records the results of the analysis in the symbol table entry */ if (!update_symbols(ste->ste_symbols, scopes, bound, newfree, @@ -899,15 +939,20 @@ symtable_analyze(struct symtable *st) static int symtable_warn(struct symtable *st, char *msg, int lineno) { - if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, st->st_filename, - lineno, NULL, NULL) < 0) { + PyObject *message = PyUnicode_FromString(msg); + if (message == NULL) + return 0; + if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, message, st->st_filename, + lineno, NULL, NULL) < 0) { + Py_DECREF(message); if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) { PyErr_SetString(PyExc_SyntaxError, msg); - PyErr_SyntaxLocationEx(st->st_filename, st->st_cur->ste_lineno, - st->st_cur->ste_col_offset); + PyErr_SyntaxLocationObject(st->st_filename, st->st_cur->ste_lineno, + st->st_cur->ste_col_offset); } return 0; } + Py_DECREF(message); return 1; } @@ -990,9 +1035,9 @@ symtable_add_def(struct symtable *st, PyObject *name, int flag) if ((flag & DEF_PARAM) && (val & DEF_PARAM)) { /* Is it better to use 'mangled' or 'name' here? */ PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT, name); - PyErr_SyntaxLocationEx(st->st_filename, - st->st_cur->ste_lineno, - st->st_cur->ste_col_offset); + PyErr_SyntaxLocationObject(st->st_filename, + st->st_cur->ste_lineno, + st->st_cur->ste_col_offset); goto error; } val |= flag; @@ -1102,6 +1147,25 @@ symtable_new_tmpname(struct symtable *st) static int +symtable_record_directive(struct symtable *st, identifier name, stmt_ty s) +{ + PyObject *data; + int res; + if (!st->st_cur->ste_directives) { + st->st_cur->ste_directives = PyList_New(0); + if (!st->st_cur->ste_directives) + return 0; + } + data = Py_BuildValue("(Oii)", name, s->lineno, s->col_offset); + if (!data) + return 0; + res = PyList_Append(st->st_cur->ste_directives, data); + Py_DECREF(data); + return res == 0; +} + + +static int symtable_visit_stmt(struct symtable *st, stmt_ty s) { if (++st->recursion_depth > st->recursion_limit) { @@ -1146,13 +1210,6 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) if (!symtable_enter_block(st, s->v.ClassDef.name, ClassBlock, (void *)s, s->lineno, s->col_offset)) VISIT_QUIT(st, 0); - if (!GET_IDENTIFIER(__class__) || - !symtable_add_def(st, __class__, DEF_LOCAL) || - !GET_IDENTIFIER(__locals__) || - !symtable_add_def(st, __locals__, DEF_PARAM)) { - symtable_exit_block(st, s); - VISIT_QUIT(st, 0); - } tmp = st->st_private; st->st_private = s->v.ClassDef.name; VISIT_SEQ(st, stmt, s->v.ClassDef.body); @@ -1240,14 +1297,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) asdl_seq *seq = s->v.Global.names; for (i = 0; i < asdl_seq_LEN(seq); i++) { identifier name = (identifier)asdl_seq_GET(seq, i); - long cur; - if (st->st_cur->ste_type == ClassBlock && - !PyUnicode_CompareWithASCIIString(name, "__class__")) { - PyErr_SetString(PyExc_SyntaxError, "cannot make __class__ global"); - PyErr_SyntaxLocationEx(st->st_filename, s->lineno, s->col_offset); - return 0; - } - cur = symtable_lookup(st, name); + long cur = symtable_lookup(st, name); if (cur < 0) VISIT_QUIT(st, 0); if (cur & (DEF_LOCAL | USE)) { @@ -1268,6 +1318,8 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) } if (!symtable_add_def(st, name, DEF_GLOBAL)) VISIT_QUIT(st, 0); + if (!symtable_record_directive(st, name, s)) + VISIT_QUIT(st, 0); } break; } @@ -1297,6 +1349,8 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) } if (!symtable_add_def(st, name, DEF_NONLOCAL)) VISIT_QUIT(st, 0); + if (!symtable_record_directive(st, name, s)) + VISIT_QUIT(st, 0); } break; } @@ -1407,6 +1461,7 @@ symtable_visit_expr(struct symtable *st, expr_ty e) case Str_kind: case Bytes_kind: case Ellipsis_kind: + case NameConstant_kind: /* Nothing to do here. */ break; /* The following exprs can be assignment targets. */ @@ -1499,10 +1554,10 @@ symtable_visit_annotations(struct symtable *st, stmt_ty s) if (a->args && !symtable_visit_argannotations(st, a->args)) return 0; - if (a->varargannotation) - VISIT(st, expr, a->varargannotation); - if (a->kwargannotation) - VISIT(st, expr, a->kwargannotation); + if (a->vararg && a->vararg->annotation) + VISIT(st, expr, a->vararg->annotation); + if (a->kwarg && a->kwarg->annotation) + VISIT(st, expr, a->kwarg->annotation); if (a->kwonlyargs && !symtable_visit_argannotations(st, a->kwonlyargs)) return 0; if (s->v.FunctionDef.returns) @@ -1521,12 +1576,12 @@ symtable_visit_arguments(struct symtable *st, arguments_ty a) if (a->kwonlyargs && !symtable_visit_params(st, a->kwonlyargs)) return 0; if (a->vararg) { - if (!symtable_add_def(st, a->vararg, DEF_PARAM)) + if (!symtable_add_def(st, a->vararg->arg, DEF_PARAM)) return 0; st->st_cur->ste_varargs = 1; } if (a->kwarg) { - if (!symtable_add_def(st, a->kwarg, DEF_PARAM)) + if (!symtable_add_def(st, a->kwarg->arg, DEF_PARAM)) return 0; st->st_cur->ste_varkeywords = 1; } @@ -1587,7 +1642,7 @@ symtable_visit_alias(struct symtable *st, alias_ty a) int lineno = st->st_cur->ste_lineno; int col_offset = st->st_cur->ste_col_offset; PyErr_SetString(PyExc_SyntaxError, IMPORT_STAR_WARNING); - PyErr_SyntaxLocationEx(st->st_filename, lineno, col_offset); + PyErr_SyntaxLocationObject(st->st_filename, lineno, col_offset); Py_DECREF(store_name); return 0; } diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 1a41d2f..2d7e01b 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -774,7 +774,7 @@ Set the flags used by the interpreter for dlopen calls, such as when the\n\ interpreter loads extension modules. Among other things, this will enable\n\ a lazy resolving of symbols when importing a module, if called as\n\ sys.setdlopenflags(0). To share symbols across extension modules, call as\n\ -sys.setdlopenflags(ctypes.RTLD_GLOBAL). Symbolic names for the flag modules\n\ +sys.setdlopenflags(os.RTLD_GLOBAL). Symbolic names for the flag modules\n\ can be found in the os module (RTLD_xxx constants, e.g. os.RTLD_LAZY)."); static PyObject * @@ -790,7 +790,7 @@ PyDoc_STRVAR(getdlopenflags_doc, "getdlopenflags() -> int\n\ \n\ Return the current value of the flags that are used for dlopen calls.\n\ -The flag constants are defined in the ctypes and DLFCN modules."); +The flag constants are defined in the os module."); #endif /* HAVE_DLOPEN */ @@ -894,6 +894,19 @@ one higher than you might expect, because it includes the (temporary)\n\ reference as an argument to getrefcount()." ); +static PyObject * +sys_getallocatedblocks(PyObject *self) +{ + return PyLong_FromSsize_t(_Py_GetAllocatedBlocks()); +} + +PyDoc_STRVAR(getallocatedblocks_doc, +"getallocatedblocks() -> integer\n\ +\n\ +Return the number of memory blocks currently allocated, regardless of their\n\ +size." +); + #ifdef COUNT_ALLOCS static PyObject * sys_getcounts(PyObject *self) @@ -1062,6 +1075,8 @@ static PyMethodDef sys_methods[] = { {"getdlopenflags", (PyCFunction)sys_getdlopenflags, METH_NOARGS, getdlopenflags_doc}, #endif + {"getallocatedblocks", (PyCFunction)sys_getallocatedblocks, METH_NOARGS, + getallocatedblocks_doc}, #ifdef COUNT_ALLOCS {"getcounts", (PyCFunction)sys_getcounts, METH_NOARGS}, #endif @@ -1349,14 +1364,12 @@ static PyStructSequence_Field flags_fields[] = { {"no_site", "-S"}, {"ignore_environment", "-E"}, {"verbose", "-v"}, -#ifdef RISCOS - {"riscos_wimp", "???"}, -#endif /* {"unbuffered", "-u"}, */ /* {"skip_first", "-x"}, */ {"bytes_warning", "-b"}, {"quiet", "-q"}, {"hash_randomization", "-R"}, + {"isolated", "-I"}, {0} }; @@ -1364,11 +1377,7 @@ static PyStructSequence_Desc flags_desc = { "sys.flags", /* name */ flags__doc__, /* doc */ flags_fields, /* fields */ -#ifdef RISCOS 13 -#else - 12 -#endif }; static PyObject* @@ -1393,14 +1402,12 @@ make_flags(void) SetFlag(Py_NoSiteFlag); SetFlag(Py_IgnoreEnvironmentFlag); SetFlag(Py_VerboseFlag); -#ifdef RISCOS - SetFlag(Py_RISCOSWimpFlag); -#endif /* SetFlag(saw_unbuffered_flag); */ /* SetFlag(skipfirstline); */ SetFlag(Py_BytesWarningFlag); SetFlag(Py_QuietFlag); SetFlag(Py_HashRandomizationFlag); + SetFlag(Py_IsolatedFlag); #undef SetFlag if (PyErr_Occurred()) { @@ -1560,18 +1567,24 @@ static struct PyModuleDef sysmodule = { PyObject * _PySys_Init(void) { - PyObject *m, *v, *sysdict, *version_info; - char *s; + PyObject *m, *sysdict, *version_info; m = PyModule_Create(&sysmodule); if (m == NULL) return NULL; sysdict = PyModule_GetDict(m); -#define SET_SYS_FROM_STRING(key, value) \ - v = value; \ - if (v != NULL) \ - PyDict_SetItemString(sysdict, key, v); \ - Py_XDECREF(v) +#define SET_SYS_FROM_STRING(key, value) \ + do { \ + int res; \ + PyObject *v = (value); \ + if (v == NULL) \ + return NULL; \ + res = PyDict_SetItemString(sysdict, key, v); \ + if (res < 0) { \ + Py_DECREF(v); \ + return NULL; \ + } \ + } while (0) /* Check that stdin is not a directory Using shell redirection, you can redirect stdin to a directory, @@ -1593,10 +1606,10 @@ _PySys_Init(void) /* stdin/stdout/stderr are now set by pythonrun.c */ - PyDict_SetItemString(sysdict, "__displayhook__", - PyDict_GetItemString(sysdict, "displayhook")); - PyDict_SetItemString(sysdict, "__excepthook__", - PyDict_GetItemString(sysdict, "excepthook")); + SET_SYS_FROM_STRING("__displayhook__", + PyDict_GetItemString(sysdict, "displayhook")); + SET_SYS_FROM_STRING("__excepthook__", + PyDict_GetItemString(sysdict, "excepthook")); SET_SYS_FROM_STRING("version", PyUnicode_FromString(Py_GetVersion())); SET_SYS_FROM_STRING("hexversion", @@ -1630,28 +1643,24 @@ _PySys_Init(void) SET_SYS_FROM_STRING("int_info", PyLong_GetInfo()); /* initialize hash_info */ - if (Hash_InfoType.tp_name == 0) - PyStructSequence_InitType(&Hash_InfoType, &hash_info_desc); + if (Hash_InfoType.tp_name == NULL) { + if (PyStructSequence_InitType2(&Hash_InfoType, &hash_info_desc) < 0) + return NULL; + } SET_SYS_FROM_STRING("hash_info", get_hash_info()); SET_SYS_FROM_STRING("maxunicode", PyLong_FromLong(0x10FFFF)); SET_SYS_FROM_STRING("builtin_module_names", list_builtin_module_names()); - { - /* Assumes that longs are at least 2 bytes long. - Should be safe! */ - unsigned long number = 1; - char *value; - - s = (char *) &number; - if (s[0] == 0) - value = "big"; - else - value = "little"; - SET_SYS_FROM_STRING("byteorder", - PyUnicode_FromString(value)); - } +#if PY_BIG_ENDIAN + SET_SYS_FROM_STRING("byteorder", + PyUnicode_FromString("big")); +#else + SET_SYS_FROM_STRING("byteorder", + PyUnicode_FromString("little")); +#endif + #ifdef MS_COREDLL SET_SYS_FROM_STRING("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); @@ -1664,22 +1673,22 @@ _PySys_Init(void) #endif if (warnoptions == NULL) { warnoptions = PyList_New(0); + if (warnoptions == NULL) + return NULL; } else { Py_INCREF(warnoptions); } - if (warnoptions != NULL) { - PyDict_SetItemString(sysdict, "warnoptions", warnoptions); - } + SET_SYS_FROM_STRING("warnoptions", warnoptions); - v = get_xoptions(); - if (v != NULL) { - PyDict_SetItemString(sysdict, "_xoptions", v); - } + SET_SYS_FROM_STRING("_xoptions", get_xoptions()); /* version_info */ - if (VersionInfoType.tp_name == 0) - PyStructSequence_InitType(&VersionInfoType, &version_info_desc); + if (VersionInfoType.tp_name == NULL) { + if (PyStructSequence_InitType2(&VersionInfoType, + &version_info_desc) < 0) + return NULL; + } version_info = make_version_info(); SET_SYS_FROM_STRING("version_info", version_info); /* prevent user from creating new instances */ @@ -1690,8 +1699,10 @@ _PySys_Init(void) SET_SYS_FROM_STRING("implementation", make_impl_info(version_info)); /* flags */ - if (FlagsType.tp_name == 0) - PyStructSequence_InitType(&FlagsType, &flags_desc); + if (FlagsType.tp_name == 0) { + if (PyStructSequence_InitType2(&FlagsType, &flags_desc) < 0) + return NULL; + } SET_SYS_FROM_STRING("flags", make_flags()); /* prevent user from creating new instances */ FlagsType.tp_init = NULL; @@ -1701,7 +1712,9 @@ _PySys_Init(void) #if defined(MS_WINDOWS) /* getwindowsversion */ if (WindowsVersionType.tp_name == 0) - PyStructSequence_InitType(&WindowsVersionType, &windows_version_desc); + if (PyStructSequence_InitType2(&WindowsVersionType, + &windows_version_desc) < 0) + return NULL; /* prevent user from creating new instances */ WindowsVersionType.tp_init = NULL; WindowsVersionType.tp_new = NULL; @@ -1933,7 +1946,7 @@ PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath) void PySys_SetArgv(int argc, wchar_t **argv) { - PySys_SetArgvEx(argc, argv, 1); + PySys_SetArgvEx(argc, argv, Py_IsolatedFlag == 0); } /* Reimplementation of PyFile_WriteString() no calling indirectly diff --git a/Python/thread.c b/Python/thread.c index e55d342..8540942 100644 --- a/Python/thread.c +++ b/Python/thread.c @@ -91,10 +91,6 @@ static size_t _pythread_stacksize = 0; #include "thread_nt.h" #endif -#ifdef OS2_THREADS -#define PYTHREAD_NAME "os2" -#include "thread_os2.h" -#endif /* #ifdef FOOBAR_THREADS @@ -235,7 +231,7 @@ find_key(int key, void *value) assert(p == NULL); goto Done; } - p = (struct key *)malloc(sizeof(struct key)); + p = (struct key *)PyMem_RawMalloc(sizeof(struct key)); if (p != NULL) { p->id = id; p->key = key; @@ -274,7 +270,7 @@ PyThread_delete_key(int key) while ((p = *q) != NULL) { if (p->key == key) { *q = p->next; - free((void *)p); + PyMem_RawFree((void *)p); /* NB This does *not* free p->value! */ } else @@ -328,7 +324,7 @@ PyThread_delete_key_value(int key) while ((p = *q) != NULL) { if (p->key == key && p->id == id) { *q = p->next; - free((void *)p); + PyMem_RawFree((void *)p); /* NB This does *not* free p->value! */ break; } @@ -361,7 +357,7 @@ PyThread_ReInitTLS(void) while ((p = *q) != NULL) { if (p->id != id) { *q = p->next; - free((void *)p); + PyMem_RawFree((void *)p); /* NB This does *not* free p->value! */ } else @@ -403,8 +399,10 @@ PyThread_GetInfo(void) int len; #endif - if (ThreadInfoType.tp_name == 0) - PyStructSequence_InitType(&ThreadInfoType, &threadinfo_desc); + if (ThreadInfoType.tp_name == 0) { + if (PyStructSequence_InitType2(&ThreadInfoType, &threadinfo_desc) < 0) + return NULL; + } threadinfo = PyStructSequence_New(&ThreadInfoType); if (threadinfo == NULL) diff --git a/Python/thread_nt.h b/Python/thread_nt.h index 938bf1e..ab5a081 100644 --- a/Python/thread_nt.h +++ b/Python/thread_nt.h @@ -34,7 +34,7 @@ typedef NRMUTEX *PNRMUTEX; PNRMUTEX AllocNonRecursiveMutex() { - PNRMUTEX m = (PNRMUTEX)malloc(sizeof(NRMUTEX)); + PNRMUTEX m = (PNRMUTEX)PyMem_RawMalloc(sizeof(NRMUTEX)); if (!m) return NULL; if (PyCOND_INIT(&m->cv)) @@ -46,7 +46,7 @@ AllocNonRecursiveMutex() m->locked = 0; return m; fail: - free(m); + PyMem_RawFree(m); return NULL; } @@ -56,7 +56,7 @@ FreeNonRecursiveMutex(PNRMUTEX mutex) if (mutex) { PyCOND_FINI(&mutex->cv); PyMUTEX_FINI(&mutex->cs); - free(mutex); + PyMem_RawFree(mutex); } } @@ -107,7 +107,7 @@ LeaveNonRecursiveMutex(PNRMUTEX mutex) result = PyCOND_SIGNAL(&mutex->cv); result &= PyMUTEX_UNLOCK(&mutex->cs); return result; -} +} #else /* if ! _PY_USE_CV_LOCKS */ @@ -130,7 +130,7 @@ FreeNonRecursiveMutex(PNRMUTEX mutex) DWORD EnterNonRecursiveMutex(PNRMUTEX mutex, DWORD milliseconds) { - return WaitForSingleObject(mutex, milliseconds); + return WaitForSingleObjectEx(mutex, milliseconds, FALSE); } BOOL diff --git a/Python/thread_os2.h b/Python/thread_os2.h deleted file mode 100644 index 1b264b5..0000000 --- a/Python/thread_os2.h +++ /dev/null @@ -1,267 +0,0 @@ -/* This code implemented by cvale@netcom.com */ - -#define INCL_DOSPROCESS -#define INCL_DOSSEMAPHORES -#include "os2.h" -#include "limits.h" - -#include "process.h" - -#if defined(PYCC_GCC) -#include <sys/builtin.h> -#include <sys/fmutex.h> -#else -long PyThread_get_thread_ident(void); -#endif - -/* default thread stack size of 64kB */ -#if !defined(THREAD_STACK_SIZE) -#define THREAD_STACK_SIZE 0x10000 -#endif - -#define OS2_STACKSIZE(x) (x ? x : THREAD_STACK_SIZE) - -/* - * Initialization of the C package, should not be needed. - */ -static void -PyThread__init_thread(void) -{ -} - -/* - * Thread support. - */ -long -PyThread_start_new_thread(void (*func)(void *), void *arg) -{ - int thread_id; - - thread_id = _beginthread(func, - NULL, - OS2_STACKSIZE(_pythread_stacksize), - arg); - - if (thread_id == -1) { - dprintf(("_beginthread failed. return %ld\n", errno)); - } - - return thread_id; -} - -long -PyThread_get_thread_ident(void) -{ -#if !defined(PYCC_GCC) - PPIB pib; - PTIB tib; -#endif - - if (!initialized) - PyThread_init_thread(); - -#if defined(PYCC_GCC) - return _gettid(); -#else - DosGetInfoBlocks(&tib, &pib); - return tib->tib_ptib2->tib2_ultid; -#endif -} - -void -PyThread_exit_thread(void) -{ - dprintf(("%ld: PyThread_exit_thread called\n", - PyThread_get_thread_ident())); - if (!initialized) - exit(0); - _endthread(); -} - -/* - * Lock support. This is implemented with an event semaphore and critical - * sections to make it behave more like a posix mutex than its OS/2 - * counterparts. - */ - -typedef struct os2_lock_t { - int is_set; - HEV changed; -} *type_os2_lock; - -PyThread_type_lock -PyThread_allocate_lock(void) -{ -#if defined(PYCC_GCC) - _fmutex *sem = malloc(sizeof(_fmutex)); - if (!initialized) - PyThread_init_thread(); - dprintf(("%ld: PyThread_allocate_lock() -> %lx\n", - PyThread_get_thread_ident(), - (long)sem)); - if (_fmutex_create(sem, 0)) { - free(sem); - sem = NULL; - } - return (PyThread_type_lock)sem; -#else - APIRET rc; - type_os2_lock lock = (type_os2_lock)malloc(sizeof(struct os2_lock_t)); - - dprintf(("PyThread_allocate_lock called\n")); - if (!initialized) - PyThread_init_thread(); - - lock->is_set = 0; - - DosCreateEventSem(NULL, &lock->changed, 0, 0); - - dprintf(("%ld: PyThread_allocate_lock() -> %p\n", - PyThread_get_thread_ident(), - lock->changed)); - - return (PyThread_type_lock)lock; -#endif -} - -void -PyThread_free_lock(PyThread_type_lock aLock) -{ -#if !defined(PYCC_GCC) - type_os2_lock lock = (type_os2_lock)aLock; -#endif - - dprintf(("%ld: PyThread_free_lock(%p) called\n", - PyThread_get_thread_ident(),aLock)); - -#if defined(PYCC_GCC) - if (aLock) { - _fmutex_close((_fmutex *)aLock); - free((_fmutex *)aLock); - } -#else - DosCloseEventSem(lock->changed); - free(aLock); -#endif -} - -/* - * Return 1 on success if the lock was acquired - * - * and 0 if the lock was not acquired. - */ -int -PyThread_acquire_lock(PyThread_type_lock aLock, int waitflag) -{ -#if !defined(PYCC_GCC) - int done = 0; - ULONG count; - PID pid = 0; - TID tid = 0; - type_os2_lock lock = (type_os2_lock)aLock; -#endif - - dprintf(("%ld: PyThread_acquire_lock(%p, %d) called\n", - PyThread_get_thread_ident(), - aLock, - waitflag)); - -#if defined(PYCC_GCC) - /* always successful if the lock doesn't exist */ - if (aLock && - _fmutex_request((_fmutex *)aLock, waitflag ? 0 : _FMR_NOWAIT)) - return 0; -#else - while (!done) { - /* if the lock is currently set, we have to wait for - * the state to change - */ - if (lock->is_set) { - if (!waitflag) - return 0; - DosWaitEventSem(lock->changed, SEM_INDEFINITE_WAIT); - } - - /* enter a critical section and try to get the semaphore. If - * it is still locked, we will try again. - */ - if (DosEnterCritSec()) - return 0; - - if (!lock->is_set) { - lock->is_set = 1; - DosResetEventSem(lock->changed, &count); - done = 1; - } - - DosExitCritSec(); - } -#endif - - return 1; -} - -void -PyThread_release_lock(PyThread_type_lock aLock) -{ -#if !defined(PYCC_GCC) - type_os2_lock lock = (type_os2_lock)aLock; -#endif - - dprintf(("%ld: PyThread_release_lock(%p) called\n", - PyThread_get_thread_ident(), - aLock)); - -#if defined(PYCC_GCC) - if (aLock) - _fmutex_release((_fmutex *)aLock); -#else - if (!lock->is_set) { - dprintf(("%ld: Could not PyThread_release_lock(%p) error: %l\n", - PyThread_get_thread_ident(), - aLock, - GetLastError())); - return; - } - - if (DosEnterCritSec()) { - dprintf(("%ld: Could not PyThread_release_lock(%p) error: %l\n", - PyThread_get_thread_ident(), - aLock, - GetLastError())); - return; - } - - lock->is_set = 0; - DosPostEventSem(lock->changed); - - DosExitCritSec(); -#endif -} - -/* minimum/maximum thread stack sizes supported */ -#define THREAD_MIN_STACKSIZE 0x8000 /* 32kB */ -#define THREAD_MAX_STACKSIZE 0x2000000 /* 32MB */ - -/* set the thread stack size. - * Return 0 if size is valid, -1 otherwise. - */ -static int -_pythread_os2_set_stacksize(size_t size) -{ - /* set to default */ - if (size == 0) { - _pythread_stacksize = 0; - return 0; - } - - /* valid range? */ - if (size >= THREAD_MIN_STACKSIZE && size < THREAD_MAX_STACKSIZE) { - _pythread_stacksize = size; - return 0; - } - - return -1; -} - -#define THREAD_SET_STACKSIZE(x) _pythread_os2_set_stacksize(x) diff --git a/Python/thread_pth.h b/Python/thread_pth.h deleted file mode 100644 index 5704266..0000000 --- a/Python/thread_pth.h +++ /dev/null @@ -1,177 +0,0 @@ - -/* GNU pth threads interface - http://www.gnu.org/software/pth - 2000-05-03 Andy Dustman <andy@dustman.net> - - Adapted from Posix threads interface - 12 May 1997 -- david arnold <davida@pobox.com> - */ - -#include <stdlib.h> -#include <string.h> -#include <pth.h> - -/* A pth mutex isn't sufficient to model the Python lock type - * because pth mutexes can be acquired multiple times by the - * same thread. - * - * The pth_lock struct implements a Python lock as a "locked?" bit - * and a <condition, mutex> pair. In general, if the bit can be acquired - * instantly, it is, else the pair is used to block the thread until the - * bit is cleared. - */ - -typedef struct { - char locked; /* 0=unlocked, 1=locked */ - /* a <cond, mutex> pair to handle an acquire of a locked lock */ - pth_cond_t lock_released; - pth_mutex_t mut; -} pth_lock; - -#define CHECK_STATUS(name) if (status == -1) { printf("%d ", status); perror(name); error = 1; } - -pth_attr_t PyThread_attr; - -/* - * Initialization. - */ - -static void PyThread__init_thread(void) -{ - pth_init(); - PyThread_attr = pth_attr_new(); - pth_attr_set(PyThread_attr, PTH_ATTR_STACK_SIZE, 1<<18); - pth_attr_set(PyThread_attr, PTH_ATTR_JOINABLE, FALSE); -} - -/* - * Thread support. - */ - - -long PyThread_start_new_thread(void (*func)(void *), void *arg) -{ - pth_t th; - dprintf(("PyThread_start_new_thread called\n")); - if (!initialized) - PyThread_init_thread(); - - th = pth_spawn(PyThread_attr, - (void* (*)(void *))func, - (void *)arg - ); - - return th; -} - -long PyThread_get_thread_ident(void) -{ - volatile pth_t threadid; - if (!initialized) - PyThread_init_thread(); - threadid = pth_self(); - return (long) threadid; -} - -void PyThread_exit_thread(void) -{ - dprintf(("PyThread_exit_thread called\n")); - if (!initialized) { - exit(0); - } -} - -/* - * Lock support. - */ -PyThread_type_lock PyThread_allocate_lock(void) -{ - pth_lock *lock; - int status, error = 0; - - dprintf(("PyThread_allocate_lock called\n")); - if (!initialized) - PyThread_init_thread(); - - lock = (pth_lock *) malloc(sizeof(pth_lock)); - memset((void *)lock, '\0', sizeof(pth_lock)); - if (lock) { - lock->locked = 0; - status = pth_mutex_init(&lock->mut); - CHECK_STATUS("pth_mutex_init"); - status = pth_cond_init(&lock->lock_released); - CHECK_STATUS("pth_cond_init"); - if (error) { - free((void *)lock); - lock = NULL; - } - } - dprintf(("PyThread_allocate_lock() -> %p\n", lock)); - return (PyThread_type_lock) lock; -} - -void PyThread_free_lock(PyThread_type_lock lock) -{ - pth_lock *thelock = (pth_lock *)lock; - - dprintf(("PyThread_free_lock(%p) called\n", lock)); - - free((void *)thelock); -} - -int PyThread_acquire_lock(PyThread_type_lock lock, int waitflag) -{ - int success; - pth_lock *thelock = (pth_lock *)lock; - int status, error = 0; - - dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock, waitflag)); - - status = pth_mutex_acquire(&thelock->mut, !waitflag, NULL); - CHECK_STATUS("pth_mutex_acquire[1]"); - success = thelock->locked == 0; - if (success) thelock->locked = 1; - status = pth_mutex_release( &thelock->mut ); - CHECK_STATUS("pth_mutex_release[1]"); - - if ( !success && waitflag ) { - /* continue trying until we get the lock */ - - /* mut must be locked by me -- part of the condition - * protocol */ - status = pth_mutex_acquire( &thelock->mut, !waitflag, NULL ); - CHECK_STATUS("pth_mutex_acquire[2]"); - while ( thelock->locked ) { - status = pth_cond_await(&thelock->lock_released, - &thelock->mut, NULL); - CHECK_STATUS("pth_cond_await"); - } - thelock->locked = 1; - status = pth_mutex_release( &thelock->mut ); - CHECK_STATUS("pth_mutex_release[2]"); - success = 1; - } - if (error) success = 0; - dprintf(("PyThread_acquire_lock(%p, %d) -> %d\n", lock, waitflag, success)); - return success; -} - -void PyThread_release_lock(PyThread_type_lock lock) -{ - pth_lock *thelock = (pth_lock *)lock; - int status, error = 0; - - dprintf(("PyThread_release_lock(%p) called\n", lock)); - - status = pth_mutex_acquire( &thelock->mut, 0, NULL ); - CHECK_STATUS("pth_mutex_acquire[3]"); - - thelock->locked = 0; - - status = pth_mutex_release( &thelock->mut ); - CHECK_STATUS("pth_mutex_release[3]"); - - /* wake up someone (anyone, if any) waiting on the lock */ - status = pth_cond_notify( &thelock->lock_released, 0 ); - CHECK_STATUS("pth_cond_notify"); -} diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index e90ae7e..20f8535 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -282,14 +282,14 @@ PyThread_allocate_lock(void) if (!initialized) PyThread_init_thread(); - lock = (sem_t *)malloc(sizeof(sem_t)); + lock = (sem_t *)PyMem_RawMalloc(sizeof(sem_t)); if (lock) { status = sem_init(lock,0,1); CHECK_STATUS("sem_init"); if (error) { - free((void *)lock); + PyMem_RawFree((void *)lock); lock = NULL; } } @@ -313,7 +313,7 @@ PyThread_free_lock(PyThread_type_lock lock) status = sem_destroy(thelock); CHECK_STATUS("sem_destroy"); - free((void *)thelock); + PyMem_RawFree((void *)thelock); } /* @@ -410,7 +410,7 @@ PyThread_allocate_lock(void) if (!initialized) PyThread_init_thread(); - lock = (pthread_lock *) malloc(sizeof(pthread_lock)); + lock = (pthread_lock *) PyMem_RawMalloc(sizeof(pthread_lock)); if (lock) { memset((void *)lock, '\0', sizeof(pthread_lock)); lock->locked = 0; @@ -430,7 +430,7 @@ PyThread_allocate_lock(void) CHECK_STATUS("pthread_cond_init"); if (error) { - free((void *)lock); + PyMem_RawFree((void *)lock); lock = 0; } } @@ -457,7 +457,7 @@ PyThread_free_lock(PyThread_type_lock lock) status = pthread_mutex_destroy( &thelock->mut ); CHECK_STATUS("pthread_mutex_destroy"); - free((void *)thelock); + PyMem_RawFree((void *)thelock); } PyLockStatus diff --git a/Python/traceback.c b/Python/traceback.c index 74075c9..4f2e732 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, strlen(str)) +#define PUTS(fd, str) write(fd, str, (int)strlen(str)) #define MAX_STRING_LENGTH 500 #define MAX_FRAME_DEPTH 100 #define MAX_NTHREADS 100 @@ -246,10 +246,12 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent) binary = _PyObject_CallMethodId(io, &PyId_open, "Os", filename, "rb"); if (binary == NULL) { + PyErr_Clear(); + binary = _Py_FindSourceFile(filename, buf, sizeof(buf), io); if (binary == NULL) { Py_DECREF(io); - return 0; + return -1; } } |