diff options
Diffstat (limited to 'Python')
41 files changed, 6887 insertions, 7019 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 7bf2c50..afa6d2e 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); @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -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; @@ -6540,25 +6613,39 @@ 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)) { +    if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) {          int res; -        tmp = _PyObject_GetAttrId(obj, &PyId_kwarg); +        Py_ssize_t len; +        Py_ssize_t i; +        tmp = _PyObject_GetAttrId(obj, &PyId_kw_defaults);          if (tmp == NULL) goto failed; -        res = obj2ast_identifier(tmp, &kwarg, arena); -        if (res != 0) 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); +            goto failed; +        } +        len = PyList_GET_SIZE(tmp); +        kw_defaults = 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(kw_defaults, i, value); +        }          Py_CLEAR(tmp);      } else { -        kwarg = NULL; +        PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments"); +        return 1;      } -    if (_PyObject_HasAttrId(obj, &PyId_kwargannotation)) { +    if (exists_not_none(obj, &PyId_kwarg)) {          int res; -        tmp = _PyObject_GetAttrId(obj, &PyId_kwargannotation); +        tmp = _PyObject_GetAttrId(obj, &PyId_kwarg);          if (tmp == NULL) goto failed; -        res = obj2ast_expr(tmp, &kwargannotation, arena); +        res = obj2ast_arg(tmp, &kwarg, arena);          if (res != 0) goto failed;          Py_CLEAR(tmp);      } else { -        kwargannotation = NULL; +        kwarg = NULL;      }      if (_PyObject_HasAttrId(obj, &PyId_defaults)) {          int res; @@ -6584,32 +6671,8 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena)          PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");          return 1;      } -    if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) { -        int res; -        Py_ssize_t len; -        Py_ssize_t i; -        tmp = _PyObject_GetAttrId(obj, &PyId_kw_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); -            goto failed; -        } -        len = PyList_GET_SIZE(tmp); -        kw_defaults = 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(kw_defaults, i, value); -        } -        Py_CLEAR(tmp); -    } else { -        PyErr_SetString(PyExc_TypeError, "required field \"kw_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/ast.c b/Python/ast.c index 9a0b064..073d59f 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) { @@ -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; @@ -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); @@ -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 @@ -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)); @@ -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 */ @@ -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); @@ -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) { @@ -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, diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index dffdf46..3f270b4 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))          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 d28ae2b..fcc1c24 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 @@ -1255,10 +1252,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)              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 +1271,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 +1287,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 +1302,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 +1351,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 +1456,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 +1917,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 +1961,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 +2243,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 +2554,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 +2624,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 +2686,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 +2741,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 +2787,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 +2856,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 +3016,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 +3024,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 +3099,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 +3134,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 +3207,7 @@ fast_yield:      /* pop frame */  exit_eval_frame:      Py_LeaveRecursiveCall(); +    f->f_executing = 0;      tstate->frame = f->f_back;      return retval; @@ -3243,9 +3373,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 +3652,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 +3667,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 +3736,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 +3841,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 +3849,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 +3862,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 +3895,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 +4061,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 +4090,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 +4210,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 +4243,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 +4255,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 +4541,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 +4581,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 +4639,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..cb9f0d8 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 @@ -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..160c6fc 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -149,8 +149,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; @@ -288,8 +287,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 +303,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 +320,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 +336,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 +372,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 +546,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)); @@ -862,8 +904,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 +1010,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 +1371,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 +1545,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 +1612,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 +1621,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; @@ -1661,12 +1705,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)) { @@ -1703,24 +1741,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,14 +1835,14 @@ 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,                                (void *)e, e->lineno))          return 0; @@ -2288,8 +2326,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 +2421,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 +2432,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 +2686,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 +2725,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: @@ -3197,12 +3251,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 +3438,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 +3610,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 +4123,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 +4205,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..b674480 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,6 +993,21 @@ 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. @@ -938,15 +1015,11 @@ PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset)     functionality in tb_displayline() in traceback.c. */  PyObject * -PyErr_ProgramText(const char *filename, int lineno) +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..074888e 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. */ +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..2c2628f 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,7 +373,7 @@ 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) { @@ -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..1a162ee 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,7 +506,13 @@ _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;  } @@ -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) { @@ -693,7 +702,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 +844,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 +926,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 +981,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 +1001,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) { @@ -1016,7 +1025,7 @@ get_frozen_object(PyObject *name)  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 +1052,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; @@ -1072,19 +1081,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) @@ -1430,7 +1437,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 +1455,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 +1524,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 +1778,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 +1797,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..78e9855 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,416 +11,350 @@ 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, +    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,40,146,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, -    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, -    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, +    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,244, +    3,0,0,0,119,105,110,244,6,0,0,0,99,121,103,119, +    105,110,244,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,244,3,0,0,0,95, +    111,115,116,7,0,0,0,101,110,118,105,114,111,110,168,0, +    0,0,0,114,4,0,0,0,114,4,0,0,0,245,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,244, +    11,0,0,0,95,114,101,108,97,120,95,99,97,115,101,30, +    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,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,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,40,4,0,0,0, +    244,3,0,0,0,115,121,115,244,8,0,0,0,112,108,97, +    116,102,111,114,109,244,10,0,0,0,115,116,97,114,116,115, +    119,105,116,104,244,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,114,6,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,244,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, +    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,40,4,0,0, +    0,117,42,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, +    108,3,0,0,0,255,127,255,127,3,0,233,4,0,0,0, +    244,6,0,0,0,108,105,116,116,108,101,40,2,0,0,0, +    244,3,0,0,0,105,110,116,244,8,0,0,0,116,111,95, +    98,121,116,101,115,40,1,0,0,0,244,1,0,0,0,120, +    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244, +    7,0,0,0,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,40,2,0,0,0,117,47,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,114,13, +    0,0,0,40,2,0,0,0,114,14,0,0,0,244,10,0, +    0,0,102,114,111,109,95,98,121,116,101,115,40,1,0,0, +    0,116,9,0,0,0,105,110,116,95,98,121,116,101,115,114, +    4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,7, +    0,0,0,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,40,3, +    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, -    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, -    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, +    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,40,2,0,0,0, +    244,6,0,0,0,114,115,116,114,105,112,244,15,0,0,0, +    112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,40, +    2,0,0,0,244,2,0,0,0,46,48,244,4,0,0,0, +    112,97,114,116,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,245,10,0,0,0,60,108,105,115,116,99,111,109, +    112,62,52,0,0,0,115,2,0,0,0,9,1,117,30,0, +    0,0,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, +    40,2,0,0,0,244,8,0,0,0,112,97,116,104,95,115, +    101,112,244,4,0,0,0,106,111,105,110,40,1,0,0,0, +    244,10,0,0,0,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,244,10, +    0,0,0,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,40, +    4,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,233,1,0,0,0,116,8, +    0,0,0,109,97,120,115,112,108,105,116,244,0,0,0,0, +    40,6,0,0,0,244,3,0,0,0,108,101,110,114,21,0, +    0,0,244,10,0,0,0,114,112,97,114,116,105,116,105,111, +    110,114,25,0,0,0,244,8,0,0,0,114,101,118,101,114, +    115,101,100,244,6,0,0,0,114,115,112,108,105,116,40,5, +    0,0,0,244,4,0,0,0,112,97,116,104,116,5,0,0, +    0,102,114,111,110,116,244,1,0,0,0,95,244,4,0,0, +    0,116,97,105,108,114,16,0,0,0,114,4,0,0,0,114, +    4,0,0,0,114,5,0,0,0,244,11,0,0,0,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,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,70,105,0,240,0,0,40, +    4,0,0,0,114,3,0,0,0,244,4,0,0,0,115,116, +    97,116,244,7,0,0,0,79,83,69,114,114,111,114,244,7, +    0,0,0,115,116,95,109,111,100,101,40,3,0,0,0,114, +    35,0,0,0,244,4,0,0,0,109,111,100,101,116,9,0, +    0,0,115,116,97,116,95,105,110,102,111,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,244,18,0,0,0,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, +    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,114,43,0,0,0,40,1,0,0,0,114,35,0, +    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +    0,244,12,0,0,0,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,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, +    114,3,0,0,0,116,6,0,0,0,103,101,116,99,119,100, +    114,43,0,0,0,40,1,0,0,0,114,35,0,0,0,114, +    4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,11, +    0,0,0,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,45,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,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,116,2,0,0, +    0,119,98,78,40,13,0,0,0,244,6,0,0,0,102,111, +    114,109,97,116,244,2,0,0,0,105,100,114,3,0,0,0, +    116,4,0,0,0,111,112,101,110,116,6,0,0,0,79,95, +    69,88,67,76,116,7,0,0,0,79,95,67,82,69,65,84, +    116,8,0,0,0,79,95,87,82,79,78,76,89,244,3,0, +    0,0,95,105,111,244,6,0,0,0,70,105,108,101,73,79, +    244,5,0,0,0,119,114,105,116,101,244,7,0,0,0,114, +    101,112,108,97,99,101,114,40,0,0,0,116,6,0,0,0, +    117,110,108,105,110,107,40,6,0,0,0,114,35,0,0,0, +    244,4,0,0,0,100,97,116,97,114,42,0,0,0,116,8, +    0,0,0,112,97,116,104,95,116,109,112,116,2,0,0,0, +    102,100,244,4,0,0,0,102,105,108,101,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,244,13,0,0,0,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, +    54,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,40,6,0, +    0,0,117,47,0,0,0,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,244,10,0,0,0,95,95,109,111,100, +    117,108,101,95,95,244,8,0,0,0,95,95,110,97,109,101, +    95,95,244,12,0,0,0,95,95,113,117,97,108,110,97,109, +    101,95,95,244,7,0,0,0,95,95,100,111,99,95,95,78, +    40,5,0,0,0,244,7,0,0,0,104,97,115,97,116,116, +    114,244,7,0,0,0,115,101,116,97,116,116,114,244,7,0, +    0,0,103,101,116,97,116,116,114,244,8,0,0,0,95,95, +    100,105,99,116,95,95,244,6,0,0,0,117,112,100,97,116, +    101,40,3,0,0,0,116,3,0,0,0,110,101,119,116,3, +    0,0,0,111,108,100,114,51,0,0,0,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,244,5,0,0,0,95, +    119,114,97,112,113,0,0,0,115,8,0,0,0,0,2,25, +    1,15,1,32,1,114,64,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,40,2,0,0,0,244,14,0,0,0,95,68, +    101,97,100,108,111,99,107,69,114,114,111,114,78,40,3,0, +    0,0,114,56,0,0,0,114,55,0,0,0,114,57,0,0, +    0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, +    114,5,0,0,0,114,65,0,0,0,132,0,0,0,115,2, +    0,0,0,12,1,114,65,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,40,13,0,0,0,244,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,5,0,100,1,0,124,0,0,95,6,0,100,1,0,124, +    0,0,95,7,0,100,0,0,83,40,2,0,0,0,78,233, +    0,0,0,0,40,8,0,0,0,244,7,0,0,0,95,116, +    104,114,101,97,100,116,13,0,0,0,97,108,108,111,99,97, +    116,101,95,108,111,99,107,244,4,0,0,0,108,111,99,107, +    244,6,0,0,0,119,97,107,101,117,112,244,4,0,0,0, +    110,97,109,101,244,5,0,0,0,111,119,110,101,114,244,5, +    0,0,0,99,111,117,110,116,244,7,0,0,0,119,97,105, +    116,101,114,115,40,2,0,0,0,244,4,0,0,0,115,101, +    108,102,114,71,0,0,0,114,4,0,0,0,114,4,0,0, +    0,114,5,0,0,0,244,8,0,0,0,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,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, @@ -430,1182 +364,1232 @@ unsigned char _Py_M__importlib[] = {      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, -    32,32,32,32,32,32,65,99,113,117,105,114,101,32,116,104, -    101,32,109,111,100,117,108,101,32,108,111,99,107,46,32,32, -    73,102,32,97,32,112,111,116,101,110,116,105,97,108,32,100, -    101,97,100,108,111,99,107,32,105,115,32,100,101,116,101,99, -    116,101,100,44,10,32,32,32,32,32,32,32,32,97,32,95, -    68,101,97,100,108,111,99,107,69,114,114,111,114,32,105,115, -    32,114,97,105,115,101,100,46,10,32,32,32,32,32,32,32, -    32,79,116,104,101,114,119,105,115,101,44,32,116,104,101,32, -    108,111,99,107,32,105,115,32,97,108,119,97,121,115,32,97, -    99,113,117,105,114,101,100,32,97,110,100,32,84,114,117,101, -    32,105,115,32,114,101,116,117,114,110,101,100,46,10,32,32, -    32,32,32,32,32,32,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,83,40,3,0,0,0,78,70,84,40,5,0,0,0,114, +    68,0,0,0,244,9,0,0,0,103,101,116,95,105,100,101, +    110,116,114,72,0,0,0,244,12,0,0,0,95,98,108,111, +    99,107,105,110,103,95,111,110,244,3,0,0,0,103,101,116, +    40,4,0,0,0,114,75,0,0,0,244,2,0,0,0,109, +    101,244,3,0,0,0,116,105,100,114,69,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,244,12,0, +    0,0,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,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,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,40,7,0,0,0,117,185,0,0,0, +    10,32,32,32,32,32,32,32,32,65,99,113,117,105,114,101, +    32,116,104,101,32,109,111,100,117,108,101,32,108,111,99,107, +    46,32,32,73,102,32,97,32,112,111,116,101,110,116,105,97, +    108,32,100,101,97,100,108,111,99,107,32,105,115,32,100,101, +    116,101,99,116,101,100,44,10,32,32,32,32,32,32,32,32, +    97,32,95,68,101,97,100,108,111,99,107,69,114,114,111,114, +    32,105,115,32,114,97,105,115,101,100,46,10,32,32,32,32, +    32,32,32,32,79,116,104,101,114,119,105,115,101,44,32,116, +    104,101,32,108,111,99,107,32,105,115,32,97,108,119,97,121, +    115,32,97,99,113,117,105,114,101,100,32,97,110,100,32,84, +    114,117,101,32,105,115,32,114,101,116,117,114,110,101,100,46, +    10,32,32,32,32,32,32,32,32,114,67,0,0,0,114,29, +    0,0,0,84,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, +    70,78,40,12,0,0,0,114,68,0,0,0,114,77,0,0, +    0,114,78,0,0,0,114,69,0,0,0,114,73,0,0,0, +    114,72,0,0,0,114,82,0,0,0,114,65,0,0,0,114, +    70,0,0,0,244,7,0,0,0,97,99,113,117,105,114,101, +    114,74,0,0,0,244,7,0,0,0,114,101,108,101,97,115, +    101,40,2,0,0,0,114,75,0,0,0,114,81,0,0,0, +    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +    83,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,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,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,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,114,67, +    0,0,0,114,29,0,0,0,40,10,0,0,0,114,68,0, +    0,0,114,77,0,0,0,114,69,0,0,0,114,72,0,0, +    0,244,12,0,0,0,82,117,110,116,105,109,101,69,114,114, +    111,114,114,73,0,0,0,244,14,0,0,0,65,115,115,101, +    114,116,105,111,110,69,114,114,111,114,114,74,0,0,0,114, +    70,0,0,0,114,84,0,0,0,40,2,0,0,0,114,75, +    0,0,0,114,81,0,0,0,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,114,84,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,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,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,40,2,0,0,0,78,117,23,0,0, +    0,95,77,111,100,117,108,101,76,111,99,107,40,123,33,114, +    125,41,32,97,116,32,123,125,40,3,0,0,0,114,46,0, +    0,0,114,71,0,0,0,114,47,0,0,0,40,1,0,0, +    0,114,75,0,0,0,114,4,0,0,0,114,4,0,0,0, +    114,5,0,0,0,244,8,0,0,0,95,95,114,101,112,114, +    95,95,200,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, +    114,101,112,114,95,95,78,40,9,0,0,0,114,56,0,0, +    0,114,55,0,0,0,114,57,0,0,0,114,58,0,0,0, +    114,76,0,0,0,114,82,0,0,0,114,83,0,0,0,114, +    84,0,0,0,114,87,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,136,0,0,0,115,12,0,0,0,12,4,6,2,12, +    8,12,12,12,25,12,13,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,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,40,11,0,0, +    0,244,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,114,67,0,0,0,40,2,0,0, +    0,114,71,0,0,0,114,73,0,0,0,40,2,0,0,0, +    114,75,0,0,0,114,71,0,0,0,114,4,0,0,0,114, +    4,0,0,0,114,5,0,0,0,114,76,0,0,0,208,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,114,29,0,0, +    0,84,40,1,0,0,0,114,73,0,0,0,40,1,0,0, +    0,114,75,0,0,0,114,4,0,0,0,114,4,0,0,0, +    114,5,0,0,0,114,83,0,0,0,212,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,114,67,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,114,29, +    0,0,0,40,2,0,0,0,114,73,0,0,0,114,85,0, +    0,0,40,1,0,0,0,114,75,0,0,0,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,114,84,0,0,0, +    216,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,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,40, +    2,0,0,0,78,117,28,0,0,0,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,40,3,0,0,0,114,46,0,0,0, +    114,71,0,0,0,114,47,0,0,0,40,1,0,0,0,114, +    75,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,114,87,0,0,0,221,0,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, -    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, +    95,78,40,8,0,0,0,114,56,0,0,0,114,55,0,0, +    0,114,57,0,0,0,114,58,0,0,0,114,76,0,0,0, +    114,83,0,0,0,114,84,0,0,0,114,87,0,0,0,114, +    4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,114,88,0,0,0,204,0,0,0,115,10,0,0, +    0,12,2,6,2,12,4,12,4,12,5,114,88,0,0,0, +    99,1,0,0,0,0,0,0,0,3,0,0,0,11,0,0, +    0,3,0,0,0,115,142,0,0,0,100,1,0,125,1,0, +    121,17,0,116,0,0,136,0,0,25,131,0,0,125,1,0, +    87,110,18,0,4,116,1,0,107,10,0,114,43,0,1,1, +    1,89,110,1,0,88,124,1,0,100,1,0,107,8,0,114, +    138,0,116,2,0,100,1,0,107,8,0,114,83,0,116,3, +    0,136,0,0,131,1,0,125,1,0,110,12,0,116,4,0, +    136,0,0,131,1,0,125,1,0,135,0,0,102,1,0,100, +    2,0,100,3,0,134,0,0,125,2,0,116,5,0,106,6, +    0,124,1,0,124,2,0,131,2,0,116,0,0,136,0,0, +    60,110,0,0,124,1,0,83,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,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,40,1,0,0,0,78,40,1,0,0,0, +    244,13,0,0,0,95,109,111,100,117,108,101,95,108,111,99, +    107,115,40,1,0,0,0,114,36,0,0,0,40,1,0,0, +    0,114,71,0,0,0,114,4,0,0,0,114,5,0,0,0, +    244,2,0,0,0,99,98,241,0,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, -    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, +    46,99,98,40,7,0,0,0,114,89,0,0,0,244,8,0, +    0,0,75,101,121,69,114,114,111,114,114,68,0,0,0,114, +    88,0,0,0,114,66,0,0,0,244,8,0,0,0,95,119, +    101,97,107,114,101,102,116,3,0,0,0,114,101,102,40,3, +    0,0,0,114,71,0,0,0,114,69,0,0,0,114,90,0, +    0,0,114,4,0,0,0,40,1,0,0,0,114,71,0,0, +    0,114,5,0,0,0,244,16,0,0,0,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,93,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,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,114,93,0,0,0,244,4,0,0, +    0,95,105,109,112,244,12,0,0,0,114,101,108,101,97,115, +    101,95,108,111,99,107,114,83,0,0,0,114,65,0,0,0, +    114,84,0,0,0,40,2,0,0,0,114,71,0,0,0,114, +    69,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,244,19,0,0,0,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,96,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,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,114,4,0,0,0,40,3,0,0,0, +    244,1,0,0,0,102,244,4,0,0,0,97,114,103,115,116, +    4,0,0,0,107,119,100,115,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,244,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,10,1,0,0,115,2,0,0,0,0,8, +    114,99,0,0,0,105,208,12,0,0,233,2,0,0,0,114, +    13,0,0,0,115,2,0,0,0,13,10,116,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,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,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,78,244,1,0,0,0,46,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,114,30,0,0,0,114,67,0,0,0,40,13,0,0, +    0,114,7,0,0,0,244,5,0,0,0,102,108,97,103,115, +    244,8,0,0,0,111,112,116,105,109,105,122,101,244,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,244,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,114,38,0,0,0,244,9, +    0,0,0,112,97,114,116,105,116,105,111,110,244,14,0,0, +    0,105,109,112,108,101,109,101,110,116,97,116,105,111,110,244, +    9,0,0,0,99,97,99,104,101,95,116,97,103,244,19,0, +    0,0,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,244, +    8,0,0,0,95,80,89,67,65,67,72,69,40,11,0,0, +    0,114,35,0,0,0,116,14,0,0,0,100,101,98,117,103, +    95,111,118,101,114,114,105,100,101,244,5,0,0,0,100,101, +    98,117,103,244,8,0,0,0,115,117,102,102,105,120,101,115, +    244,4,0,0,0,104,101,97,100,114,37,0,0,0,244,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, +    244,3,0,0,0,115,101,112,114,36,0,0,0,116,3,0, +    0,0,116,97,103,244,8,0,0,0,102,105,108,101,110,97, +    109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +    0,244,17,0,0,0,99,97,99,104,101,95,102,114,111,109, +    95,115,111,117,114,99,101,131,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,117,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,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,78,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,114,101,0, +    0,0,114,100,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,114,67,0,0,0,40,12,0, +    0,0,114,7,0,0,0,114,107,0,0,0,114,108,0,0, +    0,114,109,0,0,0,114,38,0,0,0,114,110,0,0,0, +    244,10,0,0,0,86,97,108,117,101,69,114,114,111,114,114, +    46,0,0,0,114,73,0,0,0,114,106,0,0,0,114,28, +    0,0,0,244,15,0,0,0,83,79,85,82,67,69,95,83, +    85,70,70,73,88,69,83,40,5,0,0,0,114,35,0,0, +    0,114,113,0,0,0,116,16,0,0,0,112,121,99,97,99, +    104,101,95,102,105,108,101,110,97,109,101,116,7,0,0,0, +    112,121,99,97,99,104,101,114,114,0,0,0,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,244,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, +    101,158,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,120,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,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,114,67,0,0,0, +    78,114,101,0,0,0,233,3,0,0,0,114,29,0,0,0, +    116,2,0,0,0,112,121,233,253,255,255,255,233,255,255,255, +    255,114,123,0,0,0,40,7,0,0,0,114,31,0,0,0, +    114,32,0,0,0,244,5,0,0,0,108,111,119,101,114,114, +    120,0,0,0,114,109,0,0,0,114,118,0,0,0,114,44, +    0,0,0,40,5,0,0,0,244,13,0,0,0,98,121,116, +    101,99,111,100,101,95,112,97,116,104,116,4,0,0,0,114, +    101,115,116,114,36,0,0,0,116,9,0,0,0,101,120,116, +    101,110,115,105,111,110,244,11,0,0,0,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,244,15,0,0,0,95,103,101,116,95,115, +    111,117,114,99,101,102,105,108,101,181,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,127,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,40,3,0,0,0,117,51,0,0,0,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, -    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, -    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, -    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, +    46,105,182,1,0,0,233,128,0,0,0,40,4,0,0,0, +    114,3,0,0,0,114,39,0,0,0,114,41,0,0,0,114, +    40,0,0,0,40,2,0,0,0,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,244,10,0,0,0,95,99,97,108,99,95,109,111,100, +    101,200,1,0,0,115,12,0,0,0,0,2,3,1,22,1, +    13,1,11,3,10,1,114,129,0,0,0,244,9,0,0,0, +    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,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, +    245,1,0,0,0,35,245,7,0,0,0,105,109,112,111,114, +    116,32,117,2,0,0,0,35,32,114,53,0,0,0,78,40, +    2,0,0,0,114,131,0,0,0,114,132,0,0,0,40,7, +    0,0,0,114,7,0,0,0,114,102,0,0,0,244,7,0, +    0,0,118,101,114,98,111,115,101,114,9,0,0,0,244,5, +    0,0,0,112,114,105,110,116,114,46,0,0,0,244,6,0, +    0,0,115,116,100,101,114,114,40,3,0,0,0,244,7,0, +    0,0,109,101,115,115,97,103,101,114,130,0,0,0,114,98, +    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +    0,0,244,16,0,0,0,95,118,101,114,98,111,115,101,95, +    109,101,115,115,97,103,101,212,1,0,0,115,8,0,0,0, +    0,2,18,1,15,1,13,1,114,137,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,40,8,0,0,0, +    244,13,0,0,0,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,40,1,0,0,0,78,40, +    1,0,0,0,244,5,0,0,0,95,110,97,109,101,40,2, +    0,0,0,114,75,0,0,0,114,71,0,0,0,114,4,0, +    0,0,114,4,0,0,0,114,5,0,0,0,114,76,0,0, +    0,222,1,0,0,115,2,0,0,0,0,1,117,22,0,0, +    0,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,40,1,0,0,0,78, +    40,4,0,0,0,114,139,0,0,0,114,7,0,0,0,244, +    7,0,0,0,109,111,100,117,108,101,115,244,10,0,0,0, +    95,105,115,95,114,101,108,111,97,100,40,1,0,0,0,114, +    75,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,244,9,0,0,0,95,95,101,110,116,101,114,95, +    95,225,1,0,0,115,2,0,0,0,0,1,117,23,0,0, +    0,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,40,3,0,0,0,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,40,1,0, +    0,0,78,114,4,0,0,0,40,2,0,0,0,114,22,0, +    0,0,116,3,0,0,0,97,114,103,114,4,0,0,0,114, +    4,0,0,0,114,5,0,0,0,245,9,0,0,0,60,103, +    101,110,101,120,112,114,62,229,1,0,0,115,2,0,0,0, +    6,0,117,41,0,0,0,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, +    40,6,0,0,0,244,3,0,0,0,97,110,121,114,141,0, +    0,0,114,7,0,0,0,114,140,0,0,0,114,139,0,0, +    0,114,91,0,0,0,40,2,0,0,0,114,75,0,0,0, +    114,98,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +    5,0,0,0,244,8,0,0,0,95,95,101,120,105,116,95, +    95,228,1,0,0,115,10,0,0,0,0,1,35,1,3,1, +    17,1,13,1,117,22,0,0,0,95,77,97,110,97,103,101, +    82,101,108,111,97,100,46,95,95,101,120,105,116,95,95,78, +    40,6,0,0,0,114,56,0,0,0,114,55,0,0,0,114, +    57,0,0,0,114,76,0,0,0,114,142,0,0,0,114,145, +    0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,114,138,0,0,0,220,1,0,0, +    115,6,0,0,0,12,2,12,3,12,3,114,138,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,40,10,0,0, +    0,244,14,0,0,0,95,77,111,100,117,108,101,77,97,110, +    97,103,101,114,117,122,0,0,0,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,244,10,0,0,0,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,40,2,0,0,0,117, +    183,0,0,0,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,40,3,0,0, +    0,244,5,0,0,0,115,117,112,101,114,114,76,0,0,0, +    244,11,0,0,0,95,114,101,115,101,116,95,110,97,109,101, +    40,3,0,0,0,114,75,0,0,0,114,71,0,0,0,114, +    147,0,0,0,40,1,0,0,0,244,9,0,0,0,95,95, +    99,108,97,115,115,95,95,114,4,0,0,0,114,5,0,0, +    0,114,76,0,0,0,245,1,0,0,115,4,0,0,0,0, +    6,16,1,117,23,0,0,0,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,40,2,0,0, +    0,78,84,40,14,0,0,0,114,148,0,0,0,114,142,0, +    0,0,114,7,0,0,0,114,140,0,0,0,114,79,0,0, +    0,114,139,0,0,0,244,7,0,0,0,95,109,111,100,117, +    108,101,114,141,0,0,0,244,4,0,0,0,116,121,112,101, +    114,48,0,0,0,244,16,0,0,0,95,95,105,110,105,116, +    105,97,108,105,122,105,110,103,95,95,114,149,0,0,0,114, +    56,0,0,0,244,14,0,0,0,65,116,116,114,105,98,117, +    116,101,69,114,114,111,114,40,1,0,0,0,114,75,0,0, +    0,40,1,0,0,0,114,150,0,0,0,114,4,0,0,0, +    114,5,0,0,0,114,142,0,0,0,254,1,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,117,24,0,0,0, +    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,40,2,0,0,0,78,70,40, +    4,0,0,0,114,151,0,0,0,114,153,0,0,0,114,148, +    0,0,0,114,145,0,0,0,40,2,0,0,0,114,75,0, +    0,0,114,98,0,0,0,40,1,0,0,0,114,150,0,0, +    0,114,4,0,0,0,114,5,0,0,0,114,145,0,0,0, +    17,2,0,0,115,6,0,0,0,0,1,12,1,6,1,117, +    23,0,0,0,95,77,111,100,117,108,101,77,97,110,97,103, +    101,114,46,95,95,101,120,105,116,95,95,40,7,0,0,0, +    114,56,0,0,0,114,55,0,0,0,114,57,0,0,0,114, +    58,0,0,0,114,76,0,0,0,114,142,0,0,0,114,145, +    0,0,0,114,4,0,0,0,114,4,0,0,0,40,1,0, +    0,0,114,150,0,0,0,114,5,0,0,0,114,146,0,0, +    0,237,1,0,0,115,8,0,0,0,12,6,6,2,24,9, +    18,19,114,146,0,0,0,114,147,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,40,2,0,0,0,117,138,0,0, +    0,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,147,0,0,0, +    40,1,0,0,0,114,146,0,0,0,40,2,0,0,0,114, +    71,0,0,0,114,147,0,0,0,114,4,0,0,0,114,4, +    0,0,0,114,5,0,0,0,244,14,0,0,0,109,111,100, +    117,108,101,95,116,111,95,108,111,97,100,23,2,0,0,115, +    2,0,0,0,0,6,114,155,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,40,4,0,0,0, +    117,68,0,0,0,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,101,0,0,0,114,67, +    0,0,0,78,40,6,0,0,0,114,56,0,0,0,244,10, +    0,0,0,105,115,95,112,97,99,107,97,103,101,244,11,0, +    0,0,73,109,112,111,114,116,69,114,114,111,114,244,11,0, +    0,0,95,95,112,97,99,107,97,103,101,95,95,244,8,0, +    0,0,95,95,112,97,116,104,95,95,114,32,0,0,0,40, +    4,0,0,0,244,6,0,0,0,108,111,97,100,101,114,244, +    6,0,0,0,109,111,100,117,108,101,114,71,0,0,0,114, +    156,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,244,19,0,0,0,95,105,110,105,116,95,112,97, +    99,107,97,103,101,95,97,116,116,114,115,32,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,162,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,40,3,0,0,0,117,57, +    0,0,0,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,67,0,0, +    0,78,40,8,0,0,0,244,12,0,0,0,103,101,116,95, +    102,105,108,101,110,97,109,101,114,56,0,0,0,244,8,0, +    0,0,95,95,102,105,108,101,95,95,114,157,0,0,0,114, +    158,0,0,0,114,159,0,0,0,244,6,0,0,0,97,112, +    112,101,110,100,114,38,0,0,0,40,2,0,0,0,114,160, +    0,0,0,114,161,0,0,0,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,244,16,0,0,0,95,105,110,105, +    116,95,102,105,108,101,95,97,116,116,114,115,47,2,0,0, +    115,12,0,0,0,0,2,3,1,25,1,13,1,5,2,18, +    1,114,166,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,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,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,40,5,0,0,0,78,114,158,0,0,0,114,159, +    0,0,0,114,101,0,0,0,114,67,0,0,0,40,5,0, +    0,0,114,61,0,0,0,114,56,0,0,0,114,158,0,0, +    0,114,59,0,0,0,114,32,0,0,0,40,3,0,0,0, +    114,98,0,0,0,244,6,0,0,0,107,119,97,114,103,115, +    114,161,0,0,0,40,1,0,0,0,244,3,0,0,0,102, +    120,110,114,4,0,0,0,114,5,0,0,0,244,19,0,0, +    0,115,101,116,95,112,97,99,107,97,103,101,95,119,114,97, +    112,112,101,114,60,2,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,114,64,0,0,0, +    40,2,0,0,0,114,168,0,0,0,114,169,0,0,0,114, +    4,0,0,0,40,1,0,0,0,114,168,0,0,0,114,5, +    0,0,0,244,11,0,0,0,115,101,116,95,112,97,99,107, +    97,103,101,58,2,0,0,115,6,0,0,0,0,2,18,7, +    13,1,114,170,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,40,3,0,0,0,117,38,0,0,0,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,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,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,40,2,0,0,0,78,244,10, +    0,0,0,95,95,108,111,97,100,101,114,95,95,40,2,0, +    0,0,114,61,0,0,0,114,171,0,0,0,40,4,0,0, +    0,114,75,0,0,0,114,98,0,0,0,114,167,0,0,0, +    114,161,0,0,0,40,1,0,0,0,114,168,0,0,0,114, +    4,0,0,0,114,5,0,0,0,244,18,0,0,0,115,101, +    116,95,108,111,97,100,101,114,95,119,114,97,112,112,101,114, +    73,2,0,0,115,8,0,0,0,0,1,18,1,24,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,114,64,0,0,0,40,2,0,0,0,114,168,0,0,0, +    114,172,0,0,0,114,4,0,0,0,40,1,0,0,0,114, +    168,0,0,0,114,5,0,0,0,244,10,0,0,0,115,101, +    116,95,108,111,97,100,101,114,71,2,0,0,115,6,0,0, +    0,0,2,18,5,13,1,114,173,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,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,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, +    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,114,71,0,0,0,40,2,0,0,0,114,71,0,0, +    0,114,157,0,0,0,40,4,0,0,0,114,75,0,0,0, +    114,71,0,0,0,114,98,0,0,0,114,167,0,0,0,40, +    1,0,0,0,244,6,0,0,0,109,101,116,104,111,100,114, +    4,0,0,0,114,5,0,0,0,244,19,0,0,0,95,99, +    104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101, +    114,90,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,40,1,0,0,0,114,64,0,0,0,40,2,0,0,0, +    114,174,0,0,0,114,175,0,0,0,114,4,0,0,0,40, +    1,0,0,0,114,174,0,0,0,114,5,0,0,0,244,11, +    0,0,0,95,99,104,101,99,107,95,110,97,109,101,82,2, +    0,0,115,6,0,0,0,0,8,21,6,13,1,114,176,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,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,114,71,0,0,0,40,4,0,0,0,114,7, +    0,0,0,244,20,0,0,0,98,117,105,108,116,105,110,95, +    109,111,100,117,108,101,95,110,97,109,101,115,114,157,0,0, +    0,114,46,0,0,0,40,2,0,0,0,114,75,0,0,0, +    244,8,0,0,0,102,117,108,108,110,97,109,101,40,1,0, +    0,0,114,168,0,0,0,114,4,0,0,0,114,5,0,0, +    0,244,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,102, +    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,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, +    110,95,119,114,97,112,112,101,114,40,1,0,0,0,114,64, +    0,0,0,40,2,0,0,0,114,168,0,0,0,114,179,0, +    0,0,114,4,0,0,0,40,1,0,0,0,114,168,0,0, +    0,114,5,0,0,0,244,17,0,0,0,95,114,101,113,117, +    105,114,101,115,95,98,117,105,108,116,105,110,100,2,0,0, +    115,6,0,0,0,0,2,18,5,13,1,114,180,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,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,114,71, +    0,0,0,40,4,0,0,0,114,94,0,0,0,244,9,0, +    0,0,105,115,95,102,114,111,122,101,110,114,157,0,0,0, +    114,46,0,0,0,40,2,0,0,0,114,75,0,0,0,114, +    178,0,0,0,40,1,0,0,0,114,168,0,0,0,114,4, +    0,0,0,114,5,0,0,0,244,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,113,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,114,64,0,0,0,40,2,0,0,0,114,168,0,0, +    0,114,182,0,0,0,114,4,0,0,0,40,1,0,0,0, +    114,168,0,0,0,114,5,0,0,0,244,16,0,0,0,95, +    114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,111, +    2,0,0,115,6,0,0,0,0,2,18,5,13,1,114,183, +    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,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,78,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,114,67,0,0,0,40,6,0,0,0, +    244,11,0,0,0,102,105,110,100,95,108,111,97,100,101,114, +    114,31,0,0,0,244,9,0,0,0,95,119,97,114,110,105, +    110,103,115,244,4,0,0,0,119,97,114,110,114,46,0,0, +    0,244,13,0,0,0,73,109,112,111,114,116,87,97,114,110, +    105,110,103,40,5,0,0,0,114,75,0,0,0,114,178,0, +    0,0,114,160,0,0,0,244,8,0,0,0,112,111,114,116, +    105,111,110,115,244,3,0,0,0,109,115,103,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,244,17,0,0,0, +    95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105, +    109,122,2,0,0,115,10,0,0,0,0,6,21,1,24,1, +    6,1,32,1,114,190,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,40,15,0,0,0,117,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,71,0,0,0, +    117,10,0,0,0,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,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,43,0,0,0,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,117,48,0,0,0,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,244,5,0,0,0, +    109,116,105,109,101,117,26,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,33,114,125,244,4,0,0,0,115,105,122,101,108,3,0, +    0,0,255,127,255,127,3,0,40,9,0,0,0,244,12,0, +    0,0,77,65,71,73,67,95,78,85,77,66,69,82,114,46, +    0,0,0,114,137,0,0,0,114,157,0,0,0,114,31,0, +    0,0,244,8,0,0,0,69,79,70,69,114,114,111,114,114, +    14,0,0,0,114,91,0,0,0,114,19,0,0,0,40,11, +    0,0,0,114,52,0,0,0,244,12,0,0,0,115,111,117, +    114,99,101,95,115,116,97,116,115,114,71,0,0,0,114,35, +    0,0,0,116,11,0,0,0,101,120,99,95,100,101,116,97, +    105,108,115,116,5,0,0,0,109,97,103,105,99,116,13,0, +    0,0,114,97,119,95,116,105,109,101,115,116,97,109,112,116, +    8,0,0,0,114,97,119,95,115,105,122,101,114,136,0,0, +    0,244,12,0,0,0,115,111,117,114,99,101,95,109,116,105, +    109,101,244,11,0,0,0,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,244,25,0,0,0,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,135, +    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,200,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,40,6,0,0,0,117,60,0,0,0, +    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,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,78,117,23,0,0,0,78,111,110,45, +    99,111,100,101,32,111,98,106,101,99,116,32,105,110,32,123, +    33,114,125,114,71,0,0,0,114,35,0,0,0,40,9,0, +    0,0,244,7,0,0,0,109,97,114,115,104,97,108,116,5, +    0,0,0,108,111,97,100,115,244,10,0,0,0,105,115,105, +    110,115,116,97,110,99,101,244,10,0,0,0,95,99,111,100, +    101,95,116,121,112,101,114,137,0,0,0,114,94,0,0,0, +    116,16,0,0,0,95,102,105,120,95,99,111,95,102,105,108, +    101,110,97,109,101,114,157,0,0,0,114,46,0,0,0,40, +    5,0,0,0,114,52,0,0,0,114,71,0,0,0,114,125, +    0,0,0,114,126,0,0,0,244,4,0,0,0,99,111,100, +    101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +    244,17,0,0,0,95,99,111,109,112,105,108,101,95,98,121, +    116,101,99,111,100,101,190,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, +    205,0,0,0,114,67,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,40, +    1,0,0,0,117,80,0,0,0,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,40,6,0,0,0,244,9, +    0,0,0,98,121,116,101,97,114,114,97,121,114,195,0,0, +    0,244,6,0,0,0,101,120,116,101,110,100,114,17,0,0, +    0,114,201,0,0,0,116,5,0,0,0,100,117,109,112,115, +    40,4,0,0,0,114,204,0,0,0,114,193,0,0,0,114, +    199,0,0,0,114,52,0,0,0,114,4,0,0,0,114,4, +    0,0,0,114,5,0,0,0,244,17,0,0,0,95,99,111, +    100,101,95,116,111,95,98,121,116,101,99,111,100,101,202,2, +    0,0,115,10,0,0,0,0,3,12,1,19,1,19,1,22, +    1,114,208,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,40,4,0,0,0,117,121, +    0,0,0,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,67,0,0, +    0,78,84,40,7,0,0,0,244,8,0,0,0,116,111,107, +    101,110,105,122,101,114,48,0,0,0,116,7,0,0,0,66, +    121,116,101,115,73,79,116,8,0,0,0,114,101,97,100,108, +    105,110,101,116,15,0,0,0,100,101,116,101,99,116,95,101, +    110,99,111,100,105,110,103,116,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,244,6,0,0,0,100,101,99,111,100,101, +    40,5,0,0,0,244,12,0,0,0,115,111,117,114,99,101, +    95,98,121,116,101,115,114,209,0,0,0,116,21,0,0,0, +    115,111,117,114,99,101,95,98,121,116,101,115,95,114,101,97, +    100,108,105,110,101,244,8,0,0,0,101,110,99,111,100,105, +    110,103,116,15,0,0,0,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,244,13,0,0,0,100,101,99,111,100,101, +    95,115,111,117,114,99,101,212,2,0,0,115,10,0,0,0, +    0,5,12,1,18,1,15,1,18,1,114,213,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,40,15,0,0,0,244,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,123,33,114, +    125,32,40,98,117,105,108,116,45,105,110,41,62,40,2,0, +    0,0,114,46,0,0,0,114,56,0,0,0,40,2,0,0, +    0,244,3,0,0,0,99,108,115,114,161,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,244,11,0, +    0,0,109,111,100,117,108,101,95,114,101,112,114,235,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,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,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,2,0,0,0,114,94,0,0,0, +    116,10,0,0,0,105,115,95,98,117,105,108,116,105,110,40, +    3,0,0,0,114,215,0,0,0,114,178,0,0,0,114,35, +    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +    0,0,244,11,0,0,0,102,105,110,100,95,109,111,100,117, +    108,101,239,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,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,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,4,0,0,0,114,138,0,0,0,114,99, +    0,0,0,114,94,0,0,0,116,12,0,0,0,105,110,105, +    116,95,98,117,105,108,116,105,110,40,2,0,0,0,114,215, +    0,0,0,114,178,0,0,0,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,244,11,0,0,0,108,111,97,100, +    95,109,111,100,117,108,101,250,2,0,0,115,4,0,0,0, +    0,6,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,114,4,0,0,0,40,2,0,0,0, +    114,215,0,0,0,114,178,0,0,0,114,4,0,0,0,114, +    4,0,0,0,114,5,0,0,0,244,8,0,0,0,103,101, +    116,95,99,111,100,101,3,3,0,0,115,2,0,0,0,0, +    4,117,24,0,0,0,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,114, +    4,0,0,0,40,2,0,0,0,114,215,0,0,0,114,178, +    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +    0,0,244,10,0,0,0,103,101,116,95,115,111,117,114,99, +    101,9,3,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,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, +    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,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, -    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, -    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, +    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,40,2,0, +    0,0,114,215,0,0,0,114,178,0,0,0,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,114,156,0,0,0, +    15,3,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,40,14,0,0,0,114, +    56,0,0,0,114,55,0,0,0,114,57,0,0,0,114,58, +    0,0,0,244,11,0,0,0,99,108,97,115,115,109,101,116, +    104,111,100,114,216,0,0,0,114,217,0,0,0,114,170,0, +    0,0,114,173,0,0,0,114,180,0,0,0,114,218,0,0, +    0,114,219,0,0,0,114,220,0,0,0,114,156,0,0,0, +    114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +    5,0,0,0,114,214,0,0,0,226,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,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,40,15,0,0,0,244,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,123,33, +    114,125,32,40,102,114,111,122,101,110,41,62,40,2,0,0, +    0,114,46,0,0,0,114,56,0,0,0,40,2,0,0,0, +    114,215,0,0,0,244,1,0,0,0,109,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,114,216,0,0,0,31, +    3,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,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,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,2,0,0,0, +    114,94,0,0,0,114,181,0,0,0,40,3,0,0,0,114, +    215,0,0,0,114,178,0,0,0,114,35,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,114,217,0, +    0,0,35,3,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,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,40,2,0,0,0,117,21, +    0,0,0,76,111,97,100,32,97,32,102,114,111,122,101,110, +    32,109,111,100,117,108,101,46,78,40,5,0,0,0,114,138, +    0,0,0,114,99,0,0,0,114,94,0,0,0,116,11,0, +    0,0,105,110,105,116,95,102,114,111,122,101,110,114,164,0, +    0,0,40,3,0,0,0,114,215,0,0,0,114,178,0,0, +    0,114,223,0,0,0,114,4,0,0,0,114,4,0,0,0, +    114,5,0,0,0,114,218,0,0,0,40,3,0,0,115,8, +    0,0,0,0,6,13,1,18,2,6,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,114,94,0, +    0,0,116,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,114,215,0, +    0,0,114,178,0,0,0,114,4,0,0,0,114,4,0,0, +    0,114,5,0,0,0,114,219,0,0,0,52,3,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, @@ -1614,2005 +1598,1480 @@ unsigned char _Py_M__importlib[] = {      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, +    78,114,4,0,0,0,40,2,0,0,0,114,215,0,0,0, +    114,178,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +    5,0,0,0,114,220,0,0,0,58,3,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,114,94,0,0,0,116,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,114,215,0,0,0,114,178,0,0,0, +    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +    156,0,0,0,64,3,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, +    101,114,46,105,115,95,112,97,99,107,97,103,101,40,14,0, +    0,0,114,56,0,0,0,114,55,0,0,0,114,57,0,0, +    0,114,58,0,0,0,114,221,0,0,0,114,216,0,0,0, +    114,217,0,0,0,114,170,0,0,0,114,173,0,0,0,114, +    183,0,0,0,114,218,0,0,0,114,219,0,0,0,114,220, +    0,0,0,114,156,0,0,0,114,4,0,0,0,114,4,0, +    0,0,114,4,0,0,0,114,5,0,0,0,114,222,0,0, +    0,22,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,222,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,40,12,0,0,0,244,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,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,40,1,0,0,0,78,40,5,0,0,0,244,7,0,0, +    0,95,119,105,110,114,101,103,116,7,0,0,0,79,112,101, +    110,75,101,121,116,17,0,0,0,72,75,69,89,95,67,85, +    82,82,69,78,84,95,85,83,69,82,114,40,0,0,0,116, +    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,114,215,0,0,0, +    244,3,0,0,0,107,101,121,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,244,14,0,0,0,95,111,112,101, +    110,95,114,101,103,105,115,116,114,121,84,3,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,114,178,0,0,0,116,11,0,0,0,115,121,115,95, +    118,101,114,115,105,111,110,114,121,0,0,0,114,30,0,0, +    0,40,10,0,0,0,244,11,0,0,0,68,69,66,85,71, +    95,66,85,73,76,68,244,18,0,0,0,82,69,71,73,83, +    84,82,89,95,75,69,89,95,68,69,66,85,71,244,12,0, +    0,0,82,69,71,73,83,84,82,89,95,75,69,89,114,46, +    0,0,0,114,7,0,0,0,244,7,0,0,0,118,101,114, +    115,105,111,110,114,227,0,0,0,114,225,0,0,0,116,10, +    0,0,0,81,117,101,114,121,86,97,108,117,101,114,40,0, +    0,0,40,6,0,0,0,114,215,0,0,0,114,178,0,0, +    0,116,12,0,0,0,114,101,103,105,115,116,114,121,95,107, +    101,121,114,226,0,0,0,116,4,0,0,0,104,107,101,121, +    244,8,0,0,0,102,105,108,101,112,97,116,104,114,4,0, +    0,0,114,4,0,0,0,114,5,0,0,0,244,16,0,0, +    0,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, +    121,91,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, +    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,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,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,7,0,0, +    0,114,233,0,0,0,114,3,0,0,0,114,39,0,0,0, +    114,40,0,0,0,244,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, -    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, +    97,100,101,114,115,244,8,0,0,0,101,110,100,115,119,105, +    116,104,244,5,0,0,0,116,117,112,108,101,40,6,0,0, +    0,114,215,0,0,0,114,178,0,0,0,114,35,0,0,0, +    114,232,0,0,0,114,160,0,0,0,114,112,0,0,0,114, +    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,217, +    0,0,0,106,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,40,11,0,0,0,114,56,0,0,0, +    114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,114, +    230,0,0,0,114,229,0,0,0,114,228,0,0,0,114,221, +    0,0,0,114,227,0,0,0,114,233,0,0,0,114,217,0, +    0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, +    0,114,5,0,0,0,114,224,0,0,0,71,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,224,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,40,9,0, +    0,0,244,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,114,29,0,0,0,114,101,0,0,0,114, +    67,0,0,0,114,100,0,0,0,114,76,0,0,0,40,4, +    0,0,0,114,38,0,0,0,114,163,0,0,0,114,34,0, +    0,0,114,32,0,0,0,40,5,0,0,0,114,75,0,0, +    0,114,178,0,0,0,114,116,0,0,0,116,13,0,0,0, +    102,105,108,101,110,97,109,101,95,98,97,115,101,116,9,0, +    0,0,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,156,0,0,0,126, +    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,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,40,3,0,0,0, +    117,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,164,0,0,0,78,40,8,0, +    0,0,114,171,0,0,0,114,162,0,0,0,114,166,0,0, +    0,114,59,0,0,0,114,117,0,0,0,114,164,0,0,0, +    244,10,0,0,0,95,95,99,97,99,104,101,100,95,95,114, +    109,0,0,0,40,2,0,0,0,114,75,0,0,0,114,161, +    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +    0,0,244,17,0,0,0,105,110,105,116,95,109,111,100,117, +    108,101,95,97,116,116,114,115,134,3,0,0,115,16,0,0, +    0,0,7,9,1,13,1,13,1,15,1,3,1,22,1,13, +    1,117,31,0,0,0,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,40, +    3,0,0,0,117,57,0,0,0,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,117,52,0,0,0,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,40,8,0,0, +    0,114,155,0,0,0,114,239,0,0,0,114,219,0,0,0, +    114,157,0,0,0,114,46,0,0,0,114,99,0,0,0,244, +    4,0,0,0,101,120,101,99,114,62,0,0,0,40,4,0, +    0,0,114,75,0,0,0,114,178,0,0,0,114,161,0,0, +    0,114,204,0,0,0,114,4,0,0,0,114,4,0,0,0, +    114,5,0,0,0,114,218,0,0,0,150,3,0,0,115,16, +    0,0,0,0,2,15,1,13,1,15,1,12,1,3,1,21, +    1,19,1,117,25,0,0,0,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,40,7,0,0,0,114,56,0,0,0,114,55,0,0, +    0,114,57,0,0,0,114,58,0,0,0,114,156,0,0,0, +    114,239,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,237, +    0,0,0,121,3,0,0,115,8,0,0,0,12,3,6,2, +    12,8,12,16,114,237,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,40,19,0, +    0,0,244,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,178,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,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,40,1,0,0,0,244,7,0,0,0,73,79, +    69,114,114,111,114,40,2,0,0,0,114,75,0,0,0,114, +    35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,244,10,0,0,0,112,97,116,104,95,109,116,105, +    109,101,164,3,0,0,115,2,0,0,0,0,6,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,170,1,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, -    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, -    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, -    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, +    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,193,0,0,0, +    40,1,0,0,0,114,243,0,0,0,40,2,0,0,0,114, +    75,0,0,0,114,35,0,0,0,114,4,0,0,0,114,4, +    0,0,0,114,5,0,0,0,244,10,0,0,0,112,97,116, +    104,95,115,116,97,116,115,172,3,0,0,115,2,0,0,0, +    0,11,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,244,8,0,0,0, +    115,101,116,95,100,97,116,97,40,4,0,0,0,114,75,0, +    0,0,114,126,0,0,0,116,10,0,0,0,99,97,99,104, +    101,95,112,97,116,104,114,52,0,0,0,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,244,15,0,0,0,95, +    99,97,99,104,101,95,98,121,116,101,99,111,100,101,185,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, +    4,0,0,0,100,1,0,83,40,2,0,0,0,117,150,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, +    32,32,32,32,32,32,32,32,78,114,4,0,0,0,40,3, +    0,0,0,114,75,0,0,0,114,35,0,0,0,114,52,0, +    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +    0,114,245,0,0,0,195,3,0,0,115,0,0,0,0,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,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,40,4,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,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, +    101,116,95,115,111,117,114,99,101,46,117,39,0,0,0,115, +    111,117,114,99,101,32,110,111,116,32,97,118,97,105,108,97, +    98,108,101,32,116,104,114,111,117,103,104,32,103,101,116,95, +    100,97,116,97,40,41,114,71,0,0,0,78,40,5,0,0, +    0,114,163,0,0,0,244,8,0,0,0,103,101,116,95,100, +    97,116,97,114,40,0,0,0,114,157,0,0,0,114,213,0, +    0,0,40,5,0,0,0,114,75,0,0,0,114,178,0,0, +    0,114,35,0,0,0,114,211,0,0,0,244,3,0,0,0, +    101,120,99,114,4,0,0,0,114,4,0,0,0,114,5,0, +    0,0,114,220,0,0,0,202,3,0,0,115,14,0,0,0, +    0,2,15,1,3,1,19,1,18,1,9,1,31,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,244,9,0,0,0,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,40,5,0,0,0,117,130,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,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,240,0,0,0,244,12,0,0,0,100,111,110,116, +    95,105,110,104,101,114,105,116,84,114,103,0,0,0,40,2, +    0,0,0,114,99,0,0,0,244,7,0,0,0,99,111,109, +    112,105,108,101,40,4,0,0,0,114,75,0,0,0,114,52, +    0,0,0,114,35,0,0,0,114,249,0,0,0,114,4,0, +    0,0,114,4,0,0,0,114,5,0,0,0,244,14,0,0, +    0,115,111,117,114,99,101,95,116,111,95,99,111,100,101,212, +    3,0,0,115,4,0,0,0,0,5,18,1,117,27,0,0, +    0,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,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,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,40,11,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,78, +    114,193,0,0,0,114,197,0,0,0,114,71,0,0,0,114, +    35,0,0,0,117,13,0,0,0,123,125,32,109,97,116,99, +    104,101,115,32,123,125,114,125,0,0,0,114,126,0,0,0,      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, +    32,102,114,111,109,32,123,125,117,10,0,0,0,119,114,111, +    116,101,32,123,33,114,125,40,19,0,0,0,114,163,0,0, +    0,114,117,0,0,0,114,109,0,0,0,114,244,0,0,0, +    114,242,0,0,0,114,14,0,0,0,114,247,0,0,0,114, +    40,0,0,0,114,200,0,0,0,114,157,0,0,0,114,196, +    0,0,0,114,137,0,0,0,114,205,0,0,0,114,252,0, +    0,0,114,7,0,0,0,244,19,0,0,0,100,111,110,116, +    95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114, +    208,0,0,0,114,31,0,0,0,114,246,0,0,0,40,10, +    0,0,0,114,75,0,0,0,114,178,0,0,0,114,126,0, +    0,0,114,198,0,0,0,114,125,0,0,0,244,2,0,0, +    0,115,116,114,52,0,0,0,244,10,0,0,0,98,121,116, +    101,115,95,100,97,116,97,114,211,0,0,0,116,11,0,0, +    0,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,219,0,0,0, +    220,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,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, -    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, -    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, -    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, -    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, +    101,78,114,123,0,0,0,40,10,0,0,0,114,56,0,0, +    0,114,55,0,0,0,114,57,0,0,0,114,243,0,0,0, +    114,244,0,0,0,114,246,0,0,0,114,245,0,0,0,114, +    220,0,0,0,114,252,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,241,0,0,0,162,3,0,0,115,14,0,0,0, +    12,2,12,8,12,13,12,10,12,7,12,10,18,8,114,241, +    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,40,10,0,0,0,244,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, +    114,71,0,0,0,114,35,0,0,0,40,3,0,0,0,114, +    75,0,0,0,114,178,0,0,0,114,35,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,114,76,0, +    0,0,21,4,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, -    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, -    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, -    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, +    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, +    114,148,0,0,0,114,0,1,0,0,114,218,0,0,0,40, +    2,0,0,0,114,75,0,0,0,114,178,0,0,0,40,1, +    0,0,0,114,150,0,0,0,114,4,0,0,0,114,5,0, +    0,0,114,218,0,0,0,27,4,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,114,35,0,0,0,40,2,0,0, +    0,114,75,0,0,0,114,178,0,0,0,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,114,163,0,0,0,34, +    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,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,244,1,0,0,0,114, +    78,40,3,0,0,0,114,48,0,0,0,114,49,0,0,0, +    116,4,0,0,0,114,101,97,100,40,3,0,0,0,114,75, +    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,247,0,0, +    0,39,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,114,56,0,0,0, +    114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,114, +    76,0,0,0,114,176,0,0,0,114,218,0,0,0,114,163, +    0,0,0,114,247,0,0,0,114,4,0,0,0,114,4,0, +    0,0,40,1,0,0,0,114,150,0,0,0,114,5,0,0, +    0,114,0,1,0,0,16,4,0,0,115,10,0,0,0,12, +    3,6,2,12,6,24,7,18,5,114,0,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,40,11,0,0,0,244,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,114,193,0,0,0,114,194,0,0,0,40,4,0,0,0, +    114,3,0,0,0,114,39,0,0,0,244,8,0,0,0,115, +    116,95,109,116,105,109,101,116,7,0,0,0,115,116,95,115, +    105,122,101,40,3,0,0,0,114,75,0,0,0,114,35,0, +    0,0,114,254,0,0,0,114,4,0,0,0,114,4,0,0, +    0,114,5,0,0,0,114,244,0,0,0,49,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,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,40,2,0,0,0,78,244,5,0,0,0,95, +    109,111,100,101,40,2,0,0,0,114,129,0,0,0,114,245, +    0,0,0,40,5,0,0,0,114,75,0,0,0,114,126,0, +    0,0,114,125,0,0,0,114,52,0,0,0,114,42,0,0, +    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +    114,246,0,0,0,54,4,0,0,115,4,0,0,0,0,2, +    12,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,114,4,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, +    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,114,38,0,0, +    0,114,45,0,0,0,114,165,0,0,0,114,33,0,0,0, +    114,28,0,0,0,114,3,0,0,0,116,5,0,0,0,109, +    107,100,105,114,244,15,0,0,0,70,105,108,101,69,120,105, +    115,116,115,69,114,114,111,114,114,40,0,0,0,114,137,0, +    0,0,114,54,0,0,0,40,9,0,0,0,114,75,0,0, +    0,114,35,0,0,0,114,52,0,0,0,114,4,1,0,0, +    244,6,0,0,0,112,97,114,101,110,116,114,116,0,0,0, +    114,27,0,0,0,114,23,0,0,0,114,248,0,0,0,114, +    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,245, +    0,0,0,59,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,114,56,0,0,0,114,55,0,0,0, +    114,57,0,0,0,114,58,0,0,0,114,244,0,0,0,114, +    246,0,0,0,114,245,0,0,0,114,4,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,114,2,1, +    0,0,45,4,0,0,115,8,0,0,0,12,2,6,2,12, +    5,12,5,114,2,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,40,8,0,0,0,244,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,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,40,1,0,0, +    0,78,40,4,0,0,0,114,148,0,0,0,114,239,0,0, +    0,114,164,0,0,0,114,238,0,0,0,40,2,0,0,0, +    114,75,0,0,0,114,161,0,0,0,40,1,0,0,0,114, +    150,0,0,0,114,4,0,0,0,114,5,0,0,0,114,239, +    0,0,0,92,4,0,0,115,4,0,0,0,0,1,16,1, +    117,38,0,0,0,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,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,40,4,0,0,0,78,114,71,0,0,0,114,35,0,0, +    0,114,125,0,0,0,40,4,0,0,0,114,163,0,0,0, +    114,247,0,0,0,114,200,0,0,0,114,205,0,0,0,40, +    5,0,0,0,114,75,0,0,0,114,178,0,0,0,114,35, +    0,0,0,114,52,0,0,0,114,255,0,0,0,114,4,0, +    0,0,114,4,0,0,0,114,5,0,0,0,114,219,0,0, +    0,96,4,0,0,115,8,0,0,0,0,1,15,1,15,1, +    24,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,114,4,0,0,0,40,2,0,0,0,114,75, +    0,0,0,114,178,0,0,0,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,114,220,0,0,0,102,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,105,108,101,76,111,97,100,101,114, +    46,103,101,116,95,115,111,117,114,99,101,40,7,0,0,0, +    114,56,0,0,0,114,55,0,0,0,114,57,0,0,0,114, +    58,0,0,0,114,239,0,0,0,114,219,0,0,0,114,220, +    0,0,0,114,4,0,0,0,114,4,0,0,0,40,1,0, +    0,0,114,150,0,0,0,114,5,0,0,0,114,7,1,0, +    0,88,4,0,0,115,8,0,0,0,12,2,6,2,18,4, +    12,6,114,7,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,40,15,0,0,0,244,19,0,0, +    0,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,114,71,0,0,0,114,35,0,0,0,40,3,0,0,0, +    114,75,0,0,0,114,71,0,0,0,114,35,0,0,0,114, +    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,76, +    0,0,0,119,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,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,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,114,159,0,0,0,114,67,0,0,0,78,40,10,0, +    0,0,114,138,0,0,0,114,99,0,0,0,114,94,0,0, +    0,116,12,0,0,0,108,111,97,100,95,100,121,110,97,109, +    105,99,114,35,0,0,0,114,137,0,0,0,114,156,0,0, +    0,114,59,0,0,0,114,38,0,0,0,114,159,0,0,0, +    40,3,0,0,0,114,75,0,0,0,114,178,0,0,0,114, +    161,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,114,218,0,0,0,123,4,0,0,115,14,0,0, +    0,0,5,13,1,9,1,15,1,16,1,31,1,28,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,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,40,2,0,0,0,114,76,0,0,0, +    78,114,4,0,0,0,40,2,0,0,0,114,22,0,0,0, +    244,6,0,0,0,115,117,102,102,105,120,40,1,0,0,0, +    244,9,0,0,0,102,105,108,101,95,110,97,109,101,114,4, +    0,0,0,114,5,0,0,0,114,143,0,0,0,139,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,114,38,0,0,0,114,35,0,0,0,114,144,0, +    0,0,244,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,114,75, +    0,0,0,114,178,0,0,0,114,4,0,0,0,40,1,0, +    0,0,114,10,1,0,0,114,5,0,0,0,114,156,0,0, +    0,136,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,114,4,0,0,0, +    40,2,0,0,0,114,75,0,0,0,114,178,0,0,0,114, +    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,219, +    0,0,0,142,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,114,4,0, +    0,0,40,2,0,0,0,114,75,0,0,0,114,178,0,0, +    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +    114,220,0,0,0,146,4,0,0,115,2,0,0,0,0,2, +    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,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,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,114,35,0, +    0,0,40,2,0,0,0,114,75,0,0,0,114,178,0,0, +    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +    114,163,0,0,0,150,4,0,0,115,2,0,0,0,0,3, +    117,32,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,102,105,108, +    101,110,97,109,101,78,40,13,0,0,0,114,56,0,0,0, +    114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,114, +    76,0,0,0,114,176,0,0,0,114,170,0,0,0,114,173, +    0,0,0,114,218,0,0,0,114,156,0,0,0,114,219,0, +    0,0,114,220,0,0,0,114,163,0,0,0,114,4,0,0, +    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +    114,8,1,0,0,111,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,8,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,40,21,0,0,0,244,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,114,139,0, +    0,0,244,5,0,0,0,95,112,97,116,104,114,236,0,0, +    0,244,16,0,0,0,95,103,101,116,95,112,97,114,101,110, +    116,95,112,97,116,104,244,17,0,0,0,95,108,97,115,116, +    95,112,97,114,101,110,116,95,112,97,116,104,244,12,0,0, +    0,95,112,97,116,104,95,102,105,110,100,101,114,40,4,0, +    0,0,114,75,0,0,0,114,71,0,0,0,114,35,0,0, +    0,244,11,0,0,0,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,76,0,0,0,163,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,114,101,0,0,0,114,30, +    0,0,0,114,7,0,0,0,114,35,0,0,0,114,159,0, +    0,0,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,114,139,0, +    0,0,114,32,0,0,0,40,4,0,0,0,114,75,0,0, +    0,114,6,1,0,0,244,3,0,0,0,100,111,116,114,80, +    0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +    0,0,244,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,169,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,114,19,1,0,0,114,61,0,0,0,114, +    7,0,0,0,114,140,0,0,0,40,3,0,0,0,114,75, +    0,0,0,116,18,0,0,0,112,97,114,101,110,116,95,109, +    111,100,117,108,101,95,110,97,109,101,116,14,0,0,0,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,14,1,0, +    0,179,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,5,0,110,0,0, +    124,1,0,124,0,0,95,2,0,110,0,0,124,0,0,106, +    5,0,83,40,1,0,0,0,78,40,6,0,0,0,114,236, +    0,0,0,114,14,1,0,0,114,15,1,0,0,114,16,1, +    0,0,114,139,0,0,0,114,13,1,0,0,40,4,0,0, +    0,114,75,0,0,0,116,11,0,0,0,112,97,114,101,110, +    116,95,112,97,116,104,114,160,0,0,0,116,8,0,0,0, +    110,101,119,95,112,97,116,104,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,244,12,0,0,0,95,114,101,99, +    97,108,99,117,108,97,116,101,183,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,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,244,4,0,0,0,105,116,101,114,114,20,1, +    0,0,40,1,0,0,0,114,75,0,0,0,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,244,8,0,0,0, +    95,95,105,116,101,114,95,95,195,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,114,31,0,0,0,114,20,1,0,0,40,1, +    0,0,0,114,75,0,0,0,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,244,7,0,0,0,95,95,108,101, +    110,95,95,198,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,114,46,0,0,0,114,13,1,0, +    0,40,1,0,0,0,114,75,0,0,0,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,114,87,0,0,0,201, +    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,114,20,1,0,0, +    40,2,0,0,0,114,75,0,0,0,244,4,0,0,0,105, +    116,101,109,114,4,0,0,0,114,4,0,0,0,114,5,0, +    0,0,244,12,0,0,0,95,95,99,111,110,116,97,105,110, +    115,95,95,204,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,      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,78,40,2,0,0,0,114,13,1,0,0,114,165,0,0, +    0,40,2,0,0,0,114,75,0,0,0,114,24,1,0,0, +    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +    165,0,0,0,207,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,114, +    56,0,0,0,114,55,0,0,0,114,57,0,0,0,114,58, +    0,0,0,114,76,0,0,0,114,19,1,0,0,114,14,1, +    0,0,114,20,1,0,0,114,22,1,0,0,114,23,1,0, +    0,114,87,0,0,0,114,25,1,0,0,114,165,0,0,0, +    114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +    5,0,0,0,114,12,1,0,0,156,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,12,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,40, +    16,0,0,0,244,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,114,12,1,0,0,114,13,1,0,0, +    40,4,0,0,0,114,75,0,0,0,114,71,0,0,0,114, +    35,0,0,0,114,17,1,0,0,114,4,0,0,0,114,4, +    0,0,0,114,5,0,0,0,114,76,0,0,0,212,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, -    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, +    101,32,123,33,114,125,32,40,110,97,109,101,115,112,97,99, +    101,41,62,40,2,0,0,0,114,46,0,0,0,114,56,0, +    0,0,40,2,0,0,0,114,215,0,0,0,114,161,0,0, +    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +    114,216,0,0,0,215,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,1,0,0, +    0,67,0,0,0,115,4,0,0,0,100,1,0,83,40,2, +    0,0,0,78,84,114,4,0,0,0,40,2,0,0,0,114, +    75,0,0,0,114,178,0,0,0,114,4,0,0,0,114,4, +    0,0,0,114,5,0,0,0,114,156,0,0,0,219,4,0, +    0,115,2,0,0,0,0,1,117,26,0,0,0,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,40,2,0,0,0,78,114,30,0,0,0, +    114,4,0,0,0,40,2,0,0,0,114,75,0,0,0,114, +    178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +    0,0,0,114,220,0,0,0,222,4,0,0,115,2,0,0, +    0,0,1,117,26,0,0,0,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,40,6,0,0,0,78,114,30,0,0,0,117,8,0, +    0,0,60,115,116,114,105,110,103,62,114,240,0,0,0,114, +    250,0,0,0,84,40,1,0,0,0,114,251,0,0,0,40, +    2,0,0,0,114,75,0,0,0,114,178,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,114,219,0, +    0,0,225,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,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,40,1,0, +    0,0,78,40,3,0,0,0,114,171,0,0,0,114,56,0, +    0,0,114,158,0,0,0,40,2,0,0,0,114,75,0,0, +    0,114,161,0,0,0,114,4,0,0,0,114,4,0,0,0, +    114,5,0,0,0,114,239,0,0,0,228,4,0,0,115,4, +    0,0,0,0,1,9,1,117,33,0,0,0,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,40,3,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,78,40,5,0,0,0, +    114,137,0,0,0,114,13,1,0,0,114,155,0,0,0,114, +    239,0,0,0,114,159,0,0,0,40,3,0,0,0,114,75, +    0,0,0,114,178,0,0,0,114,161,0,0,0,114,4,0, +    0,0,114,4,0,0,0,114,5,0,0,0,114,218,0,0, +    0,232,4,0,0,115,10,0,0,0,0,2,16,1,15,1, +    13,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,11,0,0,0,114,56,0,0,0,114, +    55,0,0,0,114,57,0,0,0,114,76,0,0,0,114,221, +    0,0,0,114,216,0,0,0,114,156,0,0,0,114,220,0, +    0,0,114,219,0,0,0,114,239,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,26,1,0,0,211,4,0,0,115,14, +    0,0,0,12,1,12,3,18,4,12,3,12,3,12,3,12, +    4,114,26,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,40,13,0,0,0,244,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,244,17,0,0,0,105,110,118,97,108,105, +    100,97,116,101,95,99,97,99,104,101,115,78,40,5,0,0, +    0,114,7,0,0,0,244,19,0,0,0,112,97,116,104,95, +    105,109,112,111,114,116,101,114,95,99,97,99,104,101,244,6, +    0,0,0,118,97,108,117,101,115,114,59,0,0,0,114,28, +    1,0,0,40,2,0,0,0,114,215,0,0,0,244,6,0, +    0,0,102,105,110,100,101,114,114,4,0,0,0,114,4,0, +    0,0,114,5,0,0,0,114,28,1,0,0,247,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,6,0,0, +    0,114,7,0,0,0,244,10,0,0,0,112,97,116,104,95, +    104,111,111,107,115,114,185,0,0,0,114,186,0,0,0,114, +    187,0,0,0,114,157,0,0,0,40,3,0,0,0,114,215, +    0,0,0,114,35,0,0,0,116,4,0,0,0,104,111,111, +    107,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +    244,11,0,0,0,95,112,97,116,104,95,104,111,111,107,115, +    255,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,114,30,0,0,0,114,101,0,0,0,40, +    4,0,0,0,114,7,0,0,0,114,29,1,0,0,114,91, +    0,0,0,114,33,1,0,0,40,3,0,0,0,114,215,0, +    0,0,114,35,0,0,0,114,31,1,0,0,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,244,20,0,0,0, +    95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, +    97,99,104,101,16,5,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,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,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,78,114,184,0,0,0,40,8,0,0,0,114,202,0,0, +    0,244,3,0,0,0,115,116,114,244,5,0,0,0,98,121, +    116,101,115,114,34,1,0,0,114,59,0,0,0,114,184,0, +    0,0,114,217,0,0,0,114,207,0,0,0,40,8,0,0, +    0,114,215,0,0,0,114,178,0,0,0,114,35,0,0,0, +    244,14,0,0,0,110,97,109,101,115,112,97,99,101,95,112, +    97,116,104,116,5,0,0,0,101,110,116,114,121,114,31,1, +    0,0,114,160,0,0,0,114,188,0,0,0,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,244,11,0,0,0, +    95,103,101,116,95,108,111,97,100,101,114,33,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,      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, -    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, -    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, -    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, -    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, +    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,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,4,0,0,0,114,7,0,0,0,114,35, +    0,0,0,114,38,1,0,0,114,26,1,0,0,40,5,0, +    0,0,114,215,0,0,0,114,178,0,0,0,114,35,0,0, +    0,114,160,0,0,0,114,37,1,0,0,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,114,217,0,0,0,60, +    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,40,10,0,0,0,114,56,0,0,0,114,55,0, +    0,0,114,57,0,0,0,114,58,0,0,0,114,221,0,0, +    0,114,28,1,0,0,114,33,1,0,0,114,34,1,0,0, +    114,38,1,0,0,114,217,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,243,4,0,0,115,14,0,0,0,12,2,6,2, +    18,8,18,17,18,17,18,27,3,1,114,27,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,244,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,114,4,0,0,0, +    40,2,0,0,0,114,22,0,0,0,114,9,1,0,0,40, +    1,0,0,0,114,160,0,0,0,114,4,0,0,0,114,5, +    0,0,0,114,143,0,0,0,93,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,114,101, +    0,0,0,114,29,0,0,0,78,114,123,0,0,0,40,7, +    0,0,0,114,207,0,0,0,244,8,0,0,0,95,108,111, +    97,100,101,114,115,114,35,0,0,0,244,11,0,0,0,95, +    112,97,116,104,95,109,116,105,109,101,244,3,0,0,0,115, +    101,116,244,11,0,0,0,95,112,97,116,104,95,99,97,99, +    104,101,244,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,114, +    75,0,0,0,114,35,0,0,0,244,14,0,0,0,108,111, +    97,100,101,114,95,100,101,116,97,105,108,115,116,7,0,0, +    0,108,111,97,100,101,114,115,114,112,0,0,0,114,4,0, +    0,0,40,1,0,0,0,114,160,0,0,0,114,5,0,0, +    0,114,76,0,0,0,87,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,114,29,0,0,0,78,114,123,0, +    0,0,40,1,0,0,0,114,41,1,0,0,40,1,0,0, +    0,114,75,0,0,0,114,4,0,0,0,114,4,0,0,0, +    114,5,0,0,0,114,28,1,0,0,101,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,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,25,0,116,1,0,106, +    2,0,124,0,0,106,3,0,131,1,0,106,4,0,125,4, +    0,87,110,24,0,4,116,5,0,107,10,0,114,76,0,1, +    1,1,100,11,0,125,4,0,89,110,1,0,88,124,4,0, +    124,0,0,106,6,0,107,3,0,114,114,0,124,0,0,106, +    7,0,131,0,0,1,124,4,0,124,0,0,95,6,0,110, +    0,0,116,8,0,131,0,0,114,147,0,124,0,0,106,9, +    0,125,5,0,124,3,0,106,10,0,131,0,0,125,6,0, +    110,15,0,124,0,0,106,11,0,125,5,0,124,3,0,125, +    6,0,124,6,0,124,5,0,107,6,0,114,45,1,116,12, +    0,124,0,0,106,3,0,124,3,0,131,2,0,125,7,0, +    116,13,0,124,7,0,131,1,0,114,45,1,120,91,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,12,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,100,6,0,125,2,0,113,45,1,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,12,0,124,0,0,106,3,0,124,3,0,124, +    8,0,23,131,2,0,125,11,0,116,16,0,100,7,0,106, +    17,0,124,11,0,131,1,0,100,8,0,100,3,0,131,1, +    1,1,124,6,0,124,8,0,23,124,5,0,107,6,0,114, +    55,1,116,15,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,16, +    0,100,9,0,106,17,0,124,7,0,131,1,0,131,1,0, +    1,100,10,0,124,7,0,103,1,0,102,2,0,83,100,10, +    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,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115, +    112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,44, +    32,111,114,32,116,104,101,32,110,97,109,101,115,112,97,99, +    101,10,32,32,32,32,32,32,32,32,112,97,99,107,97,103, +    101,32,112,111,114,116,105,111,110,115,46,32,82,101,116,117, +    114,110,115,32,40,108,111,97,100,101,114,44,32,108,105,115, +    116,45,111,102,45,112,111,114,116,105,111,110,115,41,46,70, +    114,101,0,0,0,114,100,0,0,0,114,29,0,0,0,114, +    76,0,0,0,84,117,9,0,0,0,116,114,121,105,110,103, +    32,123,125,114,130,0,0,0,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,78,114,123,0,0,0,40,18,0,0, +    0,114,32,0,0,0,114,3,0,0,0,114,39,0,0,0, +    114,35,0,0,0,114,3,1,0,0,114,40,0,0,0,114, +    41,1,0,0,244,11,0,0,0,95,102,105,108,108,95,99, +    97,99,104,101,114,6,0,0,0,114,44,1,0,0,114,124, +    0,0,0,114,43,1,0,0,114,28,0,0,0,114,45,0, +    0,0,114,40,1,0,0,114,44,0,0,0,114,137,0,0, +    0,114,46,0,0,0,40,12,0,0,0,114,75,0,0,0, +    114,178,0,0,0,116,12,0,0,0,105,115,95,110,97,109, +    101,115,112,97,99,101,116,11,0,0,0,116,97,105,108,95, +    109,111,100,117,108,101,114,193,0,0,0,116,5,0,0,0, +    99,97,99,104,101,116,12,0,0,0,99,97,99,104,101,95, +    109,111,100,117,108,101,116,9,0,0,0,98,97,115,101,95, +    112,97,116,104,114,9,1,0,0,114,160,0,0,0,116,13, +    0,0,0,105,110,105,116,95,102,105,108,101,110,97,109,101, +    116,9,0,0,0,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,184,0, +    0,0,107,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,2,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,254,0,100,4,0,100,5,0,132,0,0, +    124,2,0,68,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,114,0,0,0,0,114,101,0,0,0,117,5,0,0, +    0,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,40,1,0,0,0,114,124,0,0,0,40,2,0,0,0, +    114,22,0,0,0,116,2,0,0,0,102,110,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,245,9,0,0,0, +    60,115,101,116,99,111,109,112,62,180,5,0,0,115,2,0, +    0,0,9,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,115,101,116,99,111,109, +    112,62,78,40,17,0,0,0,114,35,0,0,0,114,3,0, +    0,0,116,7,0,0,0,108,105,115,116,100,105,114,244,17, +    0,0,0,70,105,108,101,78,111,116,70,111,117,110,100,69, +    114,114,111,114,244,15,0,0,0,80,101,114,109,105,115,115, +    105,111,110,69,114,114,111,114,244,18,0,0,0,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,42, +    1,0,0,114,43,1,0,0,114,106,0,0,0,114,46,0, +    0,0,114,124,0,0,0,244,3,0,0,0,97,100,100,114, +    10,0,0,0,114,44,1,0,0,40,9,0,0,0,114,75, +    0,0,0,114,35,0,0,0,116,8,0,0,0,99,111,110, +    116,101,110,116,115,116,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,114, +    24,1,0,0,114,71,0,0,0,114,18,1,0,0,114,9, +    1,0,0,116,8,0,0,0,110,101,119,95,110,97,109,101, +    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +    46,1,0,0,151,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,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,114,35,0, +    0,0,40,2,0,0,0,114,45,0,0,0,114,157,0,0, +    0,40,1,0,0,0,114,35,0,0,0,40,2,0,0,0, +    114,215,0,0,0,114,45,1,0,0,114,4,0,0,0,114, +    5,0,0,0,244,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,192,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,114,4,0,0,0, +    40,3,0,0,0,114,215,0,0,0,114,45,1,0,0,114, +    52,1,0,0,114,4,0,0,0,40,2,0,0,0,114,215, +    0,0,0,114,45,1,0,0,114,5,0,0,0,244,9,0, +    0,0,112,97,116,104,95,104,111,111,107,182,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,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,16,0,0,0,70,105,108,101,70,105,110,100,101,114, +    40,123,33,114,125,41,40,2,0,0,0,114,46,0,0,0, +    114,35,0,0,0,40,1,0,0,0,114,75,0,0,0,114, +    4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,87, +    0,0,0,200,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, +    114,101,112,114,95,95,78,40,13,0,0,0,114,56,0,0, +    0,114,55,0,0,0,114,57,0,0,0,114,58,0,0,0, +    114,76,0,0,0,114,28,1,0,0,114,190,0,0,0,114, +    217,0,0,0,114,184,0,0,0,114,46,1,0,0,114,221, +    0,0,0,114,53,1,0,0,114,87,0,0,0,114,4,0, +    0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +    0,114,39,1,0,0,78,5,0,0,115,16,0,0,0,12, +    7,6,2,12,14,12,4,6,2,12,44,12,31,18,18,114, +    39,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,40,7,0,0, -    0,117,18,0,0,0,95,73,109,112,111,114,116,76,111,99, +    0,244,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,      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, @@ -3621,810 +3080,584 @@ unsigned char _Py_M__importlib[] = {      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, -    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, -    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, +    0,114,94,0,0,0,244,12,0,0,0,97,99,113,117,105, +    114,101,95,108,111,99,107,40,1,0,0,0,114,75,0,0, +    0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +    114,142,0,0,0,210,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,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,114,94,0,0,0,114,95,0,0,0,40, +    4,0,0,0,114,75,0,0,0,116,8,0,0,0,101,120, +    99,95,116,121,112,101,116,9,0,0,0,101,120,99,95,118, +    97,108,117,101,116,13,0,0,0,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,145,0,0,0,214,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,114,56,0,0,0, +    114,55,0,0,0,114,57,0,0,0,114,58,0,0,0,114, +    142,0,0,0,114,145,0,0,0,114,4,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,114,54,1, +    0,0,206,5,0,0,115,6,0,0,0,12,2,6,2,12, +    4,114,54,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,40,6,0,0,0, +    117,50,0,0,0,82,101,115,111,108,118,101,32,97,32,114, +    101,108,97,116,105,118,101,32,109,111,100,117,108,101,32,110, +    97,109,101,32,116,111,32,97,110,32,97,98,115,111,108,117, +    116,101,32,111,110,101,46,114,101,0,0,0,114,29,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,114,67,0,0,0,117,5,0, +    0,0,123,125,46,123,125,40,4,0,0,0,114,34,0,0, +    0,114,31,0,0,0,114,118,0,0,0,114,46,0,0,0, +    40,5,0,0,0,114,71,0,0,0,244,7,0,0,0,112, +    97,99,107,97,103,101,244,5,0,0,0,108,101,118,101,108, +    116,4,0,0,0,98,105,116,115,116,4,0,0,0,98,97, +    115,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +    0,244,13,0,0,0,95,114,101,115,111,108,118,101,95,110, +    97,109,101,219,5,0,0,115,10,0,0,0,0,2,22,1, +    18,1,15,1,10,1,114,58,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,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,9,0,0, +    0,114,7,0,0,0,244,9,0,0,0,109,101,116,97,95, +    112,97,116,104,114,185,0,0,0,114,186,0,0,0,114,187, +    0,0,0,114,54,1,0,0,114,217,0,0,0,114,140,0, +    0,0,114,171,0,0,0,40,4,0,0,0,114,71,0,0, +    0,114,35,0,0,0,114,31,1,0,0,114,160,0,0,0, +    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244, +    12,0,0,0,95,102,105,110,100,95,109,111,100,117,108,101, +    228,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,60,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,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,114,67,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,114,202,0,0,0,114,35,1,0,0, +    244,9,0,0,0,84,121,112,101,69,114,114,111,114,114,46, +    0,0,0,114,152,0,0,0,114,118,0,0,0,114,7,0, +    0,0,114,140,0,0,0,244,11,0,0,0,83,121,115,116, +    101,109,69,114,114,111,114,40,4,0,0,0,114,71,0,0, +    0,114,56,1,0,0,114,57,1,0,0,114,189,0,0,0, +    114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244, +    13,0,0,0,95,115,97,110,105,116,121,95,99,104,101,99, +    107,245,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,63,1,0,0,117,16,0,0,0,78,111,32,109, +    111,100,117,108,101,32,110,97,109,101,100,32,117,4,0,0, +    0,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,40,10,0,0,0,78,114,101,0,0,0, +    114,67,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,114, +    71,0,0,0,117,18,0,0,0,105,109,112,111,114,116,32, +    123,33,114,125,32,35,32,123,33,114,125,114,100,0,0,0, +    114,158,0,0,0,114,159,0,0,0,114,171,0,0,0,40, +    18,0,0,0,114,32,0,0,0,114,7,0,0,0,114,140, +    0,0,0,114,99,0,0,0,114,159,0,0,0,114,154,0, +    0,0,244,8,0,0,0,95,69,82,82,95,77,83,71,114, +    46,0,0,0,114,157,0,0,0,114,60,1,0,0,114,218, +    0,0,0,114,137,0,0,0,114,60,0,0,0,114,61,0, +    0,0,114,56,0,0,0,114,158,0,0,0,114,59,0,0, +    0,114,171,0,0,0,40,8,0,0,0,114,71,0,0,0, +    244,7,0,0,0,105,109,112,111,114,116,95,114,35,0,0, +    0,114,6,1,0,0,116,13,0,0,0,112,97,114,101,110, +    116,95,109,111,100,117,108,101,114,189,0,0,0,114,160,0, +    0,0,114,161,0,0,0,114,4,0,0,0,114,4,0,0, +    0,114,5,0,0,0,244,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,9,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,66,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,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,114,93,0,0,0,114,94,0,0,0,114,95,0, +    0,0,114,83,0,0,0,114,66,1,0,0,114,84,0,0, +    0,40,3,0,0,0,114,71,0,0,0,114,65,1,0,0, +    114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +    5,0,0,0,244,14,0,0,0,95,102,105,110,100,95,97, +    110,100,95,108,111,97,100,55,6,0,0,115,14,0,0,0, +    0,2,3,1,16,2,11,1,10,1,3,1,17,2,114,67, +    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,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,114,67,0,0,0,78,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,114,71,0,0,0,40,12,0, +    0,0,114,63,1,0,0,114,58,1,0,0,114,94,0,0, +    0,114,55,1,0,0,114,7,0,0,0,114,140,0,0,0, +    114,67,1,0,0,244,11,0,0,0,95,103,99,100,95,105, +    109,112,111,114,116,114,95,0,0,0,114,46,0,0,0,114, +    157,0,0,0,114,96,0,0,0,40,5,0,0,0,114,71, +    0,0,0,114,56,1,0,0,114,57,1,0,0,114,161,0, +    0,0,114,136,0,0,0,114,4,0,0,0,114,4,0,0, +    0,114,5,0,0,0,114,68,1,0,0,68,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,68, +    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,40,6, +    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,114,159,0,0,0,245,1,0,0,0, +    42,244,7,0,0,0,95,95,97,108,108,95,95,117,5,0, +    0,0,123,125,46,123,125,78,40,13,0,0,0,114,59,0, +    0,0,244,4,0,0,0,108,105,115,116,244,6,0,0,0, +    114,101,109,111,118,101,114,207,0,0,0,114,70,1,0,0, +    114,46,0,0,0,114,56,0,0,0,114,99,0,0,0,114, +    157,0,0,0,114,35,1,0,0,114,9,0,0,0,244,15, +    0,0,0,95,69,82,82,95,77,83,71,95,80,82,69,70, +    73,88,114,71,0,0,0,40,6,0,0,0,114,161,0,0, +    0,244,8,0,0,0,102,114,111,109,108,105,115,116,114,65, +    1,0,0,114,16,0,0,0,116,9,0,0,0,102,114,111, +    109,95,110,97,109,101,114,248,0,0,0,114,4,0,0,0, +    114,4,0,0,0,114,5,0,0,0,244,16,0,0,0,95, +    104,97,110,100,108,101,95,102,114,111,109,108,105,115,116,92, +    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,75,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,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,114,158,0,0,0,78,114,56, +    0,0,0,114,159,0,0,0,114,101,0,0,0,114,67,0, +    0,0,40,2,0,0,0,114,79,0,0,0,114,32,0,0, +    0,40,2,0,0,0,244,7,0,0,0,103,108,111,98,97, +    108,115,114,56,1,0,0,114,4,0,0,0,114,4,0,0, +    0,114,5,0,0,0,244,17,0,0,0,95,99,97,108,99, +    95,95,95,112,97,99,107,97,103,101,95,95,124,6,0,0, +    115,12,0,0,0,0,7,15,1,12,1,10,1,12,1,25, +    1,114,77,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,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,114,8,1,0,0,114,94,0,0,0,244,      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, -    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, -    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, -    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, -    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, +    102,102,105,120,101,115,114,2,1,0,0,114,119,0,0,0, +    114,7,1,0,0,244,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, +    116,10,0,0,0,101,120,116,101,110,115,105,111,110,115,116, +    6,0,0,0,115,111,117,114,99,101,116,8,0,0,0,98, +    121,116,101,99,111,100,101,114,4,0,0,0,114,4,0,0, +    0,114,5,0,0,0,114,234,0,0,0,139,6,0,0,115, +    8,0,0,0,0,5,18,1,12,1,12,1,114,234,0,0, +    0,99,5,0,0,0,0,0,0,0,9,0,0,0,5,0, +    0,0,67,0,0,0,115,227,0,0,0,124,4,0,100,1, +    0,107,2,0,114,27,0,116,0,0,124,0,0,131,1,0, +    125,5,0,110,54,0,124,1,0,100,2,0,107,9,0,114, +    45,0,124,1,0,110,3,0,105,0,0,125,6,0,116,1, +    0,124,6,0,131,1,0,125,7,0,116,0,0,124,0,0, +    124,7,0,124,4,0,131,3,0,125,5,0,124,3,0,115, +    207,0,124,4,0,100,1,0,107,2,0,114,122,0,116,0, +    0,124,0,0,106,2,0,100,3,0,131,1,0,100,1,0, +    25,131,1,0,83,124,0,0,115,132,0,124,5,0,83,116, +    3,0,124,0,0,131,1,0,116,3,0,124,0,0,106,2, +    0,100,3,0,131,1,0,100,1,0,25,131,1,0,24,125, +    8,0,116,4,0,106,5,0,124,5,0,106,6,0,100,2, +    0,116,3,0,124,5,0,106,6,0,131,1,0,124,8,0, +    24,133,2,0,25,25,83,110,16,0,116,7,0,124,5,0, +    124,3,0,116,0,0,131,3,0,83,100,2,0,83,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,114,67, +    0,0,0,78,114,101,0,0,0,40,8,0,0,0,114,68, +    1,0,0,114,77,1,0,0,114,106,0,0,0,114,31,0, +    0,0,114,7,0,0,0,114,140,0,0,0,114,56,0,0, +    0,114,75,1,0,0,40,9,0,0,0,114,71,0,0,0, +    114,76,1,0,0,244,6,0,0,0,108,111,99,97,108,115, +    114,74,1,0,0,114,57,1,0,0,114,161,0,0,0,116, +    8,0,0,0,103,108,111,98,97,108,115,95,114,56,1,0, +    0,116,7,0,0,0,99,117,116,95,111,102,102,114,4,0, +    0,0,114,4,0,0,0,114,5,0,0,0,244,10,0,0, +    0,95,95,105,109,112,111,114,116,95,95,150,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,81, +    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,40,28,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,114,171, +    0,0,0,78,114,48,0,0,0,114,185,0,0,0,244,8, +    0,0,0,98,117,105,108,116,105,110,115,114,201,0,0,0, +    116,5,0,0,0,112,111,115,105,120,245,1,0,0,0,47, +    244,2,0,0,0,110,116,245,1,0,0,0,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,40,2,0,0,0,114,29,0, +    0,0,78,40,1,0,0,0,114,31,0,0,0,40,2,0, +    0,0,114,22,0,0,0,114,115,0,0,0,114,4,0,0, +    0,114,4,0,0,0,114,5,0,0,0,114,143,0,0,0, +    223,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,114,67,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,114,68,0,0,0,114,92,0,0,0,116,6,0,0,0, +    119,105,110,114,101,103,114,225,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,117,4,0,0,0,46,112,121,119,117,6,0, +    0,0,95,100,46,112,121,100,84,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,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, +    115,117,7,0,0,0,109,97,114,115,104,97,108,40,32,0, +    0,0,114,94,0,0,0,114,7,0,0,0,114,102,0,0, +    0,114,103,0,0,0,114,105,0,0,0,114,79,1,0,0, +    114,104,0,0,0,114,152,0,0,0,114,140,0,0,0,244, +    5,0,0,0,105,116,101,109,115,114,202,0,0,0,114,61, +    0,0,0,114,177,0,0,0,114,214,0,0,0,114,171,0, +    0,0,114,181,0,0,0,114,222,0,0,0,114,56,0,0, +    0,114,218,0,0,0,114,60,0,0,0,244,3,0,0,0, +    97,108,108,114,86,0,0,0,114,157,0,0,0,114,26,0, +    0,0,114,11,0,0,0,114,11,1,0,0,114,207,0,0, +    0,114,78,1,0,0,114,119,0,0,0,114,165,0,0,0, +    114,224,0,0,0,114,228,0,0,0,40,16,0,0,0,244, +    10,0,0,0,115,121,115,95,109,111,100,117,108,101,244,11, +    0,0,0,95,105,109,112,95,109,111,100,117,108,101,116,11, +    0,0,0,109,111,100,117,108,101,95,116,121,112,101,114,71, +    0,0,0,114,161,0,0,0,116,11,0,0,0,115,101,108, +    102,95,109,111,100,117,108,101,116,12,0,0,0,98,117,105, +    108,116,105,110,95,110,97,109,101,116,14,0,0,0,98,117, +    105,108,116,105,110,95,109,111,100,117,108,101,116,10,0,0, +    0,111,115,95,100,101,116,97,105,108,115,116,10,0,0,0, +    98,117,105,108,116,105,110,95,111,115,114,21,0,0,0,114, +    25,0,0,0,116,9,0,0,0,111,115,95,109,111,100,117, +    108,101,116,13,0,0,0,116,104,114,101,97,100,95,109,111, +    100,117,108,101,116,14,0,0,0,119,101,97,107,114,101,102, +    95,109,111,100,117,108,101,116,13,0,0,0,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,244,6,0,0,0,95,115,101, +    116,117,112,186,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,90,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,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,114,84,1,0,0,78,40,15,0,0,0, +    114,90,1,0,0,114,234,0,0,0,114,7,0,0,0,114, +    32,1,0,0,114,207,0,0,0,114,39,1,0,0,114,53, +    1,0,0,114,59,1,0,0,114,165,0,0,0,114,214,0, +    0,0,114,222,0,0,0,114,3,0,0,0,114,56,0,0, +    0,114,224,0,0,0,114,27,1,0,0,40,3,0,0,0, +    114,88,1,0,0,114,89,1,0,0,116,17,0,0,0,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,244, +    8,0,0,0,95,105,110,115,116,97,108,108,6,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,91,1,0,0,40,3,0,0,0,117, +    3,0,0,0,119,105,110,114,1,0,0,0,114,2,0,0, +    0,40,82,0,0,0,114,58,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,45,0,0,0,114,54,0,0,0,114,64,0, +    0,0,114,152,0,0,0,244,8,0,0,0,95,95,99,111, +    100,101,95,95,114,203,0,0,0,114,89,0,0,0,114,78, +    0,0,0,114,85,0,0,0,114,65,0,0,0,114,66,0, +    0,0,114,88,0,0,0,114,93,0,0,0,114,96,0,0, +    0,114,99,0,0,0,114,15,0,0,0,114,195,0,0,0, +    114,14,0,0,0,114,18,0,0,0,116,17,0,0,0,95, +    82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82, +    114,110,0,0,0,114,119,0,0,0,114,104,0,0,0,114, +    105,0,0,0,114,117,0,0,0,114,120,0,0,0,114,127, +    0,0,0,114,129,0,0,0,114,137,0,0,0,114,138,0, +    0,0,114,146,0,0,0,114,155,0,0,0,114,162,0,0, +    0,114,166,0,0,0,114,170,0,0,0,114,173,0,0,0, +    114,176,0,0,0,114,180,0,0,0,114,183,0,0,0,114, +    190,0,0,0,114,200,0,0,0,114,205,0,0,0,114,208, +    0,0,0,114,213,0,0,0,114,214,0,0,0,114,222,0, +    0,0,114,224,0,0,0,114,237,0,0,0,114,241,0,0, +    0,114,0,1,0,0,114,2,1,0,0,114,7,1,0,0, +    114,11,1,0,0,114,8,1,0,0,114,12,1,0,0,114, +    26,1,0,0,114,27,1,0,0,114,39,1,0,0,114,54, +    1,0,0,114,58,1,0,0,114,60,1,0,0,114,63,1, +    0,0,114,73,1,0,0,114,64,1,0,0,114,66,1,0, +    0,114,67,1,0,0,114,68,1,0,0,114,75,1,0,0, +    114,77,1,0,0,114,234,0,0,0,114,81,1,0,0,114, +    90,1,0,0,114,91,1,0,0,114,4,0,0,0,114,4, +    0,0,0,114,4,0,0,0,114,5,0,0,0,244,8,0, +    0,0,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,111,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,128,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..727605a 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,7 @@  #define TYPE_UNKNOWN            '?'  #define TYPE_SET                '<'  #define TYPE_FROZENSET          '>' +#define FLAG_REF                '\x80' /* with a type, add obj to index */  #define WFERR_OK 0  #define WFERR_UNMARSHALLABLE 1 @@ -65,6 +66,7 @@ typedef struct {      PyObject *current_filename;      char *ptr;      char *end; +    PyObject *refs; /* dict on marshal, list on unmarshal */      int version;  } WFILE; @@ -158,13 +160,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 +207,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 +289,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 +330,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 +341,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 +355,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 +366,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,7 +390,7 @@ 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)) { @@ -330,12 +401,15 @@ w_object(PyObject *v, WFILE *p)              p->error = WFERR_UNMARSHALLABLE;              return;          } -        w_byte(TYPE_UNICODE, p); +        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);      }      else if (PyTuple_CheckExact(v)) { -        w_byte(TYPE_TUPLE, p); +        W_TYPE(TYPE_TUPLE, p);          n = PyTuple_Size(v);          W_SIZE(n, p);          for (i = 0; i < n; i++) { @@ -343,7 +417,7 @@ w_object(PyObject *v, WFILE *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 +427,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 +440,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 +469,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 +495,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 +513,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,8 +525,14 @@ 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 */ @@ -488,7 +568,7 @@ r_string(char *s, Py_ssize_t n, RFILE *p)                               data->ob_type->tp_name);              }              else { -                read = PyBytes_GET_SIZE(data); +                read = (int)PyBytes_GET_SIZE(data);                  if (read > 0) {                      if (read > n) {                          PyErr_Format(PyExc_ValueError, @@ -533,7 +613,7 @@ r_byte(RFILE *p)  static int  r_short(RFILE *p)  { -    register short x; +    short x;      unsigned char buffer[2];      r_string((char *) buffer, 2, p); @@ -547,7 +627,7 @@ r_short(RFILE *p)  static long  r_long(RFILE *p)  { -    register long x; +    long x;      unsigned char buffer[4];      r_string((char *) buffer, 4, p); @@ -562,42 +642,6 @@ r_long(RFILE *p)      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()) { -#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); -#endif -    } -    return result; -} -  static PyObject *  r_PyLong(RFILE *p)  { @@ -667,6 +711,62 @@ 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_Size(p->refs); +        if (idx < 0) +            return -1; +        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 */ +        if (PyList_SetItem(p->refs, idx, o) < 0) { +            Py_DECREF(o); /* release the new object */ +            return NULL; +        } else { +            Py_INCREF(o); /* a reference for the list */ +        } +    } +    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,10 +774,18 @@ 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); +    int type, code = r_byte(p); +    int flag;      PyObject *retval; +    if (code == EOF) { +        PyErr_SetString(PyExc_EOFError, +                        "EOF read where object expected"); +        return NULL; +    } +      p->depth++;      if (p->depth > MAX_MARSHAL_STACK_DEPTH) { @@ -686,13 +794,15 @@ 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; @@ -726,14 +836,12 @@ 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: @@ -754,6 +862,7 @@ r_object(RFILE *p)              if (dx == -1.0 && PyErr_Occurred())                  break;              retval = PyFloat_FromDouble(dx); +            R_REF(retval);              break;          } @@ -771,6 +880,7 @@ r_object(RFILE *p)                  break;              }              retval = PyFloat_FromDouble(x); +            R_REF(retval);              break;          } @@ -804,6 +914,7 @@ r_object(RFILE *p)              if (c.imag == -1.0 && PyErr_Occurred())                  break;              retval = PyComplex_FromCComplex(c); +            R_REF(retval);              break;          } @@ -830,6 +941,7 @@ r_object(RFILE *p)                  break;              }              retval = PyComplex_FromCComplex(c); +            R_REF(retval);              break;          } @@ -855,9 +967,11 @@ r_object(RFILE *p)              break;          }          retval = v; +        R_REF(retval);          break;      case TYPE_UNICODE: +    case TYPE_INTERNED:          {          char *buffer; @@ -871,19 +985,31 @@ r_object(RFILE *p)              retval = NULL;              break;          } -        buffer = PyMem_NEW(char, n); -        if (buffer == NULL) { -            retval = PyErr_NoMemory(); -            break; -        } -        if (r_string(buffer, n, p) != n) { +        if (n != 0) { +            buffer = PyMem_NEW(char, n); +            if (buffer == NULL) { +                retval = PyErr_NoMemory(); +                break; +            } +            if (r_string(buffer, n, p) != n) { +                PyMem_DEL(buffer); +                retval = NULL; +                break; +            } +            v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass");              PyMem_DEL(buffer); +        } +        else { +            v = PyUnicode_New(0, 0); +        } +        if (v == NULL) {              retval = NULL;              break;          } -        v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass"); -        PyMem_DEL(buffer); +        if (type == TYPE_INTERNED) +            PyUnicode_InternInPlace(&v);          retval = v; +        R_REF(retval);          break;          } @@ -899,6 +1025,7 @@ r_object(RFILE *p)              break;          }          v = PyTuple_New(n); +        R_REF(v);          if (v == NULL) {              retval = NULL;              break; @@ -930,6 +1057,7 @@ r_object(RFILE *p)              break;          }          v = PyList_New(n); +        R_REF(v);          if (v == NULL) {              retval = NULL;              break; @@ -951,6 +1079,7 @@ r_object(RFILE *p)      case TYPE_DICT:          v = PyDict_New(); +        R_REF(v);          if (v == NULL) {              retval = NULL;              break; @@ -986,6 +1115,16 @@ r_object(RFILE *p)              break;          }          v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL); +        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) {              retval = NULL;              break; @@ -1008,6 +1147,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 +1170,12 @@ r_object(RFILE *p)              int firstlineno;              PyObject *lnotab = NULL; +            idx = r_ref_reserve(flag, p); +            if (idx < 0) { +                retval = NULL; +                break; +            } +              v = NULL;              /* XXX ignore long->int overflows for now */ @@ -1094,6 +1241,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,6 +1257,23 @@ r_object(RFILE *p)          retval = v;          break; +    case TYPE_REF: +        n = r_long(p); +        if (n < 0 || n >= PyList_GET_SIZE(p->refs)) { +            PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)"); +            retval = NULL; +            break; +        } +        v = PyList_GET_ITEM(p->refs, n); +        if (v == Py_None) { +            PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)"); +            retval = NULL; +            break; +        } +        Py_INCREF(v); +        retval = v; +        break; +      default:          /* Bogus data got written, which isn't ideal.             This will let you keep working and recover. */ @@ -1214,7 +1379,11 @@ PyMarshal_ReadObjectFromFile(FILE *fp)      rf.current_filename = NULL;      rf.depth = 0;      rf.ptr = rf.end = NULL; +    rf.refs = PyList_New(0); +    if (rf.refs == NULL) +        return NULL;      result = r_object(&rf); +    Py_DECREF(rf.refs);      return result;  } @@ -1229,7 +1398,11 @@ PyMarshal_ReadObjectFromString(char *str, Py_ssize_t len)      rf.ptr = str;      rf.end = str + len;      rf.depth = 0; +    rf.refs = PyList_New(0); +    if (rf.refs == NULL) +        return NULL;      result = r_object(&rf); +    Py_DECREF(rf.refs);      return result;  } @@ -1248,7 +1421,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 +1499,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 +1516,11 @@ marshal_load(PyObject *self, PyObject *f)          rf.fp = NULL;          rf.readable = f;          rf.current_filename = NULL; -        result = read_object(&rf); +        if ((rf.refs = PyList_New(0)) != NULL) { +            result = read_object(&rf); +            Py_DECREF(rf.refs); +        } else +            result = NULL;      }      Py_DECREF(data);      return result; @@ -1392,8 +1577,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 +1621,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..725f07c 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(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))) @@ -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; 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..ecd00ce 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; @@ -208,12 +208,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 +322,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 +379,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 +430,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 +750,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..f8d3b35 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -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 9ef653b..c2ca563 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; @@ -156,7 +176,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 +329,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 +339,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 +549,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 +611,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 +624,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 +644,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 +790,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 +822,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 +851,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 +872,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 +923,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 +1056,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,15 +1088,23 @@ initstdio(void)      }      Py_DECREF(wrapper); -    encoding = Py_GETENV("PYTHONIOENCODING"); -    errors = NULL; -    if (encoding) { -        encoding = strdup(encoding); -        errors = strchr(encoding, ':'); +    pythonioencoding = Py_GETENV("PYTHONIOENCODING"); +    encoding = errors = NULL; +    if (pythonioencoding) { +        pythonioencoding = _PyMem_Strdup(pythonioencoding); +        if (pythonioencoding == NULL) { +            PyErr_NoMemory(); +            goto error; +        } +        errors = strchr(pythonioencoding, ':');          if (errors) {              *errors = '\0';              errors++; +            if (!*errors) +                errors = NULL;          } +        if (*pythonioencoding) +            encoding = pythonioencoding;      }      /* Set sys.stdin */ @@ -1124,18 +1158,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 +1184,7 @@ initstdio(void)          status = -1;      } -    if (encoding) -        free(encoding); +    PyMem_Free(pythonioencoding);      Py_XDECREF(bimod);      Py_XDECREF(iomod);      return status; @@ -1352,8 +1391,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 +1459,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;          } @@ -2017,8 +2056,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; @@ -2026,7 +2065,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; @@ -2036,11 +2075,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 * @@ -2050,46 +2102,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 { @@ -2101,26 +2169,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 { @@ -2133,6 +2215,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 * @@ -2459,6 +2558,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 e5caa82..1d470c7 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 @@ -298,3 +292,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;          }      }  | 
