diff options
Diffstat (limited to 'Python')
-rw-r--r-- | Python/_warnings.c | 41 | ||||
-rw-r--r-- | Python/ast.c | 10 | ||||
-rw-r--r-- | Python/bltinmodule.c | 99 | ||||
-rw-r--r-- | Python/ceval.c | 316 | ||||
-rw-r--r-- | Python/clinic/_warnings.c.h | 38 | ||||
-rw-r--r-- | Python/clinic/bltinmodule.c.h | 124 | ||||
-rw-r--r-- | Python/clinic/import.c.h | 22 | ||||
-rw-r--r-- | Python/codecs.c | 27 | ||||
-rw-r--r-- | Python/compile.c | 72 | ||||
-rw-r--r-- | Python/errors.c | 18 | ||||
-rw-r--r-- | Python/getargs.c | 511 | ||||
-rw-r--r-- | Python/import.c | 4 | ||||
-rw-r--r-- | Python/importdl.c | 2 | ||||
-rw-r--r-- | Python/importlib.h | 274 | ||||
-rw-r--r-- | Python/importlib_external.h | 684 | ||||
-rw-r--r-- | Python/marshal.c | 4 | ||||
-rw-r--r-- | Python/modsupport.c | 151 | ||||
-rw-r--r-- | Python/opcode_targets.h | 4 | ||||
-rw-r--r-- | Python/pylifecycle.c | 6 | ||||
-rw-r--r-- | Python/pythonrun.c | 6 | ||||
-rw-r--r-- | Python/structmember.c | 2 | ||||
-rw-r--r-- | Python/sysmodule.c | 46 |
22 files changed, 1399 insertions, 1062 deletions
diff --git a/Python/_warnings.c b/Python/_warnings.c index 6cfae77f12..67f4c6bbe0 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -1,5 +1,6 @@ #include "Python.h" #include "frameobject.h" +#include "clinic/_warnings.c.h" #define MODULE_NAME "_warnings" @@ -26,7 +27,7 @@ check_matched(PyObject *obj, PyObject *arg) if (obj == Py_None) return 1; - result = _PyObject_CallMethodId(obj, &PyId_match, "O", arg); + result = _PyObject_CallMethodIdObjArgs(obj, &PyId_match, arg, NULL); if (result == NULL) return -1; @@ -476,7 +477,7 @@ warn_explicit(PyObject *category, PyObject *message, } else { text = message; - message = PyObject_CallFunction(category, "O", message); + message = PyObject_CallFunctionObjArgs(category, message, NULL); if (message == NULL) goto cleanup; } @@ -485,6 +486,10 @@ warn_explicit(PyObject *category, PyObject *message, if (lineno_obj == NULL) goto cleanup; + if (source == Py_None) { + source = NULL; + } + /* Create key. */ key = PyTuple_Pack(3, text, category, lineno_obj); if (key == NULL) @@ -805,22 +810,26 @@ do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level, return res; } -static PyObject * -warnings_warn(PyObject *self, PyObject *args, PyObject *kwds) -{ - static char *kw_list[] = {"message", "category", "stacklevel", - "source", NULL}; - PyObject *message, *category = NULL, *source = NULL; - Py_ssize_t stack_level = 1; +/*[clinic input] +warn as warnings_warn - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OnO:warn", kw_list, - &message, &category, &stack_level, &source)) - return NULL; + message: object + category: object = None + stacklevel: Py_ssize_t = 1 + source: object = None +Issue a warning, or maybe ignore it or raise an exception. +[clinic start generated code]*/ + +static PyObject * +warnings_warn_impl(PyObject *module, PyObject *message, PyObject *category, + Py_ssize_t stacklevel, PyObject *source) +/*[clinic end generated code: output=31ed5ab7d8d760b2 input=bfdf5cf99f6c4edd]*/ +{ category = get_category(message, category); if (category == NULL) return NULL; - return do_warn(message, category, stack_level, source); + return do_warn(message, category, stacklevel, source); } static PyObject * @@ -1098,15 +1107,11 @@ exit: } -PyDoc_STRVAR(warn_doc, -"Issue a warning, or maybe ignore it or raise an exception."); - PyDoc_STRVAR(warn_explicit_doc, "Low-level inferface to warnings functionality."); static PyMethodDef warnings_functions[] = { - {"warn", (PyCFunction)warnings_warn, METH_VARARGS | METH_KEYWORDS, - warn_doc}, + WARNINGS_WARN_METHODDEF {"warn_explicit", (PyCFunction)warnings_warn_explicit, METH_VARARGS | METH_KEYWORDS, warn_explicit_doc}, {"_filters_mutated", (PyCFunction)warnings_filters_mutated, METH_NOARGS, diff --git a/Python/ast.c b/Python/ast.c index 217ea14bf3..5c5738f6ed 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -1411,11 +1411,6 @@ ast_for_arguments(struct compiling *c, const node *n) if (!kwdefaults && nkwonlyargs) return NULL; - if (nposargs + nkwonlyargs > 255) { - ast_error(c, n, "more than 255 arguments"); - return NULL; - } - /* tfpdef: NAME [':' test] vfpdef: NAME */ @@ -2738,11 +2733,6 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func) return NULL; } - if (nargs + nkeywords + ngens > 255) { - ast_error(c, n, "more than 255 arguments"); - return NULL; - } - args = _Py_asdl_seq_new(nargs + ngens, c->c_arena); if (!args) return NULL; diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 8acdfc3222..3473cc322c 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -52,51 +52,45 @@ _Py_IDENTIFIER(stderr); /* AC: cannot convert yet, waiting for *args support */ static PyObject * -builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) +builtin___build_class__(PyObject *self, PyObject **args, Py_ssize_t nargs, + PyObject *kwnames) { PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns; PyObject *cls = NULL, *cell = NULL; - Py_ssize_t nargs; int isclass = 0; /* initialize to prevent gcc warning */ - assert(args != NULL); - if (!PyTuple_Check(args)) { - PyErr_SetString(PyExc_TypeError, - "__build_class__: args is not a tuple"); - return NULL; - } - nargs = PyTuple_GET_SIZE(args); if (nargs < 2) { PyErr_SetString(PyExc_TypeError, "__build_class__: not enough arguments"); return NULL; } - func = PyTuple_GET_ITEM(args, 0); /* Better be callable */ + func = 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); + name = args[1]; if (!PyUnicode_Check(name)) { PyErr_SetString(PyExc_TypeError, "__build_class__: name is not a string"); return NULL; } - bases = PyTuple_GetSlice(args, 2, nargs); + bases = _PyStack_AsTupleSlice(args, nargs, 2, nargs); if (bases == NULL) return NULL; - if (kwds == NULL) { + if (kwnames == NULL) { meta = NULL; mkw = NULL; } else { - mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */ + mkw = _PyStack_AsDict(args + nargs, kwnames); if (mkw == NULL) { Py_DECREF(bases); return NULL; } + meta = _PyDict_GetItemId(mkw, &PyId_metaclass); if (meta != NULL) { Py_INCREF(meta); @@ -999,14 +993,19 @@ builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals, /* AC: cannot convert yet, as needs PEP 457 group support in inspect */ static PyObject * -builtin_getattr(PyObject *self, PyObject *args) +builtin_getattr(PyObject *self, PyObject **args, Py_ssize_t nargs, + PyObject *kwnames) { PyObject *v, *result, *dflt = NULL; PyObject *name; - if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt)) + if (!_PyArg_UnpackStack(args, nargs, "getattr", 2, 3, &v, &name, &dflt)) return NULL; + if (!_PyArg_NoStackKeywords("getattr", kwnames)) { + return NULL; + } + if (!PyUnicode_Check(name)) { PyErr_SetString(PyExc_TypeError, "getattr(): attribute name must be string"); @@ -1186,7 +1185,7 @@ map_traverse(mapobject *lz, visitproc visit, void *arg) static PyObject * map_next(mapobject *lz) { - PyObject *small_stack[5]; + PyObject *small_stack[_PY_FASTCALL_SMALL_STACK]; PyObject **stack; Py_ssize_t niters, nargs, i; PyObject *result = NULL; @@ -1304,13 +1303,19 @@ PyTypeObject PyMap_Type = { /* AC: cannot convert yet, as needs PEP 457 group support in inspect */ static PyObject * -builtin_next(PyObject *self, PyObject *args) +builtin_next(PyObject *self, PyObject **args, Py_ssize_t nargs, + PyObject *kwnames) { PyObject *it, *res; PyObject *def = NULL; - if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def)) + if (!_PyArg_UnpackStack(args, nargs, "next", 1, 2, &it, &def)) return NULL; + + if (!_PyArg_NoStackKeywords("next", kwnames)) { + return NULL; + } + if (!PyIter_Check(it)) { PyErr_Format(PyExc_TypeError, "'%.200s' object is not an iterator", @@ -1742,18 +1747,19 @@ builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z) /* AC: cannot convert yet, waiting for *args support */ static PyObject * -builtin_print(PyObject *self, PyObject *args, PyObject *kwds) +builtin_print(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { - static char *kwlist[] = {"sep", "end", "file", "flush", 0}; - static PyObject *dummy_args; + static const char * const _keywords[] = {"sep", "end", "file", "flush", 0}; + static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0}; PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL; int i, err; - if (dummy_args == NULL && !(dummy_args = PyTuple_New(0))) - return NULL; - if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print", - kwlist, &sep, &end, &file, &flush)) + if (kwnames != NULL && + !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, &_parser, + &sep, &end, &file, &flush)) { return NULL; + } + if (file == NULL || file == Py_None) { file = _PySys_GetObjectId(&PyId_stdout); if (file == NULL) { @@ -1785,7 +1791,7 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } - for (i = 0; i < PyTuple_Size(args); i++) { + for (i = 0; i < nargs; i++) { if (i > 0) { if (sep == NULL) err = PyFile_WriteString(" ", file); @@ -1795,8 +1801,7 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds) if (err) return NULL; } - err = PyFile_WriteObject(PyTuple_GetItem(args, i), file, - Py_PRINT_RAW); + err = PyFile_WriteObject(args[i], file, Py_PRINT_RAW); if (err) return NULL; } @@ -1923,7 +1928,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) char *s = NULL; PyObject *stdin_encoding = NULL, *stdin_errors = NULL; PyObject *stdout_encoding = NULL, *stdout_errors = NULL; - char *stdin_encoding_str, *stdin_errors_str; + const char *stdin_encoding_str, *stdin_errors_str; PyObject *result; size_t len; @@ -1944,7 +1949,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) Py_DECREF(tmp); if (prompt != NULL) { /* We have a prompt, encode it as stdout would */ - char *stdout_encoding_str, *stdout_errors_str; + const char *stdout_encoding_str, *stdout_errors_str; PyObject *stringpo; stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding); stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors); @@ -2074,7 +2079,7 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds) } if (ndigits == NULL || ndigits == Py_None) - result = PyObject_CallFunctionObjArgs(round, NULL); + result = _PyObject_CallNoArg(round); else result = PyObject_CallFunctionObjArgs(round, ndigits, NULL); Py_DECREF(round); @@ -2116,20 +2121,16 @@ PyDoc_STRVAR(builtin_sorted__doc__, "reverse flag can be set to request the result in descending order."); #define BUILTIN_SORTED_METHODDEF \ - {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS|METH_KEYWORDS, builtin_sorted__doc__}, + {"sorted", (PyCFunction)builtin_sorted, METH_FASTCALL, builtin_sorted__doc__}, static PyObject * -builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) +builtin_sorted(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { - PyObject *newlist, *v, *seq, *keyfunc=NULL, **newargs; - PyObject *callable; - static char *kwlist[] = {"", "key", "reverse", 0}; - int reverse; - Py_ssize_t nargs; + PyObject *newlist, *v, *seq, *callable; - /* args 1-3 should match listsort in Objects/listobject.c */ - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted", - kwlist, &seq, &keyfunc, &reverse)) + /* Keyword arguments are passed through list.sort() which will check + them. */ + if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq)) return NULL; newlist = PySequence_List(seq); @@ -2142,10 +2143,8 @@ builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } - assert(PyTuple_GET_SIZE(args) >= 1); - newargs = &PyTuple_GET_ITEM(args, 1); - nargs = PyTuple_GET_SIZE(args) - 1; - v = _PyObject_FastCallDict(callable, newargs, nargs, kwds); + assert(nargs >= 1); + v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames); Py_DECREF(callable); if (v == NULL) { Py_DECREF(newlist); @@ -2613,7 +2612,7 @@ PyTypeObject PyZip_Type = { static PyMethodDef builtin_methods[] = { {"__build_class__", (PyCFunction)builtin___build_class__, - METH_VARARGS | METH_KEYWORDS, build_class_doc}, + METH_FASTCALL, build_class_doc}, {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc}, BUILTIN_ABS_METHODDEF BUILTIN_ALL_METHODDEF @@ -2629,7 +2628,7 @@ static PyMethodDef builtin_methods[] = { BUILTIN_EVAL_METHODDEF BUILTIN_EXEC_METHODDEF BUILTIN_FORMAT_METHODDEF - {"getattr", builtin_getattr, METH_VARARGS, getattr_doc}, + {"getattr", (PyCFunction)builtin_getattr, METH_FASTCALL, getattr_doc}, BUILTIN_GLOBALS_METHODDEF BUILTIN_HASATTR_METHODDEF BUILTIN_HASH_METHODDEF @@ -2643,11 +2642,11 @@ static PyMethodDef builtin_methods[] = { BUILTIN_LOCALS_METHODDEF {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc}, {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc}, - {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc}, + {"next", (PyCFunction)builtin_next, METH_FASTCALL, next_doc}, BUILTIN_OCT_METHODDEF BUILTIN_ORD_METHODDEF BUILTIN_POW_METHODDEF - {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc}, + {"print", (PyCFunction)builtin_print, METH_FASTCALL, print_doc}, BUILTIN_REPR_METHODDEF {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc}, BUILTIN_SETATTR_METHODDEF diff --git a/Python/ceval.c b/Python/ceval.c index d5172b9631..87384709c9 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -30,10 +30,13 @@ #define CHECKEXC 1 /* Double-check exception checking */ #endif +/* Private API for the LOAD_METHOD opcode. */ +extern int _PyObject_GetMethod(PyObject *, PyObject *, PyObject **); + typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *); /* Forward declarations */ -static PyObject * call_function(PyObject ***, Py_ssize_t, PyObject *); +Py_LOCAL_INLINE(PyObject *) call_function(PyObject ***, Py_ssize_t, PyObject *); static PyObject * fast_function(PyObject *, PyObject **, Py_ssize_t, PyObject *); static PyObject * do_call_core(PyObject *, PyObject *, PyObject *); @@ -83,63 +86,6 @@ static long dxp[256]; #endif #endif -/* Function call profile */ -#ifdef CALL_PROFILE -#define PCALL_NUM 11 -static int pcall[PCALL_NUM]; - -#define PCALL_ALL 0 -#define PCALL_FUNCTION 1 -#define PCALL_FAST_FUNCTION 2 -#define PCALL_FASTER_FUNCTION 3 -#define PCALL_METHOD 4 -#define PCALL_BOUND_METHOD 5 -#define PCALL_CFUNCTION 6 -#define PCALL_TYPE 7 -#define PCALL_GENERATOR 8 -#define PCALL_OTHER 9 -#define PCALL_POP 10 - -/* Notes about the statistics - - PCALL_FAST stats - - FAST_FUNCTION means no argument tuple needs to be created. - FASTER_FUNCTION means that the fast-path frame setup code is used. - - If there is a method call where the call can be optimized by changing - the argument tuple and calling the function directly, it gets recorded - twice. - - As a result, the relationship among the statistics appears to be - PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD + - PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER - PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION - PCALL_METHOD > PCALL_BOUND_METHOD -*/ - -#define PCALL(POS) pcall[POS]++ - -PyObject * -PyEval_GetCallStats(PyObject *self) -{ - return Py_BuildValue("iiiiiiiiiii", - pcall[0], pcall[1], pcall[2], pcall[3], - pcall[4], pcall[5], pcall[6], pcall[7], - pcall[8], pcall[9], pcall[10]); -} -#else -#define PCALL(O) - -PyObject * -PyEval_GetCallStats(PyObject *self) -{ - Py_INCREF(Py_None); - return Py_None; -} -#endif - - #ifdef WITH_THREAD #define GIL_REQUEST _Py_atomic_load_relaxed(&gil_drop_request) #else @@ -718,7 +664,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) return tstate->interp->eval_frame(f, throwflag); } -PyObject * +PyObject* _Py_HOT_FUNCTION _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) { #ifdef DXPAIRS @@ -1100,7 +1046,7 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) #ifdef Py_DEBUG /* PyEval_EvalFrameEx() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the + because it can clear it (directly or indirectly) and so the caller loses its exception */ assert(!PyErr_Occurred()); #endif @@ -1424,6 +1370,12 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) PyObject *right = POP(); PyObject *left = TOP(); PyObject *sum; + /* NOTE(haypo): Please don't try to micro-optimize int+int on + CPython using bytecode, it is simply worthless. + See http://bugs.python.org/issue21955 and + http://bugs.python.org/issue10044 for the discussion. In short, + no patch shown any impact on a realistic benchmark, only a minor + speedup on microbenchmarks. */ if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { sum = unicode_concatenate(left, right, f, next_instr); @@ -1538,7 +1490,7 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) TARGET(SET_ADD) { PyObject *v = POP(); - PyObject *set = stack_pointer[-oparg]; + PyObject *set = PEEK(oparg); int err; err = PySet_Add(set, v); Py_DECREF(v); @@ -2400,8 +2352,10 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) TARGET(DELETE_DEREF) { PyObject *cell = freevars[oparg]; - if (PyCell_GET(cell) != NULL) { - PyCell_Set(cell, NULL); + PyObject *oldobj = PyCell_GET(cell); + if (oldobj != NULL) { + PyCell_SET(cell, NULL); + Py_DECREF(oldobj); DISPATCH(); } format_exc_unbound(co, oparg); @@ -2798,7 +2752,7 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) PyObject *map; int err; STACKADJ(-2); - map = stack_pointer[-oparg]; /* dict */ + map = PEEK(oparg); /* dict */ assert(PyDict_CheckExact(map)); err = PyDict_SetItem(map, key, value); /* map[key] = value */ Py_DECREF(value); @@ -3111,7 +3065,7 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) Py_DECREF(mgr); if (enter == NULL) goto error; - res = PyObject_CallFunctionObjArgs(enter, NULL); + res = _PyObject_CallNoArg(enter); Py_DECREF(enter); if (res == NULL) goto error; @@ -3145,7 +3099,7 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) } SET_TOP(exit); Py_DECREF(mgr); - res = PyObject_CallFunctionObjArgs(enter, NULL); + res = _PyObject_CallNoArg(enter); Py_DECREF(enter); if (res == NULL) goto error; @@ -3184,8 +3138,12 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) gotos should still be resumed.) */ + PyObject* stack[3]; PyObject *exit_func; - PyObject *exc = TOP(), *val = Py_None, *tb = Py_None, *res; + PyObject *exc, *val, *tb, *res; + + val = tb = Py_None; + exc = TOP(); if (exc == Py_None) { (void)POP(); exit_func = TOP(); @@ -3229,8 +3187,11 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) assert(block->b_type == EXCEPT_HANDLER); block->b_level--; } - /* XXX Not the fastest way to call it... */ - res = PyObject_CallFunctionObjArgs(exit_func, exc, val, tb, NULL); + + stack[0] = exc; + stack[1] = val; + stack[2] = tb; + res = _PyObject_FastCall(exit_func, stack, 3); Py_DECREF(exit_func); if (res == NULL) goto error; @@ -3267,10 +3228,95 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) DISPATCH(); } + TARGET(LOAD_METHOD) { + /* Designed to work in tamdem with CALL_METHOD. */ + PyObject *name = GETITEM(names, oparg); + PyObject *obj = TOP(); + PyObject *meth = NULL; + + int meth_found = _PyObject_GetMethod(obj, name, &meth); + + if (meth == NULL) { + /* Most likely attribute wasn't found. */ + goto error; + } + + if (meth_found) { + /* We can bypass temporary bound method object. + meth is unbound method and obj is self. + + meth | self | arg1 | ... | argN + */ + SET_TOP(meth); + PUSH(obj); // self + } + else { + /* meth is not an unbound method (but a regular attr, or + something was returned by a descriptor protocol). Set + the second element of the stack to NULL, to signal + CALL_METHOD that it's not a method call. + + NULL | meth | arg1 | ... | argN + */ + SET_TOP(NULL); + Py_DECREF(obj); + PUSH(meth); + } + DISPATCH(); + } + + TARGET(CALL_METHOD) { + /* Designed to work in tamdem with LOAD_METHOD. */ + PyObject **sp, *res, *meth; + + sp = stack_pointer; + + meth = PEEK(oparg + 2); + if (meth == NULL) { + /* `meth` is NULL when LOAD_METHOD thinks that it's not + a method call. + + Stack layout: + + ... | NULL | callable | arg1 | ... | argN + ^- TOP() + ^- (-oparg) + ^- (-oparg-1) + ^- (-oparg-2) + + `callable` will be POPed by call_funtion. + NULL will will be POPed manually later. + */ + res = call_function(&sp, oparg, NULL); + stack_pointer = sp; + (void)POP(); /* POP the NULL. */ + } + else { + /* This is a method call. Stack layout: + + ... | method | self | arg1 | ... | argN + ^- TOP() + ^- (-oparg) + ^- (-oparg-1) + ^- (-oparg-2) + + `self` and `method` will be POPed by call_function. + We'll be passing `oparg + 1` to call_function, to + make it accept the `self` as a first argument. + */ + res = call_function(&sp, oparg + 1, NULL); + stack_pointer = sp; + } + + PUSH(res); + if (res == NULL) + goto error; + DISPATCH(); + } + PREDICTED(CALL_FUNCTION); TARGET(CALL_FUNCTION) { PyObject **sp, *res; - PCALL(PCALL_ALL); sp = stack_pointer; res = call_function(&sp, oparg, NULL); stack_pointer = sp; @@ -3286,7 +3332,6 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) names = POP(); assert(PyTuple_CheckExact(names) && PyTuple_GET_SIZE(names) <= oparg); - PCALL(PCALL_ALL); sp = stack_pointer; res = call_function(&sp, oparg, names); stack_pointer = sp; @@ -3301,7 +3346,6 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) TARGET(CALL_FUNCTION_EX) { PyObject *func, *callargs, *kwargs = NULL, *result; - PCALL(PCALL_ALL); if (oparg & 0x01) { kwargs = POP(); if (!PyDict_CheckExact(kwargs)) { @@ -3879,7 +3923,7 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, /* Create the frame */ tstate = PyThreadState_GET(); assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, locals); + f = _PyFrame_New_NoTrack(tstate, co, globals, locals); if (f == NULL) { return NULL; } @@ -3965,7 +4009,8 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, } } - if (j >= total_args && kwdict == NULL) { + assert(j >= total_args); + if (kwdict == NULL) { PyErr_Format(PyExc_TypeError, "%U() got an unexpected keyword argument '%S'", co->co_name, keyword); @@ -4048,7 +4093,7 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, vars into frame. */ for (i = 0; i < PyTuple_GET_SIZE(co->co_cellvars); ++i) { PyObject *c; - int arg; + Py_ssize_t arg; /* Possibly account for the cell variable being an argument. */ if (co->co_cell2arg != NULL && (arg = co->co_cell2arg[i]) != CO_CELL_NOT_AN_ARG) { @@ -4091,8 +4136,6 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, * when the generator is resumed. */ Py_CLEAR(f->f_back); - PCALL(PCALL_GENERATOR); - /* Create a new generator that owns the ready to run frame * and return that as the value. */ if (is_coro) { @@ -4102,8 +4145,11 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, } else { gen = PyGen_NewWithQualName(f, name, qualname); } - if (gen == NULL) + if (gen == NULL) { return NULL; + } + + _PyObject_GC_TRACK(f); if (is_coro && coro_wrapper != NULL) { PyObject *wrapped; @@ -4126,9 +4172,15 @@ fail: /* Jump here from prelude on failure */ so recursion_depth must be boosted for the duration. */ assert(tstate != NULL); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; + if (Py_REFCNT(f) > 1) { + Py_DECREF(f); + _PyObject_GC_TRACK(f); + } + else { + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + } return retval; } @@ -4245,7 +4297,7 @@ do_raise(PyObject *exc, PyObject *cause) if (PyExceptionClass_Check(exc)) { type = exc; - value = PyObject_CallObject(exc, NULL); + value = _PyObject_CallNoArg(exc); if (value == NULL) goto raise_error; if (!PyExceptionInstance_Check(value)) { @@ -4270,10 +4322,13 @@ do_raise(PyObject *exc, PyObject *cause) goto raise_error; } + assert(type != NULL); + assert(value != NULL); + if (cause) { PyObject *fixed_cause; if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); + fixed_cause = _PyObject_CallNoArg(cause); if (fixed_cause == NULL) goto raise_error; Py_DECREF(cause); @@ -4296,8 +4351,8 @@ do_raise(PyObject *exc, PyObject *cause) PyErr_SetObject(type, value); /* PyErr_SetObject incref's its arguments */ - Py_XDECREF(value); - Py_XDECREF(type); + Py_DECREF(value); + Py_DECREF(type); return 0; raise_error: @@ -4681,7 +4736,8 @@ PyEval_MergeCompilerFlags(PyCompilerFlags *cf) The arg must be a tuple or NULL. The kw must be a dict or NULL. */ PyObject * -PyEval_CallObjectWithKeywords(PyObject *func, PyObject *args, PyObject *kwargs) +PyEval_CallObjectWithKeywords(PyObject *callable, + PyObject *args, PyObject *kwargs) { #ifdef Py_DEBUG /* PyEval_CallObjectWithKeywords() must not be called with an exception @@ -4691,7 +4747,7 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *args, PyObject *kwargs) #endif if (args == NULL) { - return _PyObject_FastCallDict(func, NULL, 0, kwargs); + return _PyObject_FastCallDict(callable, NULL, 0, kwargs); } if (!PyTuple_Check(args)) { @@ -4706,7 +4762,7 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *args, PyObject *kwargs) return NULL; } - return PyObject_Call(func, args, kwargs); + return PyObject_Call(callable, args, kwargs); } const char * @@ -4766,7 +4822,9 @@ if (tstate->use_tracing && tstate->c_profilefunc) { \ x = call; \ } -static PyObject * +/* Issue #29227: Inline call_function() into _PyEval_EvalFrameDefault() + to reduce the stack consumption. */ +Py_LOCAL_INLINE(PyObject *) _Py_HOT_FUNCTION call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames) { PyObject **pfunc = (*pp_stack) - oparg - 1; @@ -4782,17 +4840,17 @@ call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames) if (PyCFunction_Check(func)) { PyThreadState *tstate = PyThreadState_GET(); - PCALL(PCALL_CFUNCTION); - stack = (*pp_stack) - nargs - nkwargs; C_TRACE(x, _PyCFunction_FastCallKeywords(func, stack, nargs, kwnames)); } else { if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { - /* optimize access to bound methods */ + /* Optimize access to bound methods. Reuse the Python stack + to pass 'self' as the first argument, replace 'func' + with 'self'. It avoids the creation of a new temporary tuple + for arguments (to replace func with self) when the method uses + FASTCALL. */ PyObject *self = PyMethod_GET_SELF(func); - PCALL(PCALL_METHOD); - PCALL(PCALL_BOUND_METHOD); Py_INCREF(self); func = PyMethod_GET_FUNCTION(func); Py_INCREF(func); @@ -4824,7 +4882,6 @@ call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames) while ((*pp_stack) > pfunc) { w = EXT_POP(*pp_stack); Py_DECREF(w); - PCALL(PCALL_POP); } return x; @@ -4839,7 +4896,7 @@ call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames) done before evaluating the frame. */ -static PyObject* +static PyObject* _Py_HOT_FUNCTION _PyFunction_FastCall(PyCodeObject *co, PyObject **args, Py_ssize_t nargs, PyObject *globals) { @@ -4849,14 +4906,13 @@ _PyFunction_FastCall(PyCodeObject *co, PyObject **args, Py_ssize_t nargs, Py_ssize_t i; PyObject *result; - PCALL(PCALL_FASTER_FUNCTION); assert(globals != NULL); /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does + _PyFrame_New_NoTrack() that doesn't take locals, but does take builtins without sanity checking them. */ assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); + f = _PyFrame_New_NoTrack(tstate, co, globals, NULL); if (f == NULL) { return NULL; } @@ -4869,10 +4925,15 @@ _PyFunction_FastCall(PyCodeObject *co, PyObject **args, Py_ssize_t nargs, } result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - + if (Py_REFCNT(f) > 1) { + Py_DECREF(f); + _PyObject_GC_TRACK(f); + } + else { + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + } return result; } @@ -4895,9 +4956,6 @@ fast_function(PyObject *func, PyObject **stack, /* kwnames must only contains str strings, no subclass, and all keys must be unique */ - PCALL(PCALL_FUNCTION); - PCALL(PCALL_FAST_FUNCTION); - if (co->co_kwonlyargcount == 0 && nkwargs == 0 && co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { @@ -4960,11 +5018,8 @@ _PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, assert(nargs == 0 || args != NULL); assert(kwargs == NULL || PyDict_Check(kwargs)); - PCALL(PCALL_FUNCTION); - PCALL(PCALL_FAST_FUNCTION); - if (co->co_kwonlyargcount == 0 && - (kwargs == NULL || PyDict_Size(kwargs) == 0) && + (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) && co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { /* Fast paths */ @@ -4980,9 +5035,9 @@ _PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, } } - if (kwargs != NULL) { + nk = (kwargs != NULL) ? PyDict_GET_SIZE(kwargs) : 0; + if (nk != 0) { Py_ssize_t pos, i; - nk = PyDict_Size(kwargs); kwtuple = PyTuple_New(2 * nk); if (kwtuple == NULL) { @@ -4992,6 +5047,9 @@ _PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, k = &PyTuple_GET_ITEM(kwtuple, 0); pos = i = 0; while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + /* We must hold strong references because keyword arguments can be + indirectly modified while the function is called: + see issue #2016 and test_extcall */ Py_INCREF(k[i]); Py_INCREF(k[i+1]); i += 2; @@ -5001,7 +5059,6 @@ _PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, else { kwtuple = NULL; k = NULL; - nk = 0; } kwdefs = PyFunction_GET_KW_DEFAULTS(func); @@ -5030,23 +5087,6 @@ _PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, static PyObject * do_call_core(PyObject *func, PyObject *callargs, PyObject *kwdict) { -#ifdef CALL_PROFILE - /* At this point, we have to look at the type of func to - update the call stats properly. Do it here so as to avoid - exposing the call stats machinery outside ceval.c - */ - if (PyFunction_Check(func)) - PCALL(PCALL_FUNCTION); - else if (PyMethod_Check(func)) - PCALL(PCALL_METHOD); - else if (PyType_Check(func)) - PCALL(PCALL_TYPE); - else if (PyCFunction_Check(func)) - PCALL(PCALL_CFUNCTION); - else - PCALL(PCALL_OTHER); -#endif - if (PyCFunction_Check(func)) { PyObject *result; PyThreadState *tstate = PyThreadState_GET(); @@ -5345,8 +5385,10 @@ unicode_concatenate(PyObject *v, PyObject *w, PyObject **freevars = (f->f_localsplus + f->f_code->co_nlocals); PyObject *c = freevars[oparg]; - if (PyCell_GET(c) == v) - PyCell_Set(c, NULL); + if (PyCell_GET(c) == v) { + PyCell_SET(c, NULL); + Py_DECREF(v); + } break; } case STORE_NAME: @@ -5430,8 +5472,8 @@ _PyEval_RequestCodeExtraIndex(freefunc free) static void dtrace_function_entry(PyFrameObject *f) { - char* filename; - char* funcname; + const char *filename; + const char *funcname; int lineno; filename = PyUnicode_AsUTF8(f->f_code->co_filename); @@ -5444,8 +5486,8 @@ dtrace_function_entry(PyFrameObject *f) static void dtrace_function_return(PyFrameObject *f) { - char* filename; - char* funcname; + const char *filename; + const char *funcname; int lineno; filename = PyUnicode_AsUTF8(f->f_code->co_filename); @@ -5461,7 +5503,7 @@ maybe_dtrace_line(PyFrameObject *frame, int *instr_lb, int *instr_ub, int *instr_prev) { int line = frame->f_lineno; - char *co_filename, *co_name; + const char *co_filename, *co_name; /* If the last instruction executed isn't in the current instruction window, reset the window. diff --git a/Python/clinic/_warnings.c.h b/Python/clinic/_warnings.c.h new file mode 100644 index 0000000000..550c73f952 --- /dev/null +++ b/Python/clinic/_warnings.c.h @@ -0,0 +1,38 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +PyDoc_STRVAR(warnings_warn__doc__, +"warn($module, /, message, category=None, stacklevel=1, source=None)\n" +"--\n" +"\n" +"Issue a warning, or maybe ignore it or raise an exception."); + +#define WARNINGS_WARN_METHODDEF \ + {"warn", (PyCFunction)warnings_warn, METH_FASTCALL, warnings_warn__doc__}, + +static PyObject * +warnings_warn_impl(PyObject *module, PyObject *message, PyObject *category, + Py_ssize_t stacklevel, PyObject *source); + +static PyObject * +warnings_warn(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"message", "category", "stacklevel", "source", NULL}; + static _PyArg_Parser _parser = {"O|OnO:warn", _keywords, 0}; + PyObject *message; + PyObject *category = Py_None; + Py_ssize_t stacklevel = 1; + PyObject *source = Py_None; + + if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser, + &message, &category, &stacklevel, &source)) { + goto exit; + } + return_value = warnings_warn_impl(module, message, category, stacklevel, source); + +exit: + return return_value; +} +/*[clinic end generated code: output=acadf1788059034c input=a9049054013a1b77]*/ diff --git a/Python/clinic/bltinmodule.c.h b/Python/clinic/bltinmodule.c.h index c88deef33f..b52bde2612 100644 --- a/Python/clinic/bltinmodule.c.h +++ b/Python/clinic/bltinmodule.c.h @@ -80,22 +80,26 @@ PyDoc_STRVAR(builtin_format__doc__, "format_spec defaults to the empty string"); #define BUILTIN_FORMAT_METHODDEF \ - {"format", (PyCFunction)builtin_format, METH_VARARGS, builtin_format__doc__}, + {"format", (PyCFunction)builtin_format, METH_FASTCALL, builtin_format__doc__}, static PyObject * builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec); static PyObject * -builtin_format(PyObject *module, PyObject *args) +builtin_format(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *value; PyObject *format_spec = NULL; - if (!PyArg_ParseTuple(args, "O|U:format", + if (!_PyArg_ParseStack(args, nargs, "O|U:format", &value, &format_spec)) { goto exit; } + + if (!_PyArg_NoStackKeywords("format", kwnames)) { + goto exit; + } return_value = builtin_format_impl(module, value, format_spec); exit: @@ -168,7 +172,7 @@ builtin_compile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *k int dont_inherit = 0; int optimize = -1; - if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, + if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser, &source, PyUnicode_FSDecoder, &filename, &mode, &flags, &dont_inherit, &optimize)) { goto exit; } @@ -185,23 +189,27 @@ PyDoc_STRVAR(builtin_divmod__doc__, "Return the tuple (x//y, x%y). Invariant: div*y + mod == x."); #define BUILTIN_DIVMOD_METHODDEF \ - {"divmod", (PyCFunction)builtin_divmod, METH_VARARGS, builtin_divmod__doc__}, + {"divmod", (PyCFunction)builtin_divmod, METH_FASTCALL, builtin_divmod__doc__}, static PyObject * builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y); static PyObject * -builtin_divmod(PyObject *module, PyObject *args) +builtin_divmod(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *x; PyObject *y; - if (!PyArg_UnpackTuple(args, "divmod", + if (!_PyArg_UnpackStack(args, nargs, "divmod", 2, 2, &x, &y)) { goto exit; } + + if (!_PyArg_NoStackKeywords("divmod", kwnames)) { + goto exit; + } return_value = builtin_divmod_impl(module, x, y); exit: @@ -221,25 +229,29 @@ PyDoc_STRVAR(builtin_eval__doc__, "If only globals is given, locals defaults to it."); #define BUILTIN_EVAL_METHODDEF \ - {"eval", (PyCFunction)builtin_eval, METH_VARARGS, builtin_eval__doc__}, + {"eval", (PyCFunction)builtin_eval, METH_FASTCALL, builtin_eval__doc__}, static PyObject * builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals); static PyObject * -builtin_eval(PyObject *module, PyObject *args) +builtin_eval(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *source; PyObject *globals = Py_None; PyObject *locals = Py_None; - if (!PyArg_UnpackTuple(args, "eval", + if (!_PyArg_UnpackStack(args, nargs, "eval", 1, 3, &source, &globals, &locals)) { goto exit; } + + if (!_PyArg_NoStackKeywords("eval", kwnames)) { + goto exit; + } return_value = builtin_eval_impl(module, source, globals, locals); exit: @@ -259,25 +271,29 @@ PyDoc_STRVAR(builtin_exec__doc__, "If only globals is given, locals defaults to it."); #define BUILTIN_EXEC_METHODDEF \ - {"exec", (PyCFunction)builtin_exec, METH_VARARGS, builtin_exec__doc__}, + {"exec", (PyCFunction)builtin_exec, METH_FASTCALL, builtin_exec__doc__}, static PyObject * builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals); static PyObject * -builtin_exec(PyObject *module, PyObject *args) +builtin_exec(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *source; PyObject *globals = Py_None; PyObject *locals = Py_None; - if (!PyArg_UnpackTuple(args, "exec", + if (!_PyArg_UnpackStack(args, nargs, "exec", 1, 3, &source, &globals, &locals)) { goto exit; } + + if (!_PyArg_NoStackKeywords("exec", kwnames)) { + goto exit; + } return_value = builtin_exec_impl(module, source, globals, locals); exit: @@ -314,23 +330,27 @@ PyDoc_STRVAR(builtin_hasattr__doc__, "This is done by calling getattr(obj, name) and catching AttributeError."); #define BUILTIN_HASATTR_METHODDEF \ - {"hasattr", (PyCFunction)builtin_hasattr, METH_VARARGS, builtin_hasattr__doc__}, + {"hasattr", (PyCFunction)builtin_hasattr, METH_FASTCALL, builtin_hasattr__doc__}, static PyObject * builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name); static PyObject * -builtin_hasattr(PyObject *module, PyObject *args) +builtin_hasattr(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *obj; PyObject *name; - if (!PyArg_UnpackTuple(args, "hasattr", + if (!_PyArg_UnpackStack(args, nargs, "hasattr", 2, 2, &obj, &name)) { goto exit; } + + if (!_PyArg_NoStackKeywords("hasattr", kwnames)) { + goto exit; + } return_value = builtin_hasattr_impl(module, obj, name); exit: @@ -358,25 +378,29 @@ PyDoc_STRVAR(builtin_setattr__doc__, "setattr(x, \'y\', v) is equivalent to ``x.y = v\'\'"); #define BUILTIN_SETATTR_METHODDEF \ - {"setattr", (PyCFunction)builtin_setattr, METH_VARARGS, builtin_setattr__doc__}, + {"setattr", (PyCFunction)builtin_setattr, METH_FASTCALL, builtin_setattr__doc__}, static PyObject * builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name, PyObject *value); static PyObject * -builtin_setattr(PyObject *module, PyObject *args) +builtin_setattr(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *obj; PyObject *name; PyObject *value; - if (!PyArg_UnpackTuple(args, "setattr", + if (!_PyArg_UnpackStack(args, nargs, "setattr", 3, 3, &obj, &name, &value)) { goto exit; } + + if (!_PyArg_NoStackKeywords("setattr", kwnames)) { + goto exit; + } return_value = builtin_setattr_impl(module, obj, name, value); exit: @@ -392,23 +416,27 @@ PyDoc_STRVAR(builtin_delattr__doc__, "delattr(x, \'y\') is equivalent to ``del x.y\'\'"); #define BUILTIN_DELATTR_METHODDEF \ - {"delattr", (PyCFunction)builtin_delattr, METH_VARARGS, builtin_delattr__doc__}, + {"delattr", (PyCFunction)builtin_delattr, METH_FASTCALL, builtin_delattr__doc__}, static PyObject * builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name); static PyObject * -builtin_delattr(PyObject *module, PyObject *args) +builtin_delattr(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *obj; PyObject *name; - if (!PyArg_UnpackTuple(args, "delattr", + if (!_PyArg_UnpackStack(args, nargs, "delattr", 2, 2, &obj, &name)) { goto exit; } + + if (!_PyArg_NoStackKeywords("delattr", kwnames)) { + goto exit; + } return_value = builtin_delattr_impl(module, obj, name); exit: @@ -501,24 +529,28 @@ PyDoc_STRVAR(builtin_pow__doc__, "invoked using the three argument form."); #define BUILTIN_POW_METHODDEF \ - {"pow", (PyCFunction)builtin_pow, METH_VARARGS, builtin_pow__doc__}, + {"pow", (PyCFunction)builtin_pow, METH_FASTCALL, builtin_pow__doc__}, static PyObject * builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z); static PyObject * -builtin_pow(PyObject *module, PyObject *args) +builtin_pow(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *x; PyObject *y; PyObject *z = Py_None; - if (!PyArg_UnpackTuple(args, "pow", + if (!_PyArg_UnpackStack(args, nargs, "pow", 2, 3, &x, &y, &z)) { goto exit; } + + if (!_PyArg_NoStackKeywords("pow", kwnames)) { + goto exit; + } return_value = builtin_pow_impl(module, x, y, z); exit: @@ -538,22 +570,26 @@ PyDoc_STRVAR(builtin_input__doc__, "On *nix systems, readline is used if available."); #define BUILTIN_INPUT_METHODDEF \ - {"input", (PyCFunction)builtin_input, METH_VARARGS, builtin_input__doc__}, + {"input", (PyCFunction)builtin_input, METH_FASTCALL, builtin_input__doc__}, static PyObject * builtin_input_impl(PyObject *module, PyObject *prompt); static PyObject * -builtin_input(PyObject *module, PyObject *args) +builtin_input(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *prompt = NULL; - if (!PyArg_UnpackTuple(args, "input", + if (!_PyArg_UnpackStack(args, nargs, "input", 0, 1, &prompt)) { goto exit; } + + if (!_PyArg_NoStackKeywords("input", kwnames)) { + goto exit; + } return_value = builtin_input_impl(module, prompt); exit: @@ -582,23 +618,27 @@ PyDoc_STRVAR(builtin_sum__doc__, "reject non-numeric types."); #define BUILTIN_SUM_METHODDEF \ - {"sum", (PyCFunction)builtin_sum, METH_VARARGS, builtin_sum__doc__}, + {"sum", (PyCFunction)builtin_sum, METH_FASTCALL, builtin_sum__doc__}, static PyObject * builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start); static PyObject * -builtin_sum(PyObject *module, PyObject *args) +builtin_sum(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *iterable; PyObject *start = NULL; - if (!PyArg_UnpackTuple(args, "sum", + if (!_PyArg_UnpackStack(args, nargs, "sum", 1, 2, &iterable, &start)) { goto exit; } + + if (!_PyArg_NoStackKeywords("sum", kwnames)) { + goto exit; + } return_value = builtin_sum_impl(module, iterable, start); exit: @@ -616,24 +656,28 @@ PyDoc_STRVAR(builtin_isinstance__doc__, "or ...`` etc."); #define BUILTIN_ISINSTANCE_METHODDEF \ - {"isinstance", (PyCFunction)builtin_isinstance, METH_VARARGS, builtin_isinstance__doc__}, + {"isinstance", (PyCFunction)builtin_isinstance, METH_FASTCALL, builtin_isinstance__doc__}, static PyObject * builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple); static PyObject * -builtin_isinstance(PyObject *module, PyObject *args) +builtin_isinstance(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *obj; PyObject *class_or_tuple; - if (!PyArg_UnpackTuple(args, "isinstance", + if (!_PyArg_UnpackStack(args, nargs, "isinstance", 2, 2, &obj, &class_or_tuple)) { goto exit; } + + if (!_PyArg_NoStackKeywords("isinstance", kwnames)) { + goto exit; + } return_value = builtin_isinstance_impl(module, obj, class_or_tuple); exit: @@ -651,27 +695,31 @@ PyDoc_STRVAR(builtin_issubclass__doc__, "or ...`` etc."); #define BUILTIN_ISSUBCLASS_METHODDEF \ - {"issubclass", (PyCFunction)builtin_issubclass, METH_VARARGS, builtin_issubclass__doc__}, + {"issubclass", (PyCFunction)builtin_issubclass, METH_FASTCALL, builtin_issubclass__doc__}, static PyObject * builtin_issubclass_impl(PyObject *module, PyObject *cls, PyObject *class_or_tuple); static PyObject * -builtin_issubclass(PyObject *module, PyObject *args) +builtin_issubclass(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *cls; PyObject *class_or_tuple; - if (!PyArg_UnpackTuple(args, "issubclass", + if (!_PyArg_UnpackStack(args, nargs, "issubclass", 2, 2, &cls, &class_or_tuple)) { goto exit; } + + if (!_PyArg_NoStackKeywords("issubclass", kwnames)) { + goto exit; + } return_value = builtin_issubclass_impl(module, cls, class_or_tuple); exit: return return_value; } -/*[clinic end generated code: output=63483deb75805f7c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=3234725ef4d8bbf1 input=a9049054013a1b77]*/ diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h index b3460b061d..0165b7c4e1 100644 --- a/Python/clinic/import.c.h +++ b/Python/clinic/import.c.h @@ -75,23 +75,27 @@ PyDoc_STRVAR(_imp__fix_co_filename__doc__, " File path to use."); #define _IMP__FIX_CO_FILENAME_METHODDEF \ - {"_fix_co_filename", (PyCFunction)_imp__fix_co_filename, METH_VARARGS, _imp__fix_co_filename__doc__}, + {"_fix_co_filename", (PyCFunction)_imp__fix_co_filename, METH_FASTCALL, _imp__fix_co_filename__doc__}, static PyObject * _imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code, PyObject *path); static PyObject * -_imp__fix_co_filename(PyObject *module, PyObject *args) +_imp__fix_co_filename(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyCodeObject *code; PyObject *path; - if (!PyArg_ParseTuple(args, "O!U:_fix_co_filename", + if (!_PyArg_ParseStack(args, nargs, "O!U:_fix_co_filename", &PyCode_Type, &code, &path)) { goto exit; } + + if (!_PyArg_NoStackKeywords("_fix_co_filename", kwnames)) { + goto exit; + } return_value = _imp__fix_co_filename_impl(module, code, path); exit: @@ -269,23 +273,27 @@ PyDoc_STRVAR(_imp_create_dynamic__doc__, "Create an extension module."); #define _IMP_CREATE_DYNAMIC_METHODDEF \ - {"create_dynamic", (PyCFunction)_imp_create_dynamic, METH_VARARGS, _imp_create_dynamic__doc__}, + {"create_dynamic", (PyCFunction)_imp_create_dynamic, METH_FASTCALL, _imp_create_dynamic__doc__}, static PyObject * _imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file); static PyObject * -_imp_create_dynamic(PyObject *module, PyObject *args) +_imp_create_dynamic(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *spec; PyObject *file = NULL; - if (!PyArg_UnpackTuple(args, "create_dynamic", + if (!_PyArg_UnpackStack(args, nargs, "create_dynamic", 1, 2, &spec, &file)) { goto exit; } + + if (!_PyArg_NoStackKeywords("create_dynamic", kwnames)) { + goto exit; + } return_value = _imp_create_dynamic_impl(module, spec, file); exit: @@ -361,4 +369,4 @@ exit: #ifndef _IMP_EXEC_DYNAMIC_METHODDEF #define _IMP_EXEC_DYNAMIC_METHODDEF #endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */ -/*[clinic end generated code: output=d24d7f73702a907f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c1d0e65d04114958 input=a9049054013a1b77]*/ diff --git a/Python/codecs.c b/Python/codecs.c index fe57d0dc42..688a40bd6f 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -284,7 +284,7 @@ PyObject *codec_makeincrementalcodec(PyObject *codec_info, if (errors) ret = PyObject_CallFunction(inccodec, "s", errors); else - ret = PyObject_CallFunction(inccodec, NULL); + ret = _PyObject_CallNoArg(inccodec); Py_DECREF(inccodec); return ret; } @@ -322,7 +322,7 @@ PyObject *codec_getstreamcodec(const char *encoding, if (errors != NULL) streamcodec = PyObject_CallFunction(codeccls, "Os", stream, errors); else - streamcodec = PyObject_CallFunction(codeccls, "O", stream); + streamcodec = PyObject_CallFunctionObjArgs(codeccls, stream, NULL); Py_DECREF(codecs); return streamcodec; } @@ -867,17 +867,14 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc) Py_UCS4 c; if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeDecodeError)) { - unsigned char *p; + const unsigned char *p; if (PyUnicodeDecodeError_GetStart(exc, &start)) return NULL; if (PyUnicodeDecodeError_GetEnd(exc, &end)) return NULL; if (!(object = PyUnicodeDecodeError_GetObject(exc))) return NULL; - if (!(p = (unsigned char*)PyBytes_AsString(object))) { - Py_DECREF(object); - return NULL; - } + p = (const unsigned char*)PyBytes_AS_STRING(object); res = PyUnicode_New(4 * (end - start), 127); if (res == NULL) { Py_DECREF(object); @@ -1134,7 +1131,7 @@ PyCodec_SurrogatePassErrors(PyObject *exc) PyObject *restuple; PyObject *object; PyObject *encode; - char *encoding; + const char *encoding; int code; int bytelength; Py_ssize_t i; @@ -1220,7 +1217,7 @@ PyCodec_SurrogatePassErrors(PyObject *exc) return restuple; } else if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeDecodeError)) { - unsigned char *p; + const unsigned char *p; Py_UCS4 ch = 0; if (PyUnicodeDecodeError_GetStart(exc, &start)) return NULL; @@ -1228,10 +1225,7 @@ PyCodec_SurrogatePassErrors(PyObject *exc) return NULL; if (!(object = PyUnicodeDecodeError_GetObject(exc))) return NULL; - if (!(p = (unsigned char*)PyBytes_AsString(object))) { - Py_DECREF(object); - return NULL; - } + p = (const unsigned char*)PyBytes_AS_STRING(object); if (!(encode = PyUnicodeDecodeError_GetEncoding(exc))) { Py_DECREF(object); return NULL; @@ -1338,7 +1332,7 @@ PyCodec_SurrogateEscapeErrors(PyObject *exc) } else if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeDecodeError)) { PyObject *str; - unsigned char *p; + const unsigned char *p; Py_UCS2 ch[4]; /* decode up to 4 bad bytes. */ int consumed = 0; if (PyUnicodeDecodeError_GetStart(exc, &start)) @@ -1347,10 +1341,7 @@ PyCodec_SurrogateEscapeErrors(PyObject *exc) return NULL; if (!(object = PyUnicodeDecodeError_GetObject(exc))) return NULL; - if (!(p = (unsigned char*)PyBytes_AsString(object))) { - Py_DECREF(object); - return NULL; - } + p = (const unsigned char*)PyBytes_AS_STRING(object); while (consumed < 4 && consumed < end-start) { /* Refuse to escape ASCII bytes. */ if (p[start+consumed] < 128) diff --git a/Python/compile.c b/Python/compile.c index 0e16075852..17fef31482 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -564,7 +564,7 @@ compiler_enter_scope(struct compiler *c, identifier name, PyObject *tuple, *name, *zero; int res; assert(u->u_scope_type == COMPILER_SCOPE_CLASS); - assert(PyDict_Size(u->u_cellvars) == 0); + assert(PyDict_GET_SIZE(u->u_cellvars) == 0); name = _PyUnicode_FromId(&PyId___class__); if (!name) { compiler_unit_free(u); @@ -591,7 +591,7 @@ compiler_enter_scope(struct compiler *c, identifier name, } u->u_freevars = dictbytype(u->u_ste->ste_symbols, FREE, DEF_FREE_CLASS, - PyDict_Size(u->u_cellvars)); + PyDict_GET_SIZE(u->u_cellvars)); if (!u->u_freevars) { compiler_unit_free(u); return 0; @@ -1040,6 +1040,8 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) return -oparg; case CALL_FUNCTION: return -oparg; + case CALL_METHOD: + return -oparg-1; case CALL_FUNCTION_KW: return -oparg-1; case CALL_FUNCTION_EX: @@ -1078,6 +1080,8 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) /* If there's a fmt_spec on the stack, we go from 2->1, else 1->1. */ return (oparg & FVS_MASK) == FVS_HAVE_SPEC ? -1 : 0; + case LOAD_METHOD: + return 1; default: return PY_INVALID_STACK_EFFECT; } @@ -1124,7 +1128,7 @@ compiler_add_o(struct compiler *c, PyObject *dict, PyObject *o) Py_DECREF(t); return -1; } - arg = PyDict_Size(dict); + arg = PyDict_GET_SIZE(dict); v = PyLong_FromSsize_t(arg); if (!v) { Py_DECREF(t); @@ -1995,7 +1999,7 @@ compiler_class(struct compiler *c, stmt_ty s) } else { /* No methods referenced __class__, so just return None */ - assert(PyDict_Size(c->u->u_cellvars) == 0); + assert(PyDict_GET_SIZE(c->u->u_cellvars) == 0); ADDOP_O(c, LOAD_CONST, Py_None, consts); } ADDOP_IN_SCOPE(c, RETURN_VALUE); @@ -3348,11 +3352,8 @@ compiler_dict(struct compiler *c, expr_ty e) /* If there is more than one dict, they need to be merged into a new * dict. If there is one dict and it's an unpacking, then it needs * to be copied into a new dict." */ - while (containers > 1 || is_unpacking) { - int oparg = containers < 255 ? containers : 255; - ADDOP_I(c, BUILD_MAP_UNPACK, oparg); - containers -= (oparg - 1); - is_unpacking = 0; + if (containers > 1 || is_unpacking) { + ADDOP_I(c, BUILD_MAP_UNPACK, containers); } return 1; } @@ -3403,8 +3404,41 @@ compiler_compare(struct compiler *c, expr_ty e) } static int +maybe_optimize_method_call(struct compiler *c, expr_ty e) +{ + Py_ssize_t argsl, i; + expr_ty meth = e->v.Call.func; + asdl_seq *args = e->v.Call.args; + + /* Check that the call node is an attribute access, and that + the call doesn't have keyword parameters. */ + if (meth->kind != Attribute_kind || meth->v.Attribute.ctx != Load || + asdl_seq_LEN(e->v.Call.keywords)) + return -1; + + /* Check that there are no *varargs types of arguments. */ + argsl = asdl_seq_LEN(args); + for (i = 0; i < argsl; i++) { + expr_ty elt = asdl_seq_GET(args, i); + if (elt->kind == Starred_kind) { + return -1; + } + } + + /* Alright, we can optimize the code. */ + VISIT(c, expr, meth->v.Attribute.value); + ADDOP_NAME(c, LOAD_METHOD, meth->v.Attribute.attr, names); + VISIT_SEQ(c, expr, e->v.Call.args); + ADDOP_I(c, CALL_METHOD, asdl_seq_LEN(e->v.Call.args)); + return 1; +} + +static int compiler_call(struct compiler *c, expr_ty e) { + if (maybe_optimize_method_call(c, e) > 0) + return 1; + VISIT(c, expr, e->v.Call.func); return compiler_call_helper(c, 0, e->v.Call.args, @@ -4044,7 +4078,7 @@ compiler_visit_keyword(struct compiler *c, keyword_ty k) static int expr_constant(struct compiler *c, expr_ty e) { - char *id; + const char *id; switch (e->kind) { case Ellipsis_kind: return 1; @@ -5145,7 +5179,7 @@ static PyObject * dict_keys_inorder(PyObject *dict, Py_ssize_t offset) { PyObject *tuple, *k, *v; - Py_ssize_t i, pos = 0, size = PyDict_Size(dict); + Py_ssize_t i, pos = 0, size = PyDict_GET_SIZE(dict); tuple = PyTuple_New(size); if (tuple == NULL) @@ -5169,7 +5203,6 @@ compute_code_flags(struct compiler *c) { PySTEntryObject *ste = c->u->u_ste; int flags = 0; - Py_ssize_t n; if (ste->ste_type == FunctionBlock) { flags |= CO_NEWLOCALS | CO_OPTIMIZED; if (ste->ste_nested) @@ -5189,16 +5222,9 @@ compute_code_flags(struct compiler *c) /* (Only) inherit compilerflags in PyCF_MASK */ flags |= (c->c_flags->cf_flags & PyCF_MASK); - n = PyDict_Size(c->u->u_freevars); - if (n < 0) - return -1; - if (n == 0) { - n = PyDict_Size(c->u->u_cellvars); - if (n < 0) - return -1; - if (n == 0) { - flags |= CO_NOFREE; - } + if (!PyDict_GET_SIZE(c->u->u_freevars) && + !PyDict_GET_SIZE(c->u->u_cellvars)) { + flags |= CO_NOFREE; } return flags; @@ -5239,7 +5265,7 @@ makecode(struct compiler *c, struct assembler *a) if (!freevars) goto error; - nlocals = PyDict_Size(c->u->u_varnames); + nlocals = PyDict_GET_SIZE(c->u->u_varnames); assert(nlocals < INT_MAX); nlocals_int = Py_SAFE_DOWNCAST(nlocals, Py_ssize_t, int); diff --git a/Python/errors.c b/Python/errors.c index 6095843815..3785e6981c 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -62,7 +62,7 @@ _PyErr_CreateException(PyObject *exception, PyObject *value) return PyObject_Call(exception, value, NULL); } else { - return _PyObject_CallArg1(exception, value); + return PyObject_CallFunctionObjArgs(exception, value, NULL); } } @@ -158,10 +158,10 @@ PyErr_SetString(PyObject *exception, const char *string) } -PyObject * +PyObject* _Py_HOT_FUNCTION PyErr_Occurred(void) { - PyThreadState *tstate = _PyThreadState_UncheckedGet(); + PyThreadState *tstate = PyThreadState_GET(); return tstate == NULL ? NULL : tstate->curexc_type; } @@ -582,9 +582,7 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, const char *filename) PyObject * PyErr_SetFromErrnoWithUnicodeFilename(PyObject *exc, const Py_UNICODE *filename) { - PyObject *name = filename ? - PyUnicode_FromUnicode(filename, wcslen(filename)) : - NULL; + PyObject *name = filename ? PyUnicode_FromWideChar(filename, -1) : NULL; PyObject *result = PyErr_SetFromErrnoWithFilenameObjects(exc, name, NULL); Py_XDECREF(name); return result; @@ -691,9 +689,7 @@ PyObject *PyErr_SetExcFromWindowsErrWithUnicodeFilename( int ierr, const Py_UNICODE *filename) { - PyObject *name = filename ? - PyUnicode_FromUnicode(filename, wcslen(filename)) : - NULL; + PyObject *name = filename ? PyUnicode_FromWideChar(filename, -1) : NULL; PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObjects(exc, ierr, name, @@ -729,9 +725,7 @@ PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename( int ierr, const Py_UNICODE *filename) { - PyObject *name = filename ? - PyUnicode_FromUnicode(filename, wcslen(filename)) : - NULL; + PyObject *name = filename ? PyUnicode_FromWideChar(filename, -1) : NULL; PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObjects( PyExc_OSError, ierr, name, NULL); diff --git a/Python/getargs.c b/Python/getargs.c index 616c6eb107..e3be6d9280 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -26,7 +26,9 @@ int _PyArg_VaParseTupleAndKeywordsFast(PyObject *, PyObject *, #ifdef HAVE_DECLSPEC_DLL /* Export functions */ PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, const char *, ...); -PyAPI_FUNC(int) _PyArg_ParseStack_SizeT(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, +PyAPI_FUNC(int) _PyArg_ParseStack_SizeT(PyObject **args, Py_ssize_t nargs, + const char *format, ...); +PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords_SizeT(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, struct _PyArg_Parser *parser, ...); PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, const char *, ...); PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywords_SizeT(PyObject *, PyObject *, @@ -66,6 +68,8 @@ typedef struct { #define STATIC_FREELIST_ENTRIES 8 /* Forward */ +static int vgetargs1_impl(PyObject *args, PyObject **stack, Py_ssize_t nargs, + const char *format, va_list *p_va, int flags); static int vgetargs1(PyObject *, const char *, va_list *, int); static void seterror(Py_ssize_t, const char *, int *, const char *, const char *); static const char *convertitem(PyObject *, const char **, va_list *, int, int *, @@ -74,7 +78,7 @@ static const char *converttuple(PyObject *, const char **, va_list *, int, int *, char *, size_t, int, freelist_t *); static const char *convertsimple(PyObject *, const char **, va_list *, int, char *, size_t, freelist_t *); -static Py_ssize_t convertbuffer(PyObject *, void **p, const char **); +static Py_ssize_t convertbuffer(PyObject *, const void **p, const char **); static int getbuffer(PyObject *, Py_buffer *, const char**); static int vgetargskeywords(PyObject *, PyObject *, @@ -138,6 +142,31 @@ _PyArg_ParseTuple_SizeT(PyObject *args, const char *format, ...) int +_PyArg_ParseStack(PyObject **args, Py_ssize_t nargs, const char *format, ...) +{ + int retval; + va_list va; + + va_start(va, format); + retval = vgetargs1_impl(NULL, args, nargs, format, &va, 0); + va_end(va); + return retval; +} + +int +_PyArg_ParseStack_SizeT(PyObject **args, Py_ssize_t nargs, const char *format, ...) +{ + int retval; + va_list va; + + va_start(va, format); + retval = vgetargs1_impl(NULL, args, nargs, format, &va, FLAG_SIZE_T); + va_end(va); + return retval; +} + + +int PyArg_VaParse(PyObject *args, const char *format, va_list va) { va_list lva; @@ -220,7 +249,8 @@ cleanreturn(int retval, freelist_t *freelist) static int -vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) +vgetargs1_impl(PyObject *compat_args, PyObject **stack, Py_ssize_t nargs, const char *format, + va_list *p_va, int flags) { char msgbuf[256]; int levels[32]; @@ -231,17 +261,18 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) int level = 0; int endfmt = 0; const char *formatsave = format; - Py_ssize_t i, len; + Py_ssize_t i; const char *msg; int compat = flags & FLAG_COMPAT; freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; freelist_t freelist; + assert(nargs == 0 || stack != NULL); + freelist.entries = static_entries; freelist.first_available = 0; freelist.entries_malloced = 0; - assert(compat || (args != (PyObject*)NULL)); flags = flags & ~FLAG_COMPAT; while (endfmt == 0) { @@ -305,7 +336,7 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) if (compat) { if (max == 0) { - if (args == NULL) + if (compat_args == NULL) return 1; PyErr_Format(PyExc_TypeError, "%.200s%s takes no arguments", @@ -314,14 +345,14 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) return cleanreturn(0, &freelist); } else if (min == 1 && max == 1) { - if (args == NULL) { + if (compat_args == NULL) { PyErr_Format(PyExc_TypeError, "%.200s%s takes at least one argument", fname==NULL ? "function" : fname, fname==NULL ? "" : "()"); return cleanreturn(0, &freelist); } - msg = convertitem(args, &format, p_va, flags, levels, + msg = convertitem(compat_args, &format, p_va, flags, levels, msgbuf, sizeof(msgbuf), &freelist); if (msg == NULL) return cleanreturn(1, &freelist); @@ -335,34 +366,26 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) } } - if (!PyTuple_Check(args)) { - PyErr_SetString(PyExc_SystemError, - "new style getargs format but argument is not a tuple"); - return cleanreturn(0, &freelist); - } - - len = PyTuple_GET_SIZE(args); - - if (len < min || max < len) { + if (nargs < min || max < nargs) { if (message == NULL) PyErr_Format(PyExc_TypeError, "%.150s%s takes %s %d argument%s (%ld given)", fname==NULL ? "function" : fname, fname==NULL ? "" : "()", min==max ? "exactly" - : len < min ? "at least" : "at most", - len < min ? min : max, - (len < min ? min : max) == 1 ? "" : "s", - Py_SAFE_DOWNCAST(len, Py_ssize_t, long)); + : nargs < min ? "at least" : "at most", + nargs < min ? min : max, + (nargs < min ? min : max) == 1 ? "" : "s", + Py_SAFE_DOWNCAST(nargs, Py_ssize_t, long)); else PyErr_SetString(PyExc_TypeError, message); return cleanreturn(0, &freelist); } - for (i = 0; i < len; i++) { + for (i = 0; i < nargs; i++) { if (*format == '|') format++; - msg = convertitem(PyTuple_GET_ITEM(args, i), &format, p_va, + msg = convertitem(stack[i], &format, p_va, flags, levels, msgbuf, sizeof(msgbuf), &freelist); if (msg) { @@ -382,6 +405,31 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) return cleanreturn(1, &freelist); } +static int +vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) +{ + PyObject **stack; + Py_ssize_t nargs; + + if (!(flags & FLAG_COMPAT)) { + assert(args != NULL); + + if (!PyTuple_Check(args)) { + PyErr_SetString(PyExc_SystemError, + "new style getargs format but argument is not a tuple"); + return 0; + } + + stack = &PyTuple_GET_ITEM(args, 0); + nargs = PyTuple_GET_SIZE(args); + } + else { + stack = NULL; + nargs = 0; + } + + return vgetargs1_impl(args, stack, nargs, format, p_va, flags); +} static void @@ -625,7 +673,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, const char *format = *p_format; char c = *format++; - char *sarg; + const char *sarg; switch (c) { @@ -897,7 +945,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } break; } - count = convertbuffer(arg, p, &buf); + count = convertbuffer(arg, (const void **)p, &buf); if (count < 0) return converterr(buf, arg, msgbuf, bufsize); if (*format == '#') { @@ -928,7 +976,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, if (sarg == NULL) return converterr(CONV_UNICODE, arg, msgbuf, bufsize); - PyBuffer_FillInfo(p, arg, sarg, len, 1, 0); + PyBuffer_FillInfo(p, arg, (void *)sarg, len, 1, 0); } else { /* any bytes-like object */ const char *buf; @@ -943,7 +991,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, format++; } else if (*format == '#') { /* a string or read-only bytes-like object */ /* "s#" or "z#" */ - void **p = (void **)va_arg(*p_va, char **); + const void **p = (const void **)va_arg(*p_va, const char **); FETCH_SIZE; if (c == 'z' && arg == Py_None) { @@ -970,7 +1018,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, format++; } else { /* "s" or "z" */ - char **p = va_arg(*p_va, char **); + const char **p = va_arg(*p_va, const char **); Py_ssize_t len; sarg = NULL; @@ -1027,7 +1075,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, *p = PyUnicode_AsUnicodeAndSize(arg, &len); if (*p == NULL) RETURN_ERR_OCCURRED; - if (Py_UNICODE_strlen(*p) != (size_t)len) { + if (wcslen(*p) != (size_t)len) { PyErr_SetString(PyExc_ValueError, "embedded null character"); RETURN_ERR_OCCURRED; } @@ -1074,9 +1122,14 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, (PyBytes_Check(arg) || PyByteArray_Check(arg))) { s = arg; Py_INCREF(s); - if (PyObject_AsCharBuffer(s, &ptr, &size) < 0) - return converterr("(AsCharBuffer failed)", - arg, msgbuf, bufsize); + if (PyBytes_Check(arg)) { + size = PyBytes_GET_SIZE(s); + ptr = PyBytes_AS_STRING(s); + } + else { + size = PyByteArray_GET_SIZE(s); + ptr = PyByteArray_AS_STRING(s); + } } else if (PyUnicode_Check(arg)) { /* Encode object; use default error handling */ @@ -1300,7 +1353,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } static Py_ssize_t -convertbuffer(PyObject *arg, void **p, const char **errmsg) +convertbuffer(PyObject *arg, const void **p, const char **errmsg) { PyBufferProcs *pb = Py_TYPE(arg)->tp_as_buffer; Py_ssize_t count; @@ -1448,14 +1501,6 @@ _PyArg_ParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, int retval; va_list va; - if ((args == NULL || !PyTuple_Check(args)) || - (keywords != NULL && !PyDict_Check(keywords)) || - parser == NULL) - { - PyErr_BadInternalCall(); - return 0; - } - va_start(va, parser); retval = vgetargskeywordsfast(args, keywords, parser, &va, 0); va_end(va); @@ -1469,14 +1514,6 @@ _PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, int retval; va_list va; - if ((args == NULL || !PyTuple_Check(args)) || - (keywords != NULL && !PyDict_Check(keywords)) || - parser == NULL) - { - PyErr_BadInternalCall(); - return 0; - } - va_start(va, parser); retval = vgetargskeywordsfast(args, keywords, parser, &va, FLAG_SIZE_T); va_end(va); @@ -1484,19 +1521,12 @@ _PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, } int -_PyArg_ParseStack(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, +_PyArg_ParseStackAndKeywords(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, struct _PyArg_Parser *parser, ...) { int retval; va_list va; - if ((kwnames != NULL && !PyTuple_Check(kwnames)) || - parser == NULL) - { - PyErr_BadInternalCall(); - return 0; - } - va_start(va, parser); retval = vgetargskeywordsfast_impl(args, nargs, NULL, kwnames, parser, &va, 0); va_end(va); @@ -1504,19 +1534,12 @@ _PyArg_ParseStack(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, } int -_PyArg_ParseStack_SizeT(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, +_PyArg_ParseStackAndKeywords_SizeT(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, struct _PyArg_Parser *parser, ...) { int retval; va_list va; - if ((kwnames != NULL && !PyTuple_Check(kwnames)) || - parser == NULL) - { - PyErr_BadInternalCall(); - return 0; - } - va_start(va, parser); retval = vgetargskeywordsfast_impl(args, nargs, NULL, kwnames, parser, &va, FLAG_SIZE_T); va_end(va); @@ -1531,14 +1554,6 @@ _PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, int retval; va_list lva; - if ((args == NULL || !PyTuple_Check(args)) || - (keywords != NULL && !PyDict_Check(keywords)) || - parser == NULL) - { - PyErr_BadInternalCall(); - return 0; - } - va_copy(lva, va); retval = vgetargskeywordsfast(args, keywords, parser, &lva, 0); @@ -1553,14 +1568,6 @@ _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, int retval; va_list lva; - if ((args == NULL || !PyTuple_Check(args)) || - (keywords != NULL && !PyDict_Check(keywords)) || - parser == NULL) - { - PyErr_BadInternalCall(); - return 0; - } - va_copy(lva, va); retval = vgetargskeywordsfast(args, keywords, parser, &lva, FLAG_SIZE_T); @@ -1586,17 +1593,17 @@ PyArg_ValidateKeywordArguments(PyObject *kwargs) #define IS_END_OF_FORMAT(c) (c == '\0' || c == ';' || c == ':') static int -vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, +vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format, char **kwlist, va_list *p_va, int flags) { char msgbuf[512]; int levels[32]; - const char *fname, *msg, *custom_msg, *keyword; + const char *fname, *msg, *custom_msg; int min = INT_MAX; int max = INT_MAX; int i, pos, len; int skip = 0; - Py_ssize_t nargs, nkeywords; + Py_ssize_t nargs, nkwargs; PyObject *current_arg; freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; freelist_t freelist; @@ -1606,7 +1613,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, freelist.entries_malloced = 0; assert(args != NULL && PyTuple_Check(args)); - assert(keywords == NULL || PyDict_Check(keywords)); + assert(kwargs == NULL || PyDict_Check(kwargs)); assert(format != NULL); assert(kwlist != NULL); assert(p_va != NULL); @@ -1645,21 +1652,20 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, } nargs = PyTuple_GET_SIZE(args); - nkeywords = (keywords == NULL) ? 0 : PyDict_Size(keywords); - if (nargs + nkeywords > len) { + nkwargs = (kwargs == NULL) ? 0 : PyDict_GET_SIZE(kwargs); + if (nargs + nkwargs > len) { PyErr_Format(PyExc_TypeError, "%s%s takes at most %d argument%s (%zd given)", (fname == NULL) ? "function" : fname, (fname == NULL) ? "" : "()", len, (len == 1) ? "" : "s", - nargs + nkeywords); + nargs + nkwargs); return cleanreturn(0, &freelist); } /* convert tuple args and keyword args in same loop, using kwlist to drive process */ for (i = 0; i < len; i++) { - keyword = kwlist[i]; if (*format == '|') { if (min != INT_MAX) { PyErr_SetString(PyExc_SystemError, @@ -1713,26 +1719,17 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, return cleanreturn(0, &freelist); } if (!skip) { - current_arg = NULL; - if (nkeywords && i >= pos) { - current_arg = PyDict_GetItemString(keywords, keyword); - if (!current_arg && PyErr_Occurred()) { - return cleanreturn(0, &freelist); - } + if (i < nargs) { + current_arg = PyTuple_GET_ITEM(args, i); } - if (current_arg) { - --nkeywords; - if (i < nargs) { - /* arg present in tuple and in dict */ - PyErr_Format(PyExc_TypeError, - "Argument given by name ('%s') " - "and position (%d)", - keyword, i+1); - return cleanreturn(0, &freelist); - } + else if (nkwargs && i >= pos) { + current_arg = PyDict_GetItemString(kwargs, kwlist[i]); + if (current_arg) + --nkwargs; + } + else { + current_arg = NULL; } - else if (i < nargs) - current_arg = PyTuple_GET_ITEM(args, i); if (current_arg) { msg = convertitem(current_arg, &format, p_va, flags, @@ -1756,8 +1753,8 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, } else { PyErr_Format(PyExc_TypeError, "Required argument " - "'%s' (pos %d) not found", - keyword, i+1); + "'%s' (pos %d) not found", + kwlist[i], i+1); return cleanreturn(0, &freelist); } } @@ -1765,7 +1762,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, * fulfilled and no keyword args left, with no further * validation. XXX Maybe skip this in debug build ? */ - if (!nkeywords && !skip) { + if (!nkwargs && !skip) { return cleanreturn(1, &freelist); } } @@ -1796,19 +1793,32 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, return cleanreturn(0, &freelist); } - /* make sure there are no extraneous keyword arguments */ - if (nkeywords > 0) { - PyObject *key, *value; - Py_ssize_t pos = 0; - while (PyDict_Next(keywords, &pos, &key, &value)) { + if (nkwargs > 0) { + PyObject *key; + Py_ssize_t j; + /* make sure there are no arguments given by name and position */ + for (i = pos; i < nargs; i++) { + current_arg = PyDict_GetItemString(kwargs, kwlist[i]); + if (current_arg) { + /* arg present in tuple and in dict */ + PyErr_Format(PyExc_TypeError, + "Argument given by name ('%s') " + "and position (%d)", + kwlist[i], i+1); + return cleanreturn(0, &freelist); + } + } + /* make sure there are no extraneous keyword arguments */ + j = 0; + while (PyDict_Next(kwargs, &j, &key, NULL)) { int match = 0; if (!PyUnicode_Check(key)) { PyErr_SetString(PyExc_TypeError, "keywords must be strings"); return cleanreturn(0, &freelist); } - for (i = 0; i < len; i++) { - if (*kwlist[i] && _PyUnicode_EqualToASCIIString(key, kwlist[i])) { + for (i = pos; i < len; i++) { + if (_PyUnicode_EqualToASCIIString(key, kwlist[i])) { match = 1; break; } @@ -1956,10 +1966,13 @@ parser_clear(struct _PyArg_Parser *parser) } static PyObject* -find_keyword(PyObject *kwnames, PyObject **kwstack, PyObject *key) +find_keyword(PyObject *kwargs, PyObject *kwnames, PyObject **kwstack, PyObject *key) { Py_ssize_t i, nkwargs; + if (kwargs != NULL) { + return PyDict_GetItem(kwargs, key); + } nkwargs = PyTuple_GET_SIZE(kwnames); for (i=0; i < nkwargs; i++) { PyObject *kwname = PyTuple_GET_ITEM(kwnames, i); @@ -1971,7 +1984,7 @@ find_keyword(PyObject *kwnames, PyObject **kwstack, PyObject *key) } if (!PyUnicode_Check(kwname)) { /* ignore non-string keyword keys: - an error will be raised above */ + an error will be raised below */ continue; } if (_PyUnicode_EQ(kwname, key)) { @@ -1983,7 +1996,7 @@ find_keyword(PyObject *kwnames, PyObject **kwstack, PyObject *key) static int vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, - PyObject *keywords, PyObject *kwnames, + PyObject *kwargs, PyObject *kwnames, struct _PyArg_Parser *parser, va_list *p_va, int flags) { @@ -1994,7 +2007,7 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, const char *msg; PyObject *keyword; int i, pos, len; - Py_ssize_t nkeywords; + Py_ssize_t nkwargs; PyObject *current_arg; freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; freelist_t freelist; @@ -2004,13 +2017,20 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, freelist.first_available = 0; freelist.entries_malloced = 0; - assert(keywords == NULL || PyDict_Check(keywords)); - assert(kwnames == NULL || PyTuple_Check(kwnames)); - assert((keywords != NULL || kwnames != NULL) - || (keywords == NULL && kwnames == NULL)); - assert(parser != NULL); + assert(kwargs == NULL || PyDict_Check(kwargs)); + assert(kwargs == NULL || kwnames == NULL); assert(p_va != NULL); + if (parser == NULL) { + PyErr_BadInternalCall(); + return 0; + } + + if (kwnames != NULL && !PyTuple_Check(kwnames)) { + PyErr_BadInternalCall(); + return 0; + } + if (!parser_init(parser)) { return 0; } @@ -2028,24 +2048,24 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, freelist.entries_malloced = 1; } - if (keywords != NULL) { - nkeywords = PyDict_Size(keywords); + if (kwargs != NULL) { + nkwargs = PyDict_GET_SIZE(kwargs); } else if (kwnames != NULL) { - nkeywords = PyTuple_GET_SIZE(kwnames); + nkwargs = PyTuple_GET_SIZE(kwnames); kwstack = args + nargs; } else { - nkeywords = 0; + nkwargs = 0; } - if (nargs + nkeywords > len) { + if (nargs + nkwargs > len) { PyErr_Format(PyExc_TypeError, "%s%s takes at most %d argument%s (%zd given)", (parser->fname == NULL) ? "function" : parser->fname, (parser->fname == NULL) ? "" : "()", len, (len == 1) ? "" : "s", - nargs + nkeywords); + nargs + nkwargs); return cleanreturn(0, &freelist); } if (parser->max < nargs) { @@ -2059,7 +2079,6 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, format = parser->format; /* convert tuple args and keyword args in same loop, using kwtuple to drive process */ for (i = 0; i < len; i++) { - keyword = (i >= pos) ? PyTuple_GET_ITEM(kwtuple, i - pos) : NULL; if (*format == '|') { format++; } @@ -2068,31 +2087,17 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, } assert(!IS_END_OF_FORMAT(*format)); - current_arg = NULL; - if (nkeywords && i >= pos) { - if (keywords != NULL) { - current_arg = PyDict_GetItem(keywords, keyword); - if (!current_arg && PyErr_Occurred()) { - return cleanreturn(0, &freelist); - } - } - else { - current_arg = find_keyword(kwnames, kwstack, keyword); - } + if (i < nargs) { + current_arg = args[i]; } - if (current_arg) { - --nkeywords; - if (i < nargs) { - /* arg present in tuple and in dict */ - PyErr_Format(PyExc_TypeError, - "Argument given by name ('%U') " - "and position (%d)", - keyword, i+1); - return cleanreturn(0, &freelist); - } + else if (nkwargs && i >= pos) { + keyword = PyTuple_GET_ITEM(kwtuple, i - pos); + current_arg = find_keyword(kwargs, kwnames, kwstack, keyword); + if (current_arg) + --nkwargs; } - else if (i < nargs) { - current_arg = args[i]; + else { + current_arg = NULL; } if (current_arg) { @@ -2108,13 +2113,15 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, if (i < parser->min) { /* Less arguments than required */ if (i < pos) { + Py_ssize_t min = Py_MIN(pos, parser->min); PyErr_Format(PyExc_TypeError, "Function takes %s %d positional arguments" " (%d given)", - (Py_MIN(pos, parser->min) < parser->max) ? "at least" : "exactly", - Py_MIN(pos, parser->min), nargs); + min < parser->max ? "at least" : "exactly", + min, nargs); } else { + keyword = PyTuple_GET_ITEM(kwtuple, i - pos); PyErr_Format(PyExc_TypeError, "Required argument " "'%U' (pos %d) not found", keyword, i+1); @@ -2125,7 +2132,7 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, * fulfilled and no keyword args left, with no further * validation. XXX Maybe skip this in debug build ? */ - if (!nkeywords) { + if (!nkwargs) { return cleanreturn(1, &freelist); } @@ -2137,54 +2144,50 @@ vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, assert(IS_END_OF_FORMAT(*format) || (*format == '|') || (*format == '$')); - /* make sure there are no extraneous keyword arguments */ - if (nkeywords > 0) { - if (keywords != NULL) { - PyObject *key, *value; - Py_ssize_t pos = 0; - while (PyDict_Next(keywords, &pos, &key, &value)) { - int match; - if (!PyUnicode_Check(key)) { - PyErr_SetString(PyExc_TypeError, - "keywords must be strings"); - return cleanreturn(0, &freelist); - } - match = PySequence_Contains(kwtuple, key); - if (match <= 0) { - if (!match) { - PyErr_Format(PyExc_TypeError, - "'%U' is an invalid keyword " - "argument for this function", - key); - } - return cleanreturn(0, &freelist); - } + if (nkwargs > 0) { + Py_ssize_t j; + /* make sure there are no arguments given by name and position */ + for (i = pos; i < nargs; i++) { + keyword = PyTuple_GET_ITEM(kwtuple, i - pos); + current_arg = find_keyword(kwargs, kwnames, kwstack, keyword); + if (current_arg) { + /* arg present in tuple and in dict */ + PyErr_Format(PyExc_TypeError, + "Argument given by name ('%U') " + "and position (%d)", + keyword, i+1); + return cleanreturn(0, &freelist); } } - else { - Py_ssize_t j, nkwargs; - - nkwargs = PyTuple_GET_SIZE(kwnames); - for (j=0; j < nkwargs; j++) { - PyObject *key = PyTuple_GET_ITEM(kwnames, j); - int match; - - if (!PyUnicode_Check(key)) { - PyErr_SetString(PyExc_TypeError, - "keywords must be strings"); - return cleanreturn(0, &freelist); - } + /* make sure there are no extraneous keyword arguments */ + j = 0; + while (1) { + int match; + if (kwargs != NULL) { + if (!PyDict_Next(kwargs, &j, &keyword, NULL)) + break; + } + else { + if (j >= PyTuple_GET_SIZE(kwnames)) + break; + keyword = PyTuple_GET_ITEM(kwnames, j); + j++; + } - match = PySequence_Contains(kwtuple, key); - if (match <= 0) { - if (!match) { - PyErr_Format(PyExc_TypeError, - "'%U' is an invalid keyword " - "argument for this function", - key); - } - return cleanreturn(0, &freelist); + if (!PyUnicode_Check(keyword)) { + PyErr_SetString(PyExc_TypeError, + "keywords must be strings"); + return cleanreturn(0, &freelist); + } + match = PySequence_Contains(kwtuple, keyword); + if (match <= 0) { + if (!match) { + PyErr_Format(PyExc_TypeError, + "'%U' is an invalid keyword " + "argument for this function", + keyword); } + return cleanreturn(0, &freelist); } } } @@ -2199,7 +2202,13 @@ vgetargskeywordsfast(PyObject *args, PyObject *keywords, PyObject **stack; Py_ssize_t nargs; - assert(args != NULL && PyTuple_Check(args)); + if (args == NULL + || !PyTuple_Check(args) + || (keywords != NULL && !PyDict_Check(keywords))) + { + PyErr_BadInternalCall(); + return 0; + } stack = &PyTuple_GET_ITEM(args, 0); nargs = PyTuple_GET_SIZE(args); @@ -2342,21 +2351,16 @@ err: } -int -PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...) +static int +PyArg_UnpackStack_impl(PyObject **args, Py_ssize_t l, const char *name, + Py_ssize_t min, Py_ssize_t max, va_list vargs) { - Py_ssize_t i, l; + Py_ssize_t i; PyObject **o; - va_list vargs; assert(min >= 0); assert(min <= max); - if (!PyTuple_Check(args)) { - PyErr_SetString(PyExc_SystemError, - "PyArg_UnpackTuple() argument list is not a tuple"); - return 0; - } - l = PyTuple_GET_SIZE(args); + if (l < min) { if (name != NULL) PyErr_Format( @@ -2371,8 +2375,11 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m (min == max ? "" : "at least "), min, l); return 0; } - if (l == 0) + + if (l == 0) { return 1; + } + if (l > max) { if (name != NULL) PyErr_Format( @@ -2388,17 +2395,54 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m return 0; } + for (i = 0; i < l; i++) { + o = va_arg(vargs, PyObject **); + *o = args[i]; + } + return 1; +} + +int +PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...) +{ + PyObject **stack; + Py_ssize_t nargs; + int retval; + va_list vargs; + + if (!PyTuple_Check(args)) { + PyErr_SetString(PyExc_SystemError, + "PyArg_UnpackTuple() argument list is not a tuple"); + return 0; + } + stack = &PyTuple_GET_ITEM(args, 0); + nargs = PyTuple_GET_SIZE(args); + #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, max); #else va_start(vargs); #endif - for (i = 0; i < l; i++) { - o = va_arg(vargs, PyObject **); - *o = PyTuple_GET_ITEM(args, i); - } + retval = PyArg_UnpackStack_impl(stack, nargs, name, min, max, vargs); va_end(vargs); - return 1; + return retval; +} + +int +_PyArg_UnpackStack(PyObject **args, Py_ssize_t nargs, const char *name, + Py_ssize_t min, Py_ssize_t max, ...) +{ + int retval; + va_list vargs; + +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, max); +#else + va_start(vargs); +#endif + retval = PyArg_UnpackStack_impl(args, nargs, name, min, max, vargs); + va_end(vargs); + return retval; } @@ -2408,16 +2452,35 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m * not empty, returns 1 otherwise */ int -_PyArg_NoKeywords(const char *funcname, PyObject *kw) +_PyArg_NoKeywords(const char *funcname, PyObject *kwargs) { - if (kw == NULL) + if (kwargs == NULL) { return 1; - if (!PyDict_CheckExact(kw)) { + } + if (!PyDict_CheckExact(kwargs)) { PyErr_BadInternalCall(); return 0; } - if (PyDict_Size(kw) == 0) + if (PyDict_GET_SIZE(kwargs) == 0) { return 1; + } + + PyErr_Format(PyExc_TypeError, "%s does not take keyword arguments", + funcname); + return 0; +} + + +int +_PyArg_NoStackKeywords(const char *funcname, PyObject *kwnames) +{ + if (kwnames == NULL) { + return 1; + } + assert(PyTuple_CheckExact(kwnames)); + if (PyTuple_GET_SIZE(kwnames) == 0) { + return 1; + } PyErr_Format(PyExc_TypeError, "%s does not take keyword arguments", funcname); diff --git a/Python/import.c b/Python/import.c index cd865a5423..aef18005e2 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1035,7 +1035,7 @@ _imp_create_builtin(PyObject *module, PyObject *spec) { struct _inittab *p; PyObject *name; - char *namestr; + const char *namestr; PyObject *mod; name = PyObject_GetAttrString(spec, "name"); @@ -1705,7 +1705,7 @@ PyImport_ReloadModule(PyObject *m) Py_INCREF(imp); } - reloaded_module = _PyObject_CallMethodId(imp, &PyId_reload, "O", m); + reloaded_module = _PyObject_CallMethodIdObjArgs(imp, &PyId_reload, m, NULL); Py_DECREF(imp); return reloaded_module; } diff --git a/Python/importdl.c b/Python/importdl.c index f56fa94cc4..d8656b9433 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -94,7 +94,7 @@ _PyImport_LoadDynamicModuleWithSpec(PyObject *spec, FILE *fp) #endif PyObject *name_unicode = NULL, *name = NULL, *path = NULL, *m = NULL; const char *name_buf, *hook_prefix; - char *oldcontext; + const char *oldcontext; dl_funcptr exportfunc; PyModuleDef *def; PyObject *(*p0)(void); diff --git a/Python/importlib.h b/Python/importlib.h index 195fbfd13b..0c1537e6b7 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -56,7 +56,7 @@ const unsigned char _Py_M__importlib[] = { 67,0,0,0,115,60,0,0,0,120,40,100,6,68,0,93, 32,125,2,116,0,124,1,124,2,131,2,114,6,116,1,124, 0,124,2,116,2,124,1,124,2,131,2,131,3,1,0,113, - 6,87,0,124,0,106,3,106,4,124,1,106,3,131,1,1, + 6,87,0,124,0,106,3,160,4,124,1,106,3,161,1,1, 0,100,5,83,0,41,7,122,47,83,105,109,112,108,101,32, 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, 117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95, @@ -105,8 +105,8 @@ const unsigned char _Py_M__importlib[] = { 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,48,0,0,0,116,0,106,1,131,0,124,0,95,2, - 116,0,106,1,131,0,124,0,95,3,124,1,124,0,95,4, + 0,115,48,0,0,0,116,0,160,1,161,0,124,0,95,2, + 116,0,160,1,161,0,124,0,95,3,124,1,124,0,95,4, 100,0,124,0,95,5,100,1,124,0,95,6,100,1,124,0, 95,7,100,0,83,0,41,2,78,233,0,0,0,0,41,8, 218,7,95,116,104,114,101,97,100,90,13,97,108,108,111,99, @@ -119,9 +119,9 @@ const unsigned char _Py_M__importlib[] = { 0,0,1,10,1,10,1,6,1,6,1,6,1,122,20,95, 77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105, 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, - 2,0,0,0,67,0,0,0,115,64,0,0,0,116,0,106, - 1,131,0,125,1,124,0,106,2,125,2,120,44,116,3,106, - 4,124,2,131,1,125,3,124,3,100,0,107,8,114,38,100, + 3,0,0,0,67,0,0,0,115,64,0,0,0,116,0,160, + 1,161,0,125,1,124,0,106,2,125,2,120,44,116,3,160, + 4,124,2,161,1,125,3,124,3,100,0,107,8,114,38,100, 1,83,0,124,3,106,2,125,2,124,2,124,1,107,2,114, 16,100,2,83,0,113,16,87,0,100,0,83,0,41,3,78, 70,84,41,5,114,20,0,0,0,218,9,103,101,116,95,105, @@ -134,16 +134,16 @@ const unsigned char _Py_M__importlib[] = { 1,8,1,4,1,6,1,8,1,122,24,95,77,111,100,117, 108,101,76,111,99,107,46,104,97,115,95,100,101,97,100,108, 111,99,107,99,1,0,0,0,0,0,0,0,2,0,0,0, - 16,0,0,0,67,0,0,0,115,168,0,0,0,116,0,106, - 1,131,0,125,1,124,0,116,2,124,1,60,0,122,138,120, + 16,0,0,0,67,0,0,0,115,168,0,0,0,116,0,160, + 1,161,0,125,1,124,0,116,2,124,1,60,0,122,138,120, 132,124,0,106,3,143,96,1,0,124,0,106,4,100,1,107, 2,115,48,124,0,106,5,124,1,107,2,114,72,124,1,124, 0,95,5,124,0,4,0,106,4,100,2,55,0,2,0,95, - 4,100,3,83,0,124,0,106,6,131,0,114,92,116,7,100, - 4,124,0,22,0,131,1,130,1,124,0,106,8,106,9,100, - 5,131,1,114,118,124,0,4,0,106,10,100,2,55,0,2, + 4,100,3,83,0,124,0,160,6,161,0,114,92,116,7,100, + 4,124,0,22,0,131,1,130,1,124,0,106,8,160,9,100, + 5,161,1,114,118,124,0,4,0,106,10,100,2,55,0,2, 0,95,10,87,0,100,6,81,0,82,0,88,0,124,0,106, - 8,106,9,131,0,1,0,124,0,106,8,106,11,131,0,1, + 8,160,9,161,0,1,0,124,0,106,8,160,11,161,0,1, 0,113,20,87,0,87,0,100,6,116,2,124,1,61,0,88, 0,100,6,83,0,41,7,122,185,10,32,32,32,32,32,32, 32,32,65,99,113,117,105,114,101,32,116,104,101,32,109,111, @@ -171,13 +171,13 @@ const unsigned char _Py_M__importlib[] = { 1,24,2,10,1,18,2,122,19,95,77,111,100,117,108,101, 76,111,99,107,46,97,99,113,117,105,114,101,99,1,0,0, 0,0,0,0,0,2,0,0,0,10,0,0,0,67,0,0, - 0,115,122,0,0,0,116,0,106,1,131,0,125,1,124,0, + 0,115,122,0,0,0,116,0,160,1,161,0,125,1,124,0, 106,2,143,98,1,0,124,0,106,3,124,1,107,3,114,34, 116,4,100,1,131,1,130,1,124,0,106,5,100,2,107,4, 115,48,116,6,130,1,124,0,4,0,106,5,100,3,56,0, 2,0,95,5,124,0,106,5,100,2,107,2,114,108,100,0, 124,0,95,3,124,0,106,7,114,108,124,0,4,0,106,7, - 100,3,56,0,2,0,95,7,124,0,106,8,106,9,131,0, + 100,3,56,0,2,0,95,7,124,0,106,8,160,9,161,0, 1,0,87,0,100,0,81,0,82,0,88,0,100,0,83,0, 41,4,78,122,31,99,97,110,110,111,116,32,114,101,108,101, 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32, @@ -192,9 +192,9 @@ const unsigned char _Py_M__importlib[] = { 1,8,1,8,1,10,1,8,1,14,1,14,1,10,1,6, 1,6,1,14,1,122,19,95,77,111,100,117,108,101,76,111, 99,107,46,114,101,108,101,97,115,101,99,1,0,0,0,0, - 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, - 18,0,0,0,100,1,106,0,124,0,106,1,116,2,124,0, - 131,1,131,2,83,0,41,2,78,122,23,95,77,111,100,117, + 0,0,0,1,0,0,0,5,0,0,0,67,0,0,0,115, + 18,0,0,0,100,1,160,0,124,0,106,1,116,2,124,0, + 131,1,161,2,83,0,41,2,78,122,23,95,77,111,100,117, 108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32, 123,125,41,3,218,6,102,111,114,109,97,116,114,15,0,0, 0,218,2,105,100,41,1,114,26,0,0,0,114,10,0,0, @@ -247,9 +247,9 @@ const unsigned char _Py_M__importlib[] = { 0,114,35,0,0,0,131,0,0,0,115,6,0,0,0,0, 1,10,1,8,1,122,24,95,68,117,109,109,121,77,111,100, 117,108,101,76,111,99,107,46,114,101,108,101,97,115,101,99, - 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, - 67,0,0,0,115,18,0,0,0,100,1,106,0,124,0,106, - 1,116,2,124,0,131,1,131,2,83,0,41,2,78,122,28, + 1,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0, + 67,0,0,0,115,18,0,0,0,100,1,160,0,124,0,106, + 1,116,2,124,0,131,1,161,2,83,0,41,2,78,122,28, 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, 40,123,33,114,125,41,32,97,116,32,123,125,41,3,114,38, 0,0,0,114,15,0,0,0,114,39,0,0,0,41,1,114, @@ -277,10 +277,10 @@ const unsigned char _Py_M__importlib[] = { 4,0,0,0,0,1,6,1,122,27,95,77,111,100,117,108, 101,76,111,99,107,77,97,110,97,103,101,114,46,95,95,105, 110,105,116,95,95,99,1,0,0,0,0,0,0,0,1,0, - 0,0,10,0,0,0,67,0,0,0,115,42,0,0,0,122, + 0,0,11,0,0,0,67,0,0,0,115,42,0,0,0,122, 16,116,0,124,0,106,1,131,1,124,0,95,2,87,0,100, - 0,116,3,106,4,131,0,1,0,88,0,124,0,106,2,106, - 5,131,0,1,0,100,0,83,0,41,1,78,41,6,218,16, + 0,116,3,160,4,161,0,1,0,88,0,124,0,106,2,160, + 5,161,0,1,0,100,0,83,0,41,1,78,41,6,218,16, 95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,107, 114,43,0,0,0,114,44,0,0,0,218,4,95,105,109,112, 218,12,114,101,108,101,97,115,101,95,108,111,99,107,114,34, @@ -290,8 +290,8 @@ const unsigned char _Py_M__importlib[] = { 1,16,2,10,1,122,28,95,77,111,100,117,108,101,76,111, 99,107,77,97,110,97,103,101,114,46,95,95,101,110,116,101, 114,95,95,99,1,0,0,0,0,0,0,0,3,0,0,0, - 1,0,0,0,79,0,0,0,115,14,0,0,0,124,0,106, - 0,106,1,131,0,1,0,100,0,83,0,41,1,78,41,2, + 2,0,0,0,79,0,0,0,115,14,0,0,0,124,0,106, + 0,160,1,161,0,1,0,100,0,83,0,41,1,78,41,2, 114,44,0,0,0,114,35,0,0,0,41,3,114,26,0,0, 0,218,4,97,114,103,115,90,6,107,119,97,114,103,115,114, 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, @@ -303,14 +303,14 @@ const unsigned char _Py_M__importlib[] = { 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0, 114,11,0,0,0,114,42,0,0,0,140,0,0,0,115,6, 0,0,0,8,2,8,4,8,7,114,42,0,0,0,99,1, - 0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,3, + 0,0,0,0,0,0,0,3,0,0,0,12,0,0,0,3, 0,0,0,115,106,0,0,0,100,1,125,1,121,14,116,0, 136,0,25,0,131,0,125,1,87,0,110,20,4,0,116,1, 107,10,114,38,1,0,1,0,1,0,89,0,110,2,88,0, 124,1,100,1,107,8,114,102,116,2,100,1,107,8,114,66, 116,3,136,0,131,1,125,1,110,8,116,4,136,0,131,1, 125,1,135,0,102,1,100,2,100,3,132,8,125,2,116,5, - 106,6,124,1,124,2,131,2,116,0,136,0,60,0,124,1, + 160,6,124,1,124,2,161,2,116,0,136,0,60,0,124,1, 83,0,41,4,122,109,71,101,116,32,111,114,32,99,114,101, 97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108, 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32, @@ -335,10 +335,10 @@ const unsigned char _Py_M__importlib[] = { 4,1,2,1,14,1,14,1,6,1,8,1,8,1,10,2, 8,1,12,2,16,1,114,45,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,62,0,0,0,116,0,124,0,131,1,125,1,116,1,106, - 2,131,0,1,0,121,12,124,1,106,3,131,0,1,0,87, + 115,62,0,0,0,116,0,124,0,131,1,125,1,116,1,160, + 2,161,0,1,0,121,12,124,1,160,3,161,0,1,0,87, 0,110,20,4,0,116,4,107,10,114,48,1,0,1,0,1, - 0,89,0,110,10,88,0,124,1,106,5,131,0,1,0,100, + 0,89,0,110,10,88,0,124,1,160,5,161,0,1,0,100, 1,83,0,41,2,97,21,1,0,0,82,101,108,101,97,115, 101,32,116,104,101,32,103,108,111,98,97,108,32,105,109,112, 111,114,116,32,108,111,99,107,44,32,97,110,100,32,97,99, @@ -393,8 +393,8 @@ const unsigned char _Py_M__importlib[] = { 58,0,0,0,114,33,0,0,0,41,1,218,9,118,101,114, 98,111,115,105,116,121,99,1,0,0,0,1,0,0,0,3, 0,0,0,5,0,0,0,71,0,0,0,115,54,0,0,0, - 116,0,106,1,106,2,124,1,107,5,114,50,124,0,106,3, - 100,6,131,1,115,30,100,3,124,0,23,0,125,0,116,4, + 116,0,106,1,106,2,124,1,107,5,114,50,124,0,160,3, + 100,6,161,1,115,30,100,3,124,0,23,0,125,0,116,4, 124,0,106,5,124,2,142,0,116,0,106,6,100,4,141,2, 1,0,100,5,83,0,41,7,122,61,80,114,105,110,116,32, 116,104,101,32,109,101,115,115,97,103,101,32,116,111,32,115, @@ -420,7 +420,7 @@ const unsigned char _Py_M__importlib[] = { 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,38,0, 0,0,124,1,116,0,106,1,107,7,114,28,116,2,100,1, - 106,3,124,1,131,1,124,1,100,2,141,2,130,1,136,0, + 160,3,124,1,161,1,124,1,100,2,141,2,130,1,136,0, 124,0,124,1,131,2,83,0,41,3,78,122,29,123,33,114, 125,32,105,115,32,110,111,116,32,97,32,98,117,105,108,116, 45,105,110,32,109,111,100,117,108,101,41,1,114,15,0,0, @@ -448,8 +448,8 @@ const unsigned char _Py_M__importlib[] = { 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,38,0,0,0, - 116,0,106,1,124,1,131,1,115,28,116,2,100,1,106,3, - 124,1,131,1,124,1,100,2,141,2,130,1,136,0,124,0, + 116,0,160,1,124,1,161,1,115,28,116,2,100,1,160,3, + 124,1,161,1,124,1,100,2,141,2,130,1,136,0,124,0, 124,1,131,2,83,0,41,3,78,122,27,123,33,114,125,32, 105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32, 109,111,100,117,108,101,41,1,114,15,0,0,0,41,4,114, @@ -489,10 +489,10 @@ const unsigned char _Py_M__importlib[] = { 114,11,0,0,0,218,17,95,108,111,97,100,95,109,111,100, 117,108,101,95,115,104,105,109,239,0,0,0,115,12,0,0, 0,0,6,10,1,10,1,10,1,10,1,10,2,114,84,0, - 0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,35, + 0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,36, 0,0,0,67,0,0,0,115,216,0,0,0,116,0,124,0, 100,1,100,0,131,3,125,1,116,1,124,1,100,2,131,2, - 114,54,121,10,124,1,106,2,124,0,131,1,83,0,4,0, + 114,54,121,10,124,1,160,2,124,0,161,1,83,0,4,0, 116,3,107,10,114,52,1,0,1,0,1,0,89,0,110,2, 88,0,121,10,124,0,106,4,125,2,87,0,110,20,4,0, 116,5,107,10,114,84,1,0,1,0,1,0,89,0,110,18, @@ -501,9 +501,9 @@ const unsigned char _Py_M__importlib[] = { 116,5,107,10,114,136,1,0,1,0,1,0,100,3,125,3, 89,0,110,2,88,0,121,10,124,0,106,8,125,4,87,0, 110,50,4,0,116,5,107,10,114,198,1,0,1,0,1,0, - 124,1,100,0,107,8,114,182,100,4,106,9,124,3,131,1, - 83,0,100,5,106,9,124,3,124,1,131,2,83,0,89,0, - 110,14,88,0,100,6,106,9,124,3,124,4,131,2,83,0, + 124,1,100,0,107,8,114,182,100,4,160,9,124,3,161,1, + 83,0,100,5,160,9,124,3,124,1,161,2,83,0,89,0, + 110,14,88,0,100,6,160,9,124,3,124,4,161,2,83,0, 100,0,83,0,41,7,78,218,10,95,95,108,111,97,100,101, 114,95,95,218,11,109,111,100,117,108,101,95,114,101,112,114, 250,1,63,122,13,60,109,111,100,117,108,101,32,123,33,114, @@ -702,14 +702,14 @@ const unsigned char _Py_M__importlib[] = { 27,0,0,0,99,1,0,0,115,14,0,0,0,0,2,6, 1,6,1,6,1,6,1,14,3,6,1,122,19,77,111,100, 117,108,101,83,112,101,99,46,95,95,105,110,105,116,95,95, - 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,102,0,0,0,100,1,106,0,124,0, - 106,1,131,1,100,2,106,0,124,0,106,2,131,1,103,2, - 125,1,124,0,106,3,100,0,107,9,114,52,124,1,106,4, - 100,3,106,0,124,0,106,3,131,1,131,1,1,0,124,0, - 106,5,100,0,107,9,114,80,124,1,106,4,100,4,106,0, - 124,0,106,5,131,1,131,1,1,0,100,5,106,0,124,0, - 106,6,106,7,100,6,106,8,124,1,131,1,131,2,83,0, + 99,1,0,0,0,0,0,0,0,2,0,0,0,6,0,0, + 0,67,0,0,0,115,102,0,0,0,100,1,160,0,124,0, + 106,1,161,1,100,2,160,0,124,0,106,2,161,1,103,2, + 125,1,124,0,106,3,100,0,107,9,114,52,124,1,160,4, + 100,3,160,0,124,0,106,3,161,1,161,1,1,0,124,0, + 106,5,100,0,107,9,114,80,124,1,160,4,100,4,160,0, + 124,0,106,5,161,1,161,1,1,0,100,5,160,0,124,0, + 106,6,106,7,100,6,160,8,124,1,161,1,161,2,83,0, 41,7,78,122,9,110,97,109,101,61,123,33,114,125,122,11, 108,111,97,100,101,114,61,123,33,114,125,122,11,111,114,105, 103,105,110,61,123,33,114,125,122,29,115,117,98,109,111,100, @@ -741,11 +741,11 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,0,1,6,1,2,1,12,1,12,1,12,1,10, 1,12,1,12,1,14,1,122,17,77,111,100,117,108,101,83, 112,101,99,46,95,95,101,113,95,95,99,1,0,0,0,0, - 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, + 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, 58,0,0,0,124,0,106,0,100,0,107,8,114,52,124,0, 106,1,100,0,107,9,114,52,124,0,106,2,114,52,116,3, - 100,0,107,8,114,38,116,4,130,1,116,3,106,5,124,0, - 106,1,131,1,124,0,95,0,124,0,106,0,83,0,41,1, + 100,0,107,8,114,38,116,4,130,1,116,3,160,5,124,0, + 106,1,161,1,124,0,95,0,124,0,106,0,83,0,41,1, 78,41,6,114,108,0,0,0,114,103,0,0,0,114,107,0, 0,0,218,19,95,98,111,111,116,115,116,114,97,112,95,101, 120,116,101,114,110,97,108,218,19,78,111,116,73,109,112,108, @@ -761,9 +761,9 @@ const unsigned char _Py_M__importlib[] = { 0,114,112,0,0,0,114,10,0,0,0,114,10,0,0,0, 114,11,0,0,0,114,112,0,0,0,142,1,0,0,115,2, 0,0,0,0,2,99,1,0,0,0,0,0,0,0,1,0, - 0,0,2,0,0,0,67,0,0,0,115,36,0,0,0,124, - 0,106,0,100,1,107,8,114,26,124,0,106,1,106,2,100, - 2,131,1,100,3,25,0,83,0,124,0,106,1,83,0,100, + 0,0,3,0,0,0,67,0,0,0,115,36,0,0,0,124, + 0,106,0,100,1,107,8,114,26,124,0,106,1,160,2,100, + 2,161,1,100,3,25,0,83,0,124,0,106,1,83,0,100, 1,83,0,41,4,122,32,84,104,101,32,110,97,109,101,32, 111,102,32,116,104,101,32,109,111,100,117,108,101,39,115,32, 112,97,114,101,110,116,46,78,218,1,46,114,19,0,0,0, @@ -801,8 +801,8 @@ const unsigned char _Py_M__importlib[] = { 48,124,4,124,0,124,1,100,3,141,2,83,0,124,3,114, 56,103,0,110,2,100,2,125,5,124,4,124,0,124,1,124, 5,100,4,141,3,83,0,124,3,100,2,107,8,114,138,116, - 0,124,1,100,5,131,2,114,134,121,14,124,1,106,4,124, - 0,131,1,125,3,87,0,113,138,4,0,116,5,107,10,114, + 0,124,1,100,5,131,2,114,134,121,14,124,1,160,4,124, + 0,161,1,125,3,87,0,113,138,4,0,116,5,107,10,114, 130,1,0,1,0,1,0,100,2,125,3,89,0,113,138,88, 0,110,4,100,6,125,3,116,6,124,0,124,1,124,2,124, 3,100,7,141,4,83,0,41,8,122,53,82,101,116,117,114, @@ -869,7 +869,7 @@ const unsigned char _Py_M__importlib[] = { 124,1,100,2,100,0,131,3,100,0,107,8,114,166,124,0, 106,4,125,3,124,3,100,0,107,8,114,134,124,0,106,5, 100,0,107,9,114,134,116,6,100,0,107,8,114,110,116,7, - 130,1,116,6,106,8,125,4,124,4,106,9,124,4,131,1, + 130,1,116,6,106,8,125,4,124,4,160,9,124,4,161,1, 125,3,124,0,106,5,124,3,95,10,121,10,124,3,124,1, 95,11,87,0,110,20,4,0,116,3,107,10,114,164,1,0, 1,0,1,0,89,0,110,2,88,0,124,2,115,186,116,0, @@ -915,7 +915,7 @@ const unsigned char _Py_M__importlib[] = { 6,1,114,133,0,0,0,99,1,0,0,0,0,0,0,0, 2,0,0,0,3,0,0,0,67,0,0,0,115,82,0,0, 0,100,1,125,1,116,0,124,0,106,1,100,2,131,2,114, - 30,124,0,106,1,106,2,124,0,131,1,125,1,110,20,116, + 30,124,0,106,1,160,2,124,0,161,1,125,1,110,20,116, 0,124,0,106,1,100,3,131,2,114,50,116,3,100,4,131, 1,130,1,124,1,100,1,107,8,114,68,116,4,124,0,106, 5,131,1,125,1,116,6,124,0,124,1,131,2,1,0,124, @@ -936,14 +936,14 @@ const unsigned char _Py_M__importlib[] = { 95,115,112,101,99,41,2,0,0,115,18,0,0,0,0,3, 4,1,12,3,14,1,12,1,8,2,8,1,10,1,10,1, 114,136,0,0,0,99,1,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,67,0,0,0,115,106,0,0,0,124, + 0,0,4,0,0,0,67,0,0,0,115,106,0,0,0,124, 0,106,0,100,1,107,8,114,14,100,2,110,4,124,0,106, 0,125,1,124,0,106,1,100,1,107,8,114,66,124,0,106, - 2,100,1,107,8,114,50,100,3,106,3,124,1,131,1,83, - 0,100,4,106,3,124,1,124,0,106,2,131,2,83,0,110, - 36,124,0,106,4,114,86,100,5,106,3,124,1,124,0,106, - 1,131,2,83,0,100,6,106,3,124,0,106,0,124,0,106, - 1,131,2,83,0,100,1,83,0,41,7,122,38,82,101,116, + 2,100,1,107,8,114,50,100,3,160,3,124,1,161,1,83, + 0,100,4,160,3,124,1,124,0,106,2,161,2,83,0,110, + 36,124,0,106,4,114,86,100,5,160,3,124,1,124,0,106, + 1,161,2,83,0,100,6,160,3,124,0,106,0,124,0,106, + 1,161,2,83,0,100,1,83,0,41,7,122,38,82,101,116, 117,114,110,32,116,104,101,32,114,101,112,114,32,116,111,32, 117,115,101,32,102,111,114,32,116,104,101,32,109,111,100,117, 108,101,46,78,114,87,0,0,0,122,13,60,109,111,100,117, @@ -959,17 +959,17 @@ const unsigned char _Py_M__importlib[] = { 3,20,1,10,1,10,1,10,2,16,2,6,1,14,2,114, 91,0,0,0,99,2,0,0,0,0,0,0,0,4,0,0, 0,12,0,0,0,67,0,0,0,115,186,0,0,0,124,0, - 106,0,125,2,116,1,106,2,131,0,1,0,116,3,124,2, - 131,1,143,148,1,0,116,4,106,5,106,6,124,2,131,1, - 124,1,107,9,114,62,100,1,106,7,124,2,131,1,125,3, + 106,0,125,2,116,1,160,2,161,0,1,0,116,3,124,2, + 131,1,143,148,1,0,116,4,106,5,160,6,124,2,161,1, + 124,1,107,9,114,62,100,1,160,7,124,2,161,1,125,3, 116,8,124,3,124,2,100,2,141,2,130,1,124,0,106,9, 100,3,107,8,114,114,124,0,106,10,100,3,107,8,114,96, 116,8,100,4,124,0,106,0,100,2,141,2,130,1,116,11, 124,0,124,1,100,5,100,6,141,3,1,0,124,1,83,0, 116,11,124,0,124,1,100,5,100,6,141,3,1,0,116,12, - 124,0,106,9,100,7,131,2,115,154,124,0,106,9,106,13, - 124,2,131,1,1,0,110,12,124,0,106,9,106,14,124,1, - 131,1,1,0,87,0,100,3,81,0,82,0,88,0,116,4, + 124,0,106,9,100,7,131,2,115,154,124,0,106,9,160,13, + 124,2,161,1,1,0,110,12,124,0,106,9,160,14,124,1, + 161,1,1,0,87,0,100,3,81,0,82,0,88,0,116,4, 106,5,124,2,25,0,83,0,41,8,122,70,69,120,101,99, 117,116,101,32,116,104,101,32,115,112,101,99,39,115,32,115, 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,32, @@ -992,14 +992,14 @@ const unsigned char _Py_M__importlib[] = { 16,1,10,1,12,1,10,1,10,1,14,2,14,1,4,1, 14,1,12,4,14,2,22,1,114,80,0,0,0,99,1,0, 0,0,0,0,0,0,2,0,0,0,27,0,0,0,67,0, - 0,0,115,206,0,0,0,124,0,106,0,106,1,124,0,106, - 2,131,1,1,0,116,3,106,4,124,0,106,2,25,0,125, + 0,0,115,206,0,0,0,124,0,106,0,160,1,124,0,106, + 2,161,1,1,0,116,3,106,4,124,0,106,2,25,0,125, 1,116,5,124,1,100,1,100,0,131,3,100,0,107,8,114, 76,121,12,124,0,106,0,124,1,95,6,87,0,110,20,4, 0,116,7,107,10,114,74,1,0,1,0,1,0,89,0,110, 2,88,0,116,5,124,1,100,2,100,0,131,3,100,0,107, 8,114,154,121,40,124,1,106,8,124,1,95,9,116,10,124, - 1,100,3,131,2,115,130,124,0,106,2,106,11,100,4,131, + 1,100,3,131,2,115,130,124,0,106,2,160,11,100,4,161, 1,100,5,25,0,124,1,95,9,87,0,110,20,4,0,116, 7,107,10,114,152,1,0,1,0,1,0,89,0,110,2,88, 0,116,5,124,1,100,6,100,0,131,3,100,0,107,8,114, @@ -1025,7 +1025,7 @@ const unsigned char _Py_M__importlib[] = { 0,131,1,125,1,116,4,124,1,131,1,143,54,1,0,124, 0,106,0,100,0,107,8,114,84,124,0,106,5,100,0,107, 8,114,96,116,6,100,2,124,0,106,7,100,3,141,2,130, - 1,110,12,124,0,106,0,106,8,124,1,131,1,1,0,87, + 1,110,12,124,0,106,0,160,8,124,1,161,1,1,0,87, 0,100,0,81,0,82,0,88,0,116,9,106,10,124,0,106, 7,25,0,83,0,41,4,78,114,135,0,0,0,122,14,109, 105,115,115,105,110,103,32,108,111,97,100,101,114,41,1,114, @@ -1039,7 +1039,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,2,10,2,12,1,8,2,8,1,10,1,10,1,10, 1,16,3,22,5,114,141,0,0,0,99,1,0,0,0,0, 0,0,0,1,0,0,0,9,0,0,0,67,0,0,0,115, - 38,0,0,0,116,0,106,1,131,0,1,0,116,2,124,0, + 38,0,0,0,116,0,160,1,161,0,1,0,116,2,124,0, 106,3,131,1,143,10,1,0,116,4,124,0,131,1,83,0, 81,0,82,0,88,0,100,1,83,0,41,2,122,191,82,101, 116,117,114,110,32,97,32,110,101,119,32,109,111,100,117,108, @@ -1079,9 +1079,9 @@ const unsigned char _Py_M__importlib[] = { 105,100,32,116,104,101,32,110,101,101,100,32,116,111,10,32, 32,32,32,105,110,115,116,97,110,116,105,97,116,101,32,116, 104,101,32,99,108,97,115,115,46,10,10,32,32,32,32,99, - 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, - 67,0,0,0,115,12,0,0,0,100,1,106,0,124,0,106, - 1,131,1,83,0,41,2,122,115,82,101,116,117,114,110,32, + 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,12,0,0,0,100,1,160,0,124,0,106, + 1,161,1,83,0,41,2,122,115,82,101,116,117,114,110,32, 114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100, 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, 101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, @@ -1097,8 +1097,8 @@ const unsigned char _Py_M__importlib[] = { 110,73,109,112,111,114,116,101,114,46,109,111,100,117,108,101, 95,114,101,112,114,78,99,4,0,0,0,0,0,0,0,4, 0,0,0,5,0,0,0,67,0,0,0,115,44,0,0,0, - 124,2,100,0,107,9,114,12,100,0,83,0,116,0,106,1, - 124,1,131,1,114,36,116,2,124,1,124,0,100,1,100,2, + 124,2,100,0,107,9,114,12,100,0,83,0,116,0,160,1, + 124,1,161,1,114,36,116,2,124,1,124,0,100,1,100,2, 141,3,83,0,100,0,83,0,100,0,83,0,41,3,78,122, 8,98,117,105,108,116,45,105,110,41,1,114,103,0,0,0, 41,3,114,46,0,0,0,90,10,105,115,95,98,117,105,108, @@ -1109,8 +1109,8 @@ const unsigned char _Py_M__importlib[] = { 115,10,0,0,0,0,2,8,1,4,1,10,1,14,2,122, 25,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, - 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, - 30,0,0,0,124,0,106,0,124,1,124,2,131,2,125,3, + 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, + 30,0,0,0,124,0,160,0,124,1,124,2,161,2,125,3, 124,3,100,1,107,9,114,26,124,3,106,1,83,0,100,1, 83,0,41,2,122,175,70,105,110,100,32,116,104,101,32,98, 117,105,108,116,45,105,110,32,109,111,100,117,108,101,46,10, @@ -1132,7 +1132,7 @@ const unsigned char _Py_M__importlib[] = { 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,4,0,0,0,67, 0,0,0,115,46,0,0,0,124,1,106,0,116,1,106,2, - 107,7,114,34,116,3,100,1,106,4,124,1,106,0,131,1, + 107,7,114,34,116,3,100,1,160,4,124,1,106,0,161,1, 124,1,106,0,100,2,141,2,130,1,116,5,116,6,106,7, 124,1,131,2,83,0,41,3,122,24,67,114,101,97,116,101, 32,97,32,98,117,105,108,116,45,105,110,32,109,111,100,117, @@ -1221,8 +1221,8 @@ const unsigned char _Py_M__importlib[] = { 116,104,101,32,110,101,101,100,32,116,111,10,32,32,32,32, 105,110,115,116,97,110,116,105,97,116,101,32,116,104,101,32, 99,108,97,115,115,46,10,10,32,32,32,32,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, - 0,115,12,0,0,0,100,1,106,0,124,0,106,1,131,1, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,1, 83,0,41,2,122,115,82,101,116,117,114,110,32,114,101,112, 114,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101, 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,109, @@ -1238,7 +1238,7 @@ const unsigned char _Py_M__importlib[] = { 7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, 114,46,109,111,100,117,108,101,95,114,101,112,114,78,99,4, 0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,67, - 0,0,0,115,32,0,0,0,116,0,106,1,124,1,131,1, + 0,0,0,115,32,0,0,0,116,0,160,1,124,1,161,1, 114,24,116,2,124,1,124,0,100,1,100,2,141,3,83,0, 100,0,83,0,100,0,83,0,41,3,78,90,6,102,114,111, 122,101,110,41,1,114,103,0,0,0,41,3,114,46,0,0, @@ -1248,8 +1248,8 @@ const unsigned char _Py_M__importlib[] = { 114,146,0,0,0,3,3,0,0,115,6,0,0,0,0,2, 10,1,14,2,122,24,70,114,111,122,101,110,73,109,112,111, 114,116,101,114,46,102,105,110,100,95,115,112,101,99,99,3, - 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, - 0,0,0,115,18,0,0,0,116,0,106,1,124,1,131,1, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,115,18,0,0,0,116,0,160,1,124,1,161,1, 114,14,124,0,83,0,100,1,83,0,41,2,122,93,70,105, 110,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, @@ -1274,8 +1274,8 @@ const unsigned char _Py_M__importlib[] = { 99,114,101,97,116,101,95,109,111,100,117,108,101,99,1,0, 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, 0,0,115,64,0,0,0,124,0,106,0,106,1,125,1,116, - 2,106,3,124,1,131,1,115,36,116,4,100,1,106,5,124, - 1,131,1,124,1,100,2,141,2,130,1,116,6,116,2,106, + 2,160,3,124,1,161,1,115,36,116,4,100,1,160,5,124, + 1,161,1,124,1,100,2,141,2,130,1,116,6,116,2,106, 7,124,1,131,2,125,2,116,8,124,2,124,0,106,9,131, 2,1,0,100,0,83,0,41,3,78,122,27,123,33,114,125, 32,105,115,32,110,111,116,32,97,32,102,114,111,122,101,110, @@ -1303,8 +1303,8 @@ const unsigned char _Py_M__importlib[] = { 0,114,138,0,0,0,32,3,0,0,115,2,0,0,0,0, 7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, - 0,0,115,10,0,0,0,116,0,106,1,124,1,131,1,83, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,10,0,0,0,116,0,160,1,124,1,161,1,83, 0,41,1,122,45,82,101,116,117,114,110,32,116,104,101,32, 99,111,100,101,32,111,98,106,101,99,116,32,102,111,114,32, 116,104,101,32,102,114,111,122,101,110,32,109,111,100,117,108, @@ -1324,8 +1324,8 @@ const unsigned char _Py_M__importlib[] = { 47,3,0,0,115,2,0,0,0,0,4,122,25,70,114,111, 122,101,110,73,109,112,111,114,116,101,114,46,103,101,116,95, 115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0, - 116,0,106,1,124,1,131,1,83,0,41,1,122,46,82,101, + 0,0,0,3,0,0,0,67,0,0,0,115,10,0,0,0, + 116,0,160,1,124,1,161,1,83,0,41,1,122,46,82,101, 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, 32,102,114,111,122,101,110,32,109,111,100,117,108,101,32,105, 115,32,97,32,112,97,99,107,97,103,101,46,41,2,114,46, @@ -1352,8 +1352,8 @@ const unsigned char _Py_M__importlib[] = { 111,99,107,67,111,110,116,101,120,116,122,36,67,111,110,116, 101,120,116,32,109,97,110,97,103,101,114,32,102,111,114,32, 116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,46, - 99,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0, - 0,67,0,0,0,115,12,0,0,0,116,0,106,1,131,0, + 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, + 0,67,0,0,0,115,12,0,0,0,116,0,160,1,161,0, 1,0,100,1,83,0,41,2,122,24,65,99,113,117,105,114, 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, 107,46,78,41,2,114,46,0,0,0,114,137,0,0,0,41, @@ -1362,8 +1362,8 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,0,2,122,28,95,73,109,112,111,114,116,76,111, 99,107,67,111,110,116,101,120,116,46,95,95,101,110,116,101, 114,95,95,99,4,0,0,0,0,0,0,0,4,0,0,0, - 1,0,0,0,67,0,0,0,115,12,0,0,0,116,0,106, - 1,131,0,1,0,100,1,83,0,41,2,122,60,82,101,108, + 2,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160, + 1,161,0,1,0,100,1,83,0,41,2,122,60,82,101,108, 101,97,115,101,32,116,104,101,32,105,109,112,111,114,116,32, 108,111,99,107,32,114,101,103,97,114,100,108,101,115,115,32, 111,102,32,97,110,121,32,114,97,105,115,101,100,32,101,120, @@ -1380,11 +1380,11 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, 0,0,114,157,0,0,0,62,3,0,0,115,6,0,0,0, 8,2,4,2,8,4,114,157,0,0,0,99,3,0,0,0, - 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, - 115,64,0,0,0,124,1,106,0,100,1,124,2,100,2,24, - 0,131,2,125,3,116,1,124,3,131,1,124,2,107,0,114, + 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, + 115,64,0,0,0,124,1,160,0,100,1,124,2,100,2,24, + 0,161,2,125,3,116,1,124,3,131,1,124,2,107,0,114, 36,116,2,100,3,131,1,130,1,124,3,100,4,25,0,125, - 4,124,0,114,60,100,5,106,3,124,4,124,0,131,2,83, + 4,124,0,114,60,100,5,160,3,124,4,124,0,161,2,83, 0,124,4,83,0,41,6,122,50,82,101,115,111,108,118,101, 32,97,32,114,101,108,97,116,105,118,101,32,109,111,100,117, 108,101,32,110,97,109,101,32,116,111,32,97,110,32,97,98, @@ -1401,9 +1401,9 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,11,0,0,0,218,13,95,114,101,115,111,108,118, 101,95,110,97,109,101,75,3,0,0,115,10,0,0,0,0, 2,16,1,12,1,8,1,8,1,114,163,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,34,0,0,0,124,0,106,0,124,1,124,2, - 131,2,125,3,124,3,100,0,107,8,114,24,100,0,83,0, + 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, + 0,0,0,115,34,0,0,0,124,0,160,0,124,1,124,2, + 161,2,125,3,124,3,100,0,107,8,114,24,100,0,83,0, 116,1,124,1,124,3,131,2,83,0,41,1,78,41,2,114, 147,0,0,0,114,78,0,0,0,41,4,218,6,102,105,110, 100,101,114,114,15,0,0,0,114,144,0,0,0,114,93,0, @@ -1414,7 +1414,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,10,0,0,0,27,0,0,0,67,0,0,0,115, 242,0,0,0,116,0,106,1,125,3,124,3,100,1,107,8, 114,22,116,2,100,2,131,1,130,1,124,3,115,38,116,3, - 106,4,100,3,116,5,131,2,1,0,124,0,116,0,106,6, + 160,4,100,3,116,5,161,2,1,0,124,0,116,0,106,6, 107,6,125,4,120,188,124,3,68,0,93,176,125,5,116,7, 131,0,143,72,1,0,121,10,124,5,106,8,125,6,87,0, 110,42,4,0,116,9,107,10,114,118,1,0,1,0,1,0, @@ -1449,15 +1449,15 @@ const unsigned char _Py_M__importlib[] = { 10,1,8,1,2,1,10,1,14,1,12,1,8,1,8,2, 22,1,8,2,16,1,10,1,2,1,10,1,14,4,6,2, 8,1,4,2,6,2,8,2,114,170,0,0,0,99,3,0, - 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, + 0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0, 0,0,115,140,0,0,0,116,0,124,0,116,1,131,2,115, - 28,116,2,100,1,106,3,116,4,124,0,131,1,131,1,131, + 28,116,2,100,1,160,3,116,4,124,0,131,1,161,1,131, 1,130,1,124,2,100,2,107,0,114,44,116,5,100,3,131, 1,130,1,124,2,100,2,107,4,114,114,116,0,124,1,116, 1,131,2,115,72,116,2,100,4,131,1,130,1,110,42,124, 1,115,86,116,6,100,5,131,1,130,1,110,28,124,1,116, - 7,106,8,107,7,114,114,100,6,125,3,116,9,124,3,106, - 3,124,1,131,1,131,1,130,1,124,0,12,0,114,136,124, + 7,106,8,107,7,114,114,100,6,125,3,116,9,124,3,160, + 3,124,1,161,1,131,1,130,1,124,0,12,0,114,136,124, 2,100,2,107,2,114,136,116,5,100,7,131,1,130,1,100, 8,83,0,41,9,122,28,86,101,114,105,102,121,32,97,114, 103,117,109,101,110,116,115,32,97,114,101,32,34,115,97,110, @@ -1488,20 +1488,20 @@ const unsigned char _Py_M__importlib[] = { 1,10,2,10,1,4,2,14,1,14,1,114,175,0,0,0, 122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101, 100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,0, - 0,8,0,0,0,12,0,0,0,67,0,0,0,115,220,0, - 0,0,100,0,125,2,124,0,106,0,100,1,131,1,100,2, + 0,8,0,0,0,13,0,0,0,67,0,0,0,115,220,0, + 0,0,100,0,125,2,124,0,160,0,100,1,161,1,100,2, 25,0,125,3,124,3,114,134,124,3,116,1,106,2,107,7, 114,42,116,3,124,1,124,3,131,2,1,0,124,0,116,1, 106,2,107,6,114,62,116,1,106,2,124,0,25,0,83,0, 116,1,106,2,124,3,25,0,125,4,121,10,124,4,106,4, 125,2,87,0,110,50,4,0,116,5,107,10,114,132,1,0, - 1,0,1,0,116,6,100,3,23,0,106,7,124,0,124,3, - 131,2,125,5,116,8,124,5,124,0,100,4,141,2,100,0, + 1,0,1,0,116,6,100,3,23,0,160,7,124,0,124,3, + 161,2,125,5,116,8,124,5,124,0,100,4,141,2,100,0, 130,2,89,0,110,2,88,0,116,9,124,0,124,2,131,2, - 125,6,124,6,100,0,107,8,114,172,116,8,116,6,106,7, - 124,0,131,1,124,0,100,4,141,2,130,1,110,8,116,10, + 125,6,124,6,100,0,107,8,114,172,116,8,116,6,160,7, + 124,0,161,1,124,0,100,4,141,2,130,1,110,8,116,10, 124,6,131,1,125,7,124,3,114,216,116,1,106,2,124,3, - 25,0,125,4,116,11,124,4,124,0,106,0,100,1,131,1, + 25,0,125,4,116,11,124,4,124,0,160,0,100,1,161,1, 100,5,25,0,124,7,131,3,1,0,124,7,83,0,41,6, 78,114,117,0,0,0,114,19,0,0,0,122,23,59,32,123, 33,114,125,32,105,115,32,110,111,116,32,97,32,112,97,99, @@ -1536,11 +1536,11 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, 0,115,120,0,0,0,116,0,124,0,124,1,124,2,131,3, 1,0,124,2,100,1,107,4,114,32,116,1,124,0,124,1, - 124,2,131,3,125,0,116,2,106,3,131,0,1,0,124,0, + 124,2,131,3,125,0,116,2,160,3,161,0,1,0,124,0, 116,4,106,5,107,7,114,60,116,6,124,0,116,7,131,2, 83,0,116,4,106,5,124,0,25,0,125,3,124,3,100,2, - 107,8,114,108,116,2,106,8,131,0,1,0,100,3,106,9, - 124,0,131,1,125,4,116,10,124,4,124,0,100,4,141,2, + 107,8,114,108,116,2,160,8,161,0,1,0,100,3,160,9, + 124,0,161,1,125,4,116,10,124,4,124,0,100,4,141,2, 130,1,116,11,124,0,131,1,1,0,124,3,83,0,41,5, 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, @@ -1578,10 +1578,10 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,0,0,0,6,0,0,0,17,0,0,0,67,0, 0,0,115,164,0,0,0,116,0,124,0,100,1,131,2,114, 160,100,2,124,1,107,6,114,58,116,1,124,1,131,1,125, - 1,124,1,106,2,100,2,131,1,1,0,116,0,124,0,100, - 3,131,2,114,58,124,1,106,3,124,0,106,4,131,1,1, + 1,124,1,160,2,100,2,161,1,1,0,116,0,124,0,100, + 3,131,2,114,58,124,1,160,3,124,0,106,4,161,1,1, 0,120,100,124,1,68,0,93,92,125,3,116,0,124,0,124, - 3,131,2,115,64,100,4,106,5,124,0,106,6,124,3,131, + 3,131,2,115,64,100,4,160,5,124,0,106,6,124,3,161, 2,125,4,121,14,116,7,124,2,124,4,131,2,1,0,87, 0,113,64,4,0,116,8,107,10,114,154,1,0,125,5,1, 0,122,20,124,5,106,9,124,4,107,2,114,136,119,64,130, @@ -1616,15 +1616,15 @@ const unsigned char _Py_M__importlib[] = { 1,10,1,10,1,14,1,2,1,14,1,16,4,10,1,2, 1,24,1,114,189,0,0,0,99,1,0,0,0,0,0,0, 0,3,0,0,0,6,0,0,0,67,0,0,0,115,146,0, - 0,0,124,0,106,0,100,1,131,1,125,1,124,0,106,0, - 100,2,131,1,125,2,124,1,100,3,107,9,114,82,124,2, + 0,0,124,0,160,0,100,1,161,1,125,1,124,0,160,0, + 100,2,161,1,125,2,124,1,100,3,107,9,114,82,124,2, 100,3,107,9,114,78,124,1,124,2,106,1,107,3,114,78, 116,2,106,3,100,4,124,1,155,2,100,5,124,2,106,1, 155,2,100,6,157,5,116,4,100,7,100,8,141,3,1,0, 124,1,83,0,124,2,100,3,107,9,114,96,124,2,106,1, 83,0,116,2,106,3,100,9,116,4,100,7,100,8,141,3, 1,0,124,0,100,10,25,0,125,1,100,11,124,0,107,7, - 114,142,124,1,106,5,100,12,131,1,100,13,25,0,125,1, + 114,142,124,1,160,5,100,12,161,1,100,13,25,0,125,1, 124,1,83,0,41,14,122,167,67,97,108,99,117,108,97,116, 101,32,119,104,97,116,32,95,95,112,97,99,107,97,103,101, 95,95,32,115,104,111,117,108,100,32,98,101,46,10,10,32, @@ -1661,9 +1661,9 @@ const unsigned char _Py_M__importlib[] = { 131,1,125,5,110,36,124,1,100,2,107,9,114,30,124,1, 110,2,105,0,125,6,116,1,124,6,131,1,125,7,116,0, 124,0,124,7,124,4,131,3,125,5,124,3,115,150,124,4, - 100,1,107,2,114,84,116,0,124,0,106,2,100,3,131,1, + 100,1,107,2,114,84,116,0,124,0,160,2,100,3,161,1, 100,1,25,0,131,1,83,0,124,0,115,92,124,5,83,0, - 116,3,124,0,131,1,116,3,124,0,106,2,100,3,131,1, + 116,3,124,0,131,1,116,3,124,0,160,2,100,3,161,1, 100,1,25,0,131,1,24,0,125,8,116,4,106,5,124,5, 106,6,100,2,116,3,124,5,106,6,131,1,124,8,24,0, 133,2,25,0,25,0,83,0,110,12,116,7,124,5,124,3, @@ -1710,8 +1710,8 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,11,8,1,10,2,16,1,8,1,12,1,4,3, 8,1,18,1,4,1,4,4,26,3,32,2,114,196,0,0, 0,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,38,0,0,0,116,0,106,1,124, - 0,131,1,125,1,124,1,100,0,107,8,114,30,116,2,100, + 0,0,67,0,0,0,115,38,0,0,0,116,0,160,1,124, + 0,161,1,125,1,124,1,100,0,107,8,114,30,116,2,100, 1,124,0,23,0,131,1,130,1,116,3,124,1,131,1,83, 0,41,2,78,122,25,110,111,32,98,117,105,108,116,45,105, 110,32,109,111,100,117,108,101,32,110,97,109,101,100,32,41, @@ -1723,10 +1723,10 @@ const unsigned char _Py_M__importlib[] = { 1,8,1,12,1,114,197,0,0,0,99,2,0,0,0,0, 0,0,0,12,0,0,0,12,0,0,0,67,0,0,0,115, 244,0,0,0,124,1,97,0,124,0,97,1,116,2,116,1, - 131,1,125,2,120,86,116,1,106,3,106,4,131,0,68,0, + 131,1,125,2,120,86,116,1,106,3,160,4,161,0,68,0, 93,72,92,2,125,3,125,4,116,5,124,4,124,2,131,2, 114,28,124,3,116,1,106,6,107,6,114,62,116,7,125,5, - 110,18,116,0,106,8,124,3,131,1,114,28,116,9,125,5, + 110,18,116,0,160,8,124,3,161,1,114,28,116,9,125,5, 110,2,113,28,116,10,124,4,124,5,131,2,125,6,116,11, 124,6,124,4,131,2,1,0,113,28,87,0,116,1,106,3, 116,12,25,0,125,7,120,54,100,5,68,0,93,46,125,8, @@ -1774,12 +1774,12 @@ const unsigned char _Py_M__importlib[] = { 1,10,1,10,1,6,1,10,1,6,2,2,1,10,1,14, 3,10,1,10,1,10,1,10,2,10,1,16,3,2,1,12, 1,14,2,10,1,12,3,8,1,114,201,0,0,0,99,2, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,67, 0,0,0,115,66,0,0,0,116,0,124,0,124,1,131,2, - 1,0,116,1,106,2,106,3,116,4,131,1,1,0,116,1, - 106,2,106,3,116,5,131,1,1,0,100,1,100,2,108,6, - 125,2,124,2,97,7,124,2,106,8,116,1,106,9,116,10, - 25,0,131,1,1,0,100,2,83,0,41,3,122,50,73,110, + 1,0,116,1,106,2,160,3,116,4,161,1,1,0,116,1, + 106,2,160,3,116,5,161,1,1,0,100,1,100,2,108,6, + 125,2,124,2,97,7,124,2,160,8,116,1,106,9,116,10, + 25,0,161,1,1,0,100,2,83,0,41,3,122,50,73,110, 115,116,97,108,108,32,105,109,112,111,114,116,108,105,98,32, 97,115,32,116,104,101,32,105,109,112,108,101,109,101,110,116, 97,116,105,111,110,32,111,102,32,105,109,112,111,114,116,46, diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 2f40978fb7..c1beb70d4b 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -8,9 +8,9 @@ const unsigned char _Py_M__importlib_external[] = { 100,13,132,0,90,8,100,14,100,15,132,0,90,9,100,16, 100,17,132,0,90,10,100,18,100,19,132,0,90,11,100,20, 100,21,132,0,90,12,100,93,100,23,100,24,132,1,90,13, - 101,14,101,13,106,15,131,1,90,16,100,25,106,17,100,26, - 100,27,131,2,100,28,23,0,90,18,101,19,106,20,101,18, - 100,27,131,2,90,21,100,29,90,22,100,30,90,23,100,31, + 101,14,101,13,106,15,131,1,90,16,100,25,160,17,100,26, + 100,27,161,2,100,28,23,0,90,18,101,19,160,20,101,18, + 100,27,161,2,90,21,100,29,90,22,100,30,90,23,100,31, 103,1,90,24,100,32,103,1,90,25,101,25,4,0,90,26, 90,27,100,94,100,33,100,34,156,1,100,35,100,36,132,3, 90,28,100,37,100,38,132,0,90,29,100,39,100,40,132,0, @@ -58,8 +58,8 @@ const unsigned char _Py_M__importlib_external[] = { 100,117,108,101,46,10,10,218,3,119,105,110,218,6,99,121, 103,119,105,110,218,6,100,97,114,119,105,110,99,0,0,0, 0,0,0,0,0,1,0,0,0,3,0,0,0,3,0,0, - 0,115,60,0,0,0,116,0,106,1,106,2,116,3,131,1, - 114,48,116,0,106,1,106,2,116,4,131,1,114,30,100,1, + 0,115,60,0,0,0,116,0,106,1,160,2,116,3,161,1, + 114,48,116,0,106,1,160,2,116,4,161,1,114,30,100,1, 137,0,110,4,100,2,137,0,135,0,102,1,100,3,100,4, 132,8,125,0,110,8,100,5,100,4,132,0,125,0,124,0, 83,0,41,6,78,90,12,80,89,84,72,79,78,67,65,83, @@ -97,9 +97,9 @@ const unsigned char _Py_M__importlib_external[] = { 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, 30,0,0,0,115,14,0,0,0,0,1,12,1,12,1,6, 2,4,2,14,4,8,3,114,13,0,0,0,99,1,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0, 0,115,20,0,0,0,116,0,124,0,131,1,100,1,64,0, - 106,1,100,2,100,3,131,2,83,0,41,4,122,42,67,111, + 160,1,100,2,100,3,161,2,83,0,41,4,122,42,67,111, 110,118,101,114,116,32,97,32,51,50,45,98,105,116,32,105, 110,116,101,103,101,114,32,116,111,32,108,105,116,116,108,101, 45,101,110,100,105,97,110,46,108,3,0,0,0,255,127,255, @@ -108,9 +108,9 @@ const unsigned char _Py_M__importlib_external[] = { 115,41,1,218,1,120,114,4,0,0,0,114,4,0,0,0, 114,6,0,0,0,218,7,95,119,95,108,111,110,103,47,0, 0,0,115,2,0,0,0,0,2,114,19,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,12,0,0,0,116,0,106,1,124,0,100,1, - 131,2,83,0,41,2,122,47,67,111,110,118,101,114,116,32, + 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, + 0,0,0,115,12,0,0,0,116,0,160,1,124,0,100,1, + 161,2,83,0,41,2,122,47,67,111,110,118,101,114,116,32, 52,32,98,121,116,101,115,32,105,110,32,108,105,116,116,108, 101,45,101,110,100,105,97,110,32,116,111,32,97,110,32,105, 110,116,101,103,101,114,46,114,15,0,0,0,41,2,114,16, @@ -119,14 +119,14 @@ const unsigned char _Py_M__importlib_external[] = { 0,114,4,0,0,0,114,6,0,0,0,218,7,95,114,95, 108,111,110,103,52,0,0,0,115,2,0,0,0,0,2,114, 21,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,20,0,0,0,116,0, - 106,1,100,1,100,2,132,0,124,0,68,0,131,1,131,1, + 0,4,0,0,0,71,0,0,0,115,20,0,0,0,116,0, + 160,1,100,1,100,2,132,0,124,0,68,0,131,1,161,1, 83,0,41,3,122,31,82,101,112,108,97,99,101,109,101,110, 116,32,102,111,114,32,111,115,46,112,97,116,104,46,106,111, 105,110,40,41,46,99,1,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,83,0,0,0,115,26,0,0,0,103, - 0,124,0,93,18,125,1,124,1,114,4,124,1,106,0,116, - 1,131,1,145,2,113,4,83,0,114,4,0,0,0,41,2, + 0,0,5,0,0,0,83,0,0,0,115,26,0,0,0,103, + 0,124,0,93,18,125,1,124,1,114,4,124,1,160,0,116, + 1,161,1,145,2,113,4,83,0,114,4,0,0,0,41,2, 218,6,114,115,116,114,105,112,218,15,112,97,116,104,95,115, 101,112,97,114,97,116,111,114,115,41,2,218,2,46,48,218, 4,112,97,114,116,114,4,0,0,0,114,4,0,0,0,114, @@ -141,7 +141,7 @@ const unsigned char _Py_M__importlib_external[] = { 2,10,1,114,30,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,96,0, 0,0,116,0,116,1,131,1,100,1,107,2,114,36,124,0, - 106,2,116,3,131,1,92,3,125,1,125,2,125,3,124,1, + 160,2,116,3,161,1,92,3,125,1,125,2,125,3,124,1, 124,3,102,2,83,0,120,50,116,4,124,0,131,1,68,0, 93,38,125,4,124,4,116,1,107,6,114,46,124,0,106,5, 124,4,100,1,100,2,141,2,92,2,125,1,125,3,124,1, @@ -158,8 +158,8 @@ const unsigned char _Py_M__importlib_external[] = { 6,0,0,0,218,11,95,112,97,116,104,95,115,112,108,105, 116,63,0,0,0,115,16,0,0,0,0,2,12,1,16,1, 8,1,14,1,8,1,18,1,12,1,114,40,0,0,0,99, - 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, - 67,0,0,0,115,10,0,0,0,116,0,106,1,124,0,131, + 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,10,0,0,0,116,0,160,1,124,0,161, 1,83,0,41,1,122,126,83,116,97,116,32,116,104,101,32, 112,97,116,104,46,10,10,32,32,32,32,77,97,100,101,32, 97,32,115,101,112,97,114,97,116,101,32,102,117,110,99,116, @@ -197,7 +197,7 @@ const unsigned char _Py_M__importlib_external[] = { 95,112,97,116,104,95,105,115,102,105,108,101,94,0,0,0, 115,2,0,0,0,0,2,114,46,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,22,0,0,0,124,0,115,12,116,0,106,1,131,0, + 0,115,22,0,0,0,124,0,115,12,116,0,160,1,161,0, 125,0,116,2,124,0,100,1,131,2,83,0,41,2,122,30, 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, 111,115,46,112,97,116,104,46,105,115,100,105,114,46,105,0, @@ -207,15 +207,15 @@ const unsigned char _Py_M__importlib_external[] = { 112,97,116,104,95,105,115,100,105,114,99,0,0,0,115,6, 0,0,0,0,2,4,1,8,1,114,48,0,0,0,233,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,162,0,0,0,100,1,106, - 0,124,0,116,1,124,0,131,1,131,2,125,3,116,2,106, + 17,0,0,0,67,0,0,0,115,162,0,0,0,100,1,160, + 0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,160, 3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,106, - 6,66,0,124,2,100,2,64,0,131,3,125,4,121,50,116, - 7,106,8,124,4,100,3,131,2,143,16,125,5,124,5,106, - 9,124,1,131,1,1,0,87,0,100,4,81,0,82,0,88, - 0,116,2,106,10,124,3,124,0,131,2,1,0,87,0,110, + 6,66,0,124,2,100,2,64,0,161,3,125,4,121,50,116, + 7,160,8,124,4,100,3,161,2,143,16,125,5,124,5,160, + 9,124,1,161,1,1,0,87,0,100,4,81,0,82,0,88, + 0,116,2,160,10,124,3,124,0,161,2,1,0,87,0,110, 58,4,0,116,11,107,10,114,156,1,0,1,0,1,0,121, - 14,116,2,106,12,124,3,131,1,1,0,87,0,110,20,4, + 14,116,2,160,12,124,3,161,1,1,0,87,0,110,20,4, 0,116,11,107,10,114,148,1,0,1,0,1,0,89,0,110, 2,88,0,130,0,89,0,110,2,88,0,100,4,83,0,41, 5,122,162,66,101,115,116,45,101,102,102,111,114,116,32,102, @@ -242,26 +242,26 @@ const unsigned char _Py_M__importlib_external[] = { 101,95,97,116,111,109,105,99,106,0,0,0,115,26,0,0, 0,0,5,16,1,6,1,26,1,2,3,14,1,20,1,16, 1,14,1,2,1,14,1,14,1,6,1,114,58,0,0,0, - 105,51,13,0,0,233,2,0,0,0,114,15,0,0,0,115, + 105,62,13,0,0,233,2,0,0,0,114,15,0,0,0,115, 2,0,0,0,13,10,90,11,95,95,112,121,99,97,99,104, 101,95,95,122,4,111,112,116,45,122,3,46,112,121,122,4, 46,112,121,99,78,41,1,218,12,111,112,116,105,109,105,122, 97,116,105,111,110,99,2,0,0,0,1,0,0,0,11,0, 0,0,6,0,0,0,67,0,0,0,115,244,0,0,0,124, - 1,100,1,107,9,114,52,116,0,106,1,100,2,116,2,131, + 1,100,1,107,9,114,52,116,0,160,1,100,2,116,2,161, 2,1,0,124,2,100,1,107,9,114,40,100,3,125,3,116, 3,124,3,131,1,130,1,124,1,114,48,100,4,110,2,100, - 5,125,2,116,4,106,5,124,0,131,1,125,0,116,6,124, - 0,131,1,92,2,125,4,125,5,124,5,106,7,100,6,131, + 5,125,2,116,4,160,5,124,0,161,1,125,0,116,6,124, + 0,131,1,92,2,125,4,125,5,124,5,160,7,100,6,161, 1,92,3,125,6,125,7,125,8,116,8,106,9,106,10,125, 9,124,9,100,1,107,8,114,114,116,11,100,7,131,1,130, - 1,100,4,106,12,124,6,114,126,124,6,110,2,124,8,124, - 7,124,9,103,3,131,1,125,10,124,2,100,1,107,8,114, + 1,100,4,160,12,124,6,114,126,124,6,110,2,124,8,124, + 7,124,9,103,3,161,1,125,10,124,2,100,1,107,8,114, 172,116,8,106,13,106,14,100,8,107,2,114,164,100,4,125, 2,110,8,116,8,106,13,106,14,125,2,116,15,124,2,131, - 1,125,2,124,2,100,4,107,3,114,224,124,2,106,16,131, - 0,115,210,116,17,100,9,106,18,124,2,131,1,131,1,130, - 1,100,10,106,18,124,10,116,19,124,2,131,3,125,10,116, + 1,125,2,124,2,100,4,107,3,114,224,124,2,160,16,161, + 0,115,210,116,17,100,9,160,18,124,2,161,1,131,1,130, + 1,100,10,160,18,124,10,116,19,124,2,161,3,125,10,116, 20,124,4,116,21,124,10,116,22,100,8,25,0,23,0,131, 3,83,0,41,11,97,254,2,0,0,71,105,118,101,110,32, 116,104,101,32,112,97,116,104,32,116,111,32,97,32,46,112, @@ -346,25 +346,25 @@ const unsigned char _Py_M__importlib_external[] = { 103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97, 109,101,114,4,0,0,0,114,4,0,0,0,114,6,0,0, 0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111, - 117,114,99,101,7,1,0,0,115,48,0,0,0,0,18,8, + 117,114,99,101,8,1,0,0,115,48,0,0,0,0,18,8, 1,6,1,6,1,8,1,4,1,8,1,12,1,10,1,12, 1,16,1,8,1,8,1,8,1,24,1,8,1,12,1,6, 2,8,1,8,1,8,1,8,1,14,1,14,1,114,83,0, 0,0,99,1,0,0,0,0,0,0,0,8,0,0,0,5, 0,0,0,67,0,0,0,115,230,0,0,0,116,0,106,1, 106,2,100,1,107,8,114,20,116,3,100,2,131,1,130,1, - 116,4,106,5,124,0,131,1,125,0,116,6,124,0,131,1, + 116,4,160,5,124,0,161,1,125,0,116,6,124,0,131,1, 92,2,125,1,125,2,116,6,124,1,131,1,92,2,125,1, - 125,3,124,3,116,7,107,3,114,78,116,8,100,3,106,9, - 116,7,124,0,131,2,131,1,130,1,124,2,106,10,100,4, - 131,1,125,4,124,4,100,11,107,7,114,112,116,8,100,7, - 106,9,124,2,131,1,131,1,130,1,110,86,124,4,100,6, - 107,2,114,198,124,2,106,11,100,4,100,5,131,2,100,12, - 25,0,125,5,124,5,106,12,116,13,131,1,115,160,116,8, - 100,8,106,9,116,13,131,1,131,1,130,1,124,5,116,14, - 116,13,131,1,100,1,133,2,25,0,125,6,124,6,106,15, - 131,0,115,198,116,8,100,9,106,9,124,5,131,1,131,1, - 130,1,124,2,106,16,100,4,131,1,100,10,25,0,125,7, + 125,3,124,3,116,7,107,3,114,78,116,8,100,3,160,9, + 116,7,124,0,161,2,131,1,130,1,124,2,160,10,100,4, + 161,1,125,4,124,4,100,11,107,7,114,112,116,8,100,7, + 160,9,124,2,161,1,131,1,130,1,110,86,124,4,100,6, + 107,2,114,198,124,2,160,11,100,4,100,5,161,2,100,12, + 25,0,125,5,124,5,160,12,116,13,161,1,115,160,116,8, + 100,8,160,9,116,13,161,1,131,1,130,1,124,5,116,14, + 116,13,131,1,100,1,133,2,25,0,125,6,124,6,160,15, + 161,0,115,198,116,8,100,9,160,9,124,5,161,1,131,1, + 130,1,124,2,160,16,100,4,161,1,100,10,25,0,125,7, 116,17,124,1,124,7,116,18,100,10,25,0,23,0,131,2, 83,0,41,13,97,110,1,0,0,71,105,118,101,110,32,116, 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, @@ -420,15 +420,15 @@ const unsigned char _Py_M__importlib_external[] = { 112,116,95,108,101,118,101,108,90,13,98,97,115,101,95,102, 105,108,101,110,97,109,101,114,4,0,0,0,114,4,0,0, 0,114,6,0,0,0,218,17,115,111,117,114,99,101,95,102, - 114,111,109,95,99,97,99,104,101,52,1,0,0,115,46,0, + 114,111,109,95,99,97,99,104,101,53,1,0,0,115,46,0, 0,0,0,9,12,1,8,1,10,1,12,1,12,1,8,1, 6,1,10,1,10,1,8,1,6,1,10,1,8,1,16,1, 10,1,6,1,8,1,16,1,8,1,6,1,8,1,14,1, 114,89,0,0,0,99,1,0,0,0,0,0,0,0,5,0, 0,0,12,0,0,0,67,0,0,0,115,128,0,0,0,116, 0,124,0,131,1,100,1,107,2,114,16,100,2,83,0,124, - 0,106,1,100,3,131,1,92,3,125,1,125,2,125,3,124, - 1,12,0,115,58,124,3,106,2,131,0,100,7,100,8,133, + 0,160,1,100,3,161,1,92,3,125,1,125,2,125,3,124, + 1,12,0,115,58,124,3,160,2,161,0,100,7,100,8,133, 2,25,0,100,6,107,3,114,62,124,0,83,0,121,12,116, 3,124,0,131,1,125,4,87,0,110,36,4,0,116,4,116, 5,102,2,107,10,114,110,1,0,1,0,1,0,124,0,100, @@ -456,20 +456,20 @@ const unsigned char _Py_M__importlib_external[] = { 115,105,111,110,218,11,115,111,117,114,99,101,95,112,97,116, 104,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, 218,15,95,103,101,116,95,115,111,117,114,99,101,102,105,108, - 101,86,1,0,0,115,20,0,0,0,0,7,12,1,4,1, + 101,87,1,0,0,115,20,0,0,0,0,7,12,1,4,1, 16,1,26,1,4,1,2,1,12,1,18,1,18,1,114,95, 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, - 11,0,0,0,67,0,0,0,115,72,0,0,0,124,0,106, - 0,116,1,116,2,131,1,131,1,114,46,121,8,116,3,124, + 11,0,0,0,67,0,0,0,115,72,0,0,0,124,0,160, + 0,116,1,116,2,131,1,161,1,114,46,121,8,116,3,124, 0,131,1,83,0,4,0,116,4,107,10,114,42,1,0,1, - 0,1,0,89,0,113,68,88,0,110,22,124,0,106,0,116, - 1,116,5,131,1,131,1,114,64,124,0,83,0,100,0,83, + 0,1,0,89,0,113,68,88,0,110,22,124,0,160,0,116, + 1,116,5,131,1,161,1,114,64,124,0,83,0,100,0,83, 0,100,0,83,0,41,1,78,41,6,218,8,101,110,100,115, 119,105,116,104,218,5,116,117,112,108,101,114,88,0,0,0, 114,83,0,0,0,114,70,0,0,0,114,78,0,0,0,41, 1,218,8,102,105,108,101,110,97,109,101,114,4,0,0,0, 114,4,0,0,0,114,6,0,0,0,218,11,95,103,101,116, - 95,99,97,99,104,101,100,105,1,0,0,115,16,0,0,0, + 95,99,97,99,104,101,100,106,1,0,0,115,16,0,0,0, 0,1,14,1,2,1,8,1,14,1,8,1,14,1,4,2, 114,99,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,52,0,0,0,121, @@ -483,7 +483,7 @@ const unsigned char _Py_M__importlib_external[] = { 128,0,0,0,41,3,114,41,0,0,0,114,43,0,0,0, 114,42,0,0,0,41,2,114,37,0,0,0,114,44,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,10,95,99,97,108,99,95,109,111,100,101,117,1,0,0, + 218,10,95,99,97,108,99,95,109,111,100,101,118,1,0,0, 115,12,0,0,0,0,2,2,1,14,1,14,1,10,3,8, 1,114,101,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,68,0,0,0, @@ -521,7 +521,7 @@ const unsigned char _Py_M__importlib_external[] = { 114,103,115,90,6,107,119,97,114,103,115,41,1,218,6,109, 101,116,104,111,100,114,4,0,0,0,114,6,0,0,0,218, 19,95,99,104,101,99,107,95,110,97,109,101,95,119,114,97, - 112,112,101,114,137,1,0,0,115,12,0,0,0,0,1,8, + 112,112,101,114,138,1,0,0,115,12,0,0,0,0,1,8, 1,8,1,10,1,4,1,18,1,122,40,95,99,104,101,99, 107,95,110,97,109,101,46,60,108,111,99,97,108,115,62,46, 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, @@ -529,8 +529,8 @@ const unsigned char _Py_M__importlib_external[] = { 7,0,0,0,83,0,0,0,115,60,0,0,0,120,40,100, 5,68,0,93,32,125,2,116,0,124,1,124,2,131,2,114, 6,116,1,124,0,124,2,116,2,124,1,124,2,131,2,131, - 3,1,0,113,6,87,0,124,0,106,3,106,4,124,1,106, - 3,131,1,1,0,100,0,83,0,41,6,78,218,10,95,95, + 3,1,0,113,6,87,0,124,0,106,3,160,4,124,1,106, + 3,161,1,1,0,100,0,83,0,41,6,78,218,10,95,95, 109,111,100,117,108,101,95,95,218,8,95,95,110,97,109,101, 95,95,218,12,95,95,113,117,97,108,110,97,109,101,95,95, 218,7,95,95,100,111,99,95,95,41,4,114,108,0,0,0, @@ -540,7 +540,7 @@ const unsigned char _Py_M__importlib_external[] = { 100,105,99,116,95,95,218,6,117,112,100,97,116,101,41,3, 90,3,110,101,119,90,3,111,108,100,114,55,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,5, - 95,119,114,97,112,148,1,0,0,115,8,0,0,0,0,1, + 95,119,114,97,112,149,1,0,0,115,8,0,0,0,0,1, 10,1,10,1,22,1,122,26,95,99,104,101,99,107,95,110, 97,109,101,46,60,108,111,99,97,108,115,62,46,95,119,114, 97,112,41,1,78,41,3,218,10,95,98,111,111,116,115,116, @@ -548,13 +548,13 @@ const unsigned char _Py_M__importlib_external[] = { 114,111,114,41,3,114,106,0,0,0,114,107,0,0,0,114, 117,0,0,0,114,4,0,0,0,41,1,114,106,0,0,0, 114,6,0,0,0,218,11,95,99,104,101,99,107,95,110,97, - 109,101,129,1,0,0,115,14,0,0,0,0,8,14,7,2, + 109,101,130,1,0,0,115,14,0,0,0,0,8,14,7,2, 1,10,1,14,2,14,5,10,1,114,120,0,0,0,99,2, - 0,0,0,0,0,0,0,5,0,0,0,4,0,0,0,67, - 0,0,0,115,60,0,0,0,124,0,106,0,124,1,131,1, + 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,67, + 0,0,0,115,60,0,0,0,124,0,160,0,124,1,161,1, 92,2,125,2,125,3,124,2,100,1,107,8,114,56,116,1, - 124,3,131,1,114,56,100,2,125,4,116,2,106,3,124,4, - 106,4,124,3,100,3,25,0,131,1,116,5,131,2,1,0, + 124,3,131,1,114,56,100,2,125,4,116,2,160,3,124,4, + 160,4,124,3,100,3,25,0,161,1,116,5,161,2,1,0, 124,2,83,0,41,4,122,155,84,114,121,32,116,111,32,102, 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, @@ -576,7 +576,7 @@ const unsigned char _Py_M__importlib_external[] = { 101,114,218,8,112,111,114,116,105,111,110,115,218,3,109,115, 103,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, 218,17,95,102,105,110,100,95,109,111,100,117,108,101,95,115, - 104,105,109,157,1,0,0,115,10,0,0,0,0,10,14,1, + 104,105,109,158,1,0,0,115,10,0,0,0,0,10,14,1, 16,1,4,1,22,1,114,127,0,0,0,99,4,0,0,0, 0,0,0,0,11,0,0,0,22,0,0,0,67,0,0,0, 115,136,1,0,0,105,0,125,4,124,2,100,1,107,9,114, @@ -584,25 +584,25 @@ const unsigned char _Py_M__importlib_external[] = { 3,100,1,107,9,114,42,124,3,124,4,100,4,60,0,124, 0,100,1,100,5,133,2,25,0,125,5,124,0,100,5,100, 6,133,2,25,0,125,6,124,0,100,6,100,7,133,2,25, - 0,125,7,124,5,116,0,107,3,114,124,100,8,106,1,124, - 2,124,5,131,2,125,8,116,2,106,3,100,9,124,8,131, + 0,125,7,124,5,116,0,107,3,114,124,100,8,160,1,124, + 2,124,5,161,2,125,8,116,2,160,3,100,9,124,8,161, 2,1,0,116,4,124,8,102,1,124,4,142,1,130,1,110, - 86,116,5,124,6,131,1,100,5,107,3,114,168,100,10,106, - 1,124,2,131,1,125,8,116,2,106,3,100,9,124,8,131, + 86,116,5,124,6,131,1,100,5,107,3,114,168,100,10,160, + 1,124,2,161,1,125,8,116,2,160,3,100,9,124,8,161, 2,1,0,116,6,124,8,131,1,130,1,110,42,116,5,124, - 7,131,1,100,5,107,3,114,210,100,11,106,1,124,2,131, - 1,125,8,116,2,106,3,100,9,124,8,131,2,1,0,116, + 7,131,1,100,5,107,3,114,210,100,11,160,1,124,2,161, + 1,125,8,116,2,160,3,100,9,124,8,161,2,1,0,116, 6,124,8,131,1,130,1,124,1,100,1,107,9,144,1,114, 124,121,16,116,7,124,1,100,12,25,0,131,1,125,9,87, 0,110,22,4,0,116,8,107,10,144,1,114,2,1,0,1, 0,1,0,89,0,110,50,88,0,116,9,124,6,131,1,124, - 9,107,3,144,1,114,52,100,13,106,1,124,2,131,1,125, - 8,116,2,106,3,100,9,124,8,131,2,1,0,116,4,124, + 9,107,3,144,1,114,52,100,13,160,1,124,2,161,1,125, + 8,116,2,160,3,100,9,124,8,161,2,1,0,116,4,124, 8,102,1,124,4,142,1,130,1,121,16,124,1,100,14,25, 0,100,15,64,0,125,10,87,0,110,22,4,0,116,8,107, 10,144,1,114,90,1,0,1,0,1,0,89,0,110,34,88, 0,116,9,124,7,131,1,124,10,107,3,144,1,114,124,116, - 4,100,13,106,1,124,2,131,1,102,1,124,4,142,1,130, + 4,100,13,160,1,124,2,161,1,102,1,124,4,142,1,130, 1,124,0,100,7,100,1,133,2,25,0,83,0,41,16,97, 122,1,0,0,86,97,108,105,100,97,116,101,32,116,104,101, 32,104,101,97,100,101,114,32,111,102,32,116,104,101,32,112, @@ -656,18 +656,18 @@ const unsigned char _Py_M__importlib_external[] = { 115,111,117,114,99,101,95,115,105,122,101,114,4,0,0,0, 114,4,0,0,0,114,6,0,0,0,218,25,95,118,97,108, 105,100,97,116,101,95,98,121,116,101,99,111,100,101,95,104, - 101,97,100,101,114,174,1,0,0,115,76,0,0,0,0,11, + 101,97,100,101,114,175,1,0,0,115,76,0,0,0,0,11, 4,1,8,1,10,3,4,1,8,1,8,1,12,1,12,1, 12,1,8,1,12,1,12,1,14,1,12,1,10,1,12,1, 10,1,12,1,10,1,12,1,8,1,10,1,2,1,16,1, 16,1,6,2,14,1,10,1,12,1,12,1,2,1,16,1, 16,1,6,2,14,1,12,1,6,1,114,139,0,0,0,99, 4,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, - 67,0,0,0,115,80,0,0,0,116,0,106,1,124,0,131, - 1,125,4,116,2,124,4,116,3,131,2,114,56,116,4,106, - 5,100,1,124,2,131,2,1,0,124,3,100,2,107,9,114, - 52,116,6,106,7,124,4,124,3,131,2,1,0,124,4,83, - 0,116,8,100,3,106,9,124,2,131,1,124,1,124,2,100, + 67,0,0,0,115,80,0,0,0,116,0,160,1,124,0,161, + 1,125,4,116,2,124,4,116,3,131,2,114,56,116,4,160, + 5,100,1,124,2,161,2,1,0,124,3,100,2,107,9,114, + 52,116,6,160,7,124,4,124,3,161,2,1,0,124,4,83, + 0,116,8,100,3,160,9,124,2,161,1,124,1,124,2,100, 4,141,3,130,1,100,2,83,0,41,5,122,60,67,111,109, 112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115, 32,114,101,116,117,114,110,101,100,32,98,121,32,95,118,97, @@ -685,14 +685,14 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,114,102,0,0,0,114,93,0,0,0,114,94,0, 0,0,218,4,99,111,100,101,114,4,0,0,0,114,4,0, 0,0,114,6,0,0,0,218,17,95,99,111,109,112,105,108, - 101,95,98,121,116,101,99,111,100,101,229,1,0,0,115,16, + 101,95,98,121,116,101,99,111,100,101,230,1,0,0,115,16, 0,0,0,0,2,10,1,10,1,12,1,8,1,12,1,4, 2,10,1,114,145,0,0,0,114,62,0,0,0,99,3,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, + 0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0, 0,0,115,56,0,0,0,116,0,116,1,131,1,125,3,124, - 3,106,2,116,3,124,1,131,1,131,1,1,0,124,3,106, - 2,116,3,124,2,131,1,131,1,1,0,124,3,106,2,116, - 4,106,5,124,0,131,1,131,1,1,0,124,3,83,0,41, + 3,160,2,116,3,124,1,131,1,161,1,1,0,124,3,160, + 2,116,3,124,2,131,1,161,1,1,0,124,3,160,2,116, + 4,160,5,124,0,161,1,161,1,1,0,124,3,83,0,41, 1,122,80,67,111,109,112,105,108,101,32,97,32,99,111,100, 101,32,111,98,106,101,99,116,32,105,110,116,111,32,98,121, 116,101,99,111,100,101,32,102,111,114,32,119,114,105,116,105, @@ -704,14 +704,14 @@ const unsigned char _Py_M__importlib_external[] = { 114,144,0,0,0,114,130,0,0,0,114,138,0,0,0,114, 56,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, 0,0,0,218,17,95,99,111,100,101,95,116,111,95,98,121, - 116,101,99,111,100,101,241,1,0,0,115,10,0,0,0,0, + 116,101,99,111,100,101,242,1,0,0,115,10,0,0,0,0, 3,8,1,14,1,14,1,16,1,114,148,0,0,0,99,1, - 0,0,0,0,0,0,0,5,0,0,0,4,0,0,0,67, + 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,67, 0,0,0,115,62,0,0,0,100,1,100,2,108,0,125,1, - 116,1,106,2,124,0,131,1,106,3,125,2,124,1,106,4, - 124,2,131,1,125,3,116,1,106,5,100,2,100,3,131,2, - 125,4,124,4,106,6,124,0,106,6,124,3,100,1,25,0, - 131,1,131,1,83,0,41,4,122,121,68,101,99,111,100,101, + 116,1,160,2,124,0,161,1,106,3,125,2,124,1,160,4, + 124,2,161,1,125,3,116,1,160,5,100,2,100,3,161,2, + 125,4,124,4,160,6,124,0,160,6,124,3,100,1,25,0, + 161,1,161,1,83,0,41,4,122,121,68,101,99,111,100,101, 32,98,121,116,101,115,32,114,101,112,114,101,115,101,110,116, 105,110,103,32,115,111,117,114,99,101,32,99,111,100,101,32, 97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,115, @@ -731,29 +731,29 @@ const unsigned char _Py_M__importlib_external[] = { 101,110,99,111,100,105,110,103,90,15,110,101,119,108,105,110, 101,95,100,101,99,111,100,101,114,114,4,0,0,0,114,4, 0,0,0,114,6,0,0,0,218,13,100,101,99,111,100,101, - 95,115,111,117,114,99,101,251,1,0,0,115,10,0,0,0, + 95,115,111,117,114,99,101,252,1,0,0,115,10,0,0,0, 0,5,8,1,12,1,10,1,12,1,114,153,0,0,0,41, 2,114,124,0,0,0,218,26,115,117,98,109,111,100,117,108, 101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111, 110,115,99,2,0,0,0,2,0,0,0,9,0,0,0,19, 0,0,0,67,0,0,0,115,18,1,0,0,124,1,100,1, 107,8,114,60,100,2,125,1,116,0,124,2,100,3,131,2, - 114,70,121,14,124,2,106,1,124,0,131,1,125,1,87,0, + 114,70,121,14,124,2,160,1,124,0,161,1,125,1,87,0, 113,70,4,0,116,2,107,10,114,56,1,0,1,0,1,0, - 89,0,113,70,88,0,110,10,116,3,106,4,124,1,131,1, + 89,0,113,70,88,0,110,10,116,3,160,4,124,1,161,1, 125,1,116,5,106,6,124,0,124,2,124,1,100,4,141,3, 125,4,100,5,124,4,95,7,124,2,100,1,107,8,114,156, 120,54,116,8,131,0,68,0,93,40,92,2,125,5,125,6, - 124,1,106,9,116,10,124,6,131,1,131,1,114,108,124,5, + 124,1,160,9,116,10,124,6,131,1,161,1,114,108,124,5, 124,0,124,1,131,2,125,2,124,2,124,4,95,11,80,0, 113,108,87,0,100,1,83,0,124,3,116,12,107,8,114,222, - 116,0,124,2,100,6,131,2,114,228,121,14,124,2,106,13, - 124,0,131,1,125,7,87,0,110,20,4,0,116,2,107,10, + 116,0,124,2,100,6,131,2,114,228,121,14,124,2,160,13, + 124,0,161,1,125,7,87,0,110,20,4,0,116,2,107,10, 114,208,1,0,1,0,1,0,89,0,113,228,88,0,124,7, 114,228,103,0,124,4,95,14,110,6,124,3,124,4,95,14, 124,4,106,14,103,0,107,2,144,1,114,14,124,1,144,1, 114,14,116,15,124,1,131,1,100,7,25,0,125,8,124,4, - 106,14,106,16,124,8,131,1,1,0,124,4,83,0,41,8, + 106,14,160,16,124,8,161,1,1,0,124,4,83,0,41,8, 97,61,1,0,0,82,101,116,117,114,110,32,97,32,109,111, 100,117,108,101,32,115,112,101,99,32,98,97,115,101,100,32, 111,110,32,97,32,102,105,108,101,32,108,111,99,97,116,105, @@ -793,7 +793,7 @@ const unsigned char _Py_M__importlib_external[] = { 7,100,105,114,110,97,109,101,114,4,0,0,0,114,4,0, 0,0,114,6,0,0,0,218,23,115,112,101,99,95,102,114, 111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,110, - 12,2,0,0,115,62,0,0,0,0,12,8,4,4,1,10, + 13,2,0,0,115,62,0,0,0,0,12,8,4,4,1,10, 2,2,1,14,1,14,1,8,2,10,8,16,1,6,3,8, 1,16,1,14,1,10,1,6,1,6,2,4,3,8,2,10, 1,2,1,14,1,14,1,6,2,4,1,8,2,6,1,12, @@ -819,27 +819,27 @@ const unsigned char _Py_M__importlib_external[] = { 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,50,0,0,0,121,14,116,0,106,1, - 116,0,106,2,124,1,131,2,83,0,4,0,116,3,107,10, - 114,44,1,0,1,0,1,0,116,0,106,1,116,0,106,4, - 124,1,131,2,83,0,88,0,100,0,83,0,41,1,78,41, + 0,67,0,0,0,115,50,0,0,0,121,14,116,0,160,1, + 116,0,106,2,124,1,161,2,83,0,4,0,116,3,107,10, + 114,44,1,0,1,0,1,0,116,0,160,1,116,0,106,4, + 124,1,161,2,83,0,88,0,100,0,83,0,41,1,78,41, 5,218,7,95,119,105,110,114,101,103,90,7,79,112,101,110, 75,101,121,90,17,72,75,69,89,95,67,85,82,82,69,78, 84,95,85,83,69,82,114,42,0,0,0,90,18,72,75,69, 89,95,76,79,67,65,76,95,77,65,67,72,73,78,69,41, 2,218,3,99,108,115,114,5,0,0,0,114,4,0,0,0, 114,4,0,0,0,114,6,0,0,0,218,14,95,111,112,101, - 110,95,114,101,103,105,115,116,114,121,92,2,0,0,115,8, + 110,95,114,101,103,105,115,116,114,121,93,2,0,0,115,8, 0,0,0,0,2,2,1,14,1,14,1,122,36,87,105,110, 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, 101,114,46,95,111,112,101,110,95,114,101,103,105,115,116,114, - 121,99,2,0,0,0,0,0,0,0,6,0,0,0,16,0, + 121,99,2,0,0,0,0,0,0,0,6,0,0,0,17,0, 0,0,67,0,0,0,115,112,0,0,0,124,0,106,0,114, 14,124,0,106,1,125,2,110,6,124,0,106,2,125,2,124, 2,106,3,124,1,100,1,116,4,106,5,100,0,100,2,133, - 2,25,0,22,0,100,3,141,2,125,3,121,38,124,0,106, - 6,124,3,131,1,143,18,125,4,116,7,106,8,124,4,100, - 4,131,2,125,5,87,0,100,0,81,0,82,0,88,0,87, + 2,25,0,22,0,100,3,141,2,125,3,121,38,124,0,160, + 6,124,3,161,1,143,18,125,4,116,7,160,8,124,4,100, + 4,161,2,125,5,87,0,100,0,81,0,82,0,88,0,87, 0,110,20,4,0,116,9,107,10,114,106,1,0,1,0,1, 0,100,0,83,0,88,0,124,5,83,0,41,5,78,122,5, 37,100,46,37,100,114,59,0,0,0,41,2,114,123,0,0, @@ -855,18 +855,18 @@ const unsigned char _Py_M__importlib_external[] = { 121,114,5,0,0,0,90,4,104,107,101,121,218,8,102,105, 108,101,112,97,116,104,114,4,0,0,0,114,4,0,0,0, 114,6,0,0,0,218,16,95,115,101,97,114,99,104,95,114, - 101,103,105,115,116,114,121,99,2,0,0,115,22,0,0,0, + 101,103,105,115,116,114,121,100,2,0,0,115,22,0,0,0, 0,2,6,1,8,2,6,1,6,1,22,1,2,1,12,1, 26,1,14,1,6,1,122,38,87,105,110,100,111,119,115,82, 101,103,105,115,116,114,121,70,105,110,100,101,114,46,95,115, 101,97,114,99,104,95,114,101,103,105,115,116,114,121,78,99, 4,0,0,0,0,0,0,0,8,0,0,0,14,0,0,0, - 67,0,0,0,115,120,0,0,0,124,0,106,0,124,1,131, + 67,0,0,0,115,120,0,0,0,124,0,160,0,124,1,161, 1,125,4,124,4,100,0,107,8,114,22,100,0,83,0,121, 12,116,1,124,4,131,1,1,0,87,0,110,20,4,0,116, 2,107,10,114,54,1,0,1,0,1,0,100,0,83,0,88, 0,120,58,116,3,131,0,68,0,93,48,92,2,125,5,125, - 6,124,4,106,4,116,5,124,6,131,1,131,1,114,64,116, + 6,124,4,160,4,116,5,124,6,131,1,161,1,114,64,116, 6,106,7,124,1,124,5,124,1,124,4,131,2,124,4,100, 1,141,3,125,7,124,7,83,0,113,64,87,0,100,0,83, 0,41,2,78,41,1,114,156,0,0,0,41,8,114,175,0, @@ -877,13 +877,13 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,218,6,116,97,114,103,101,116,114,174,0,0,0, 114,124,0,0,0,114,164,0,0,0,114,162,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,9, - 102,105,110,100,95,115,112,101,99,114,2,0,0,115,26,0, + 102,105,110,100,95,115,112,101,99,115,2,0,0,115,26,0, 0,0,0,2,10,1,8,1,4,1,2,1,12,1,14,1, 6,1,16,1,14,1,6,1,8,1,8,1,122,31,87,105, 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, - 0,0,115,34,0,0,0,124,0,106,0,124,1,124,2,131, + 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, + 0,0,115,34,0,0,0,124,0,160,0,124,1,124,2,161, 2,125,3,124,3,100,1,107,9,114,26,124,3,106,1,83, 0,100,1,83,0,100,1,83,0,41,2,122,108,70,105,110, 100,32,109,111,100,117,108,101,32,110,97,109,101,100,32,105, @@ -896,7 +896,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,114,124,0,0,0,41,4,114,168,0,0,0,114,123,0, 0,0,114,37,0,0,0,114,162,0,0,0,114,4,0,0, 0,114,4,0,0,0,114,6,0,0,0,218,11,102,105,110, - 100,95,109,111,100,117,108,101,130,2,0,0,115,8,0,0, + 100,95,109,111,100,117,108,101,131,2,0,0,115,8,0,0, 0,0,7,12,1,8,1,6,2,122,33,87,105,110,100,111, 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, 46,102,105,110,100,95,109,111,100,117,108,101,41,2,78,78, @@ -906,7 +906,7 @@ const unsigned char _Py_M__importlib_external[] = { 101,116,104,111,100,114,169,0,0,0,114,175,0,0,0,114, 178,0,0,0,114,179,0,0,0,114,4,0,0,0,114,4, 0,0,0,114,4,0,0,0,114,6,0,0,0,114,166,0, - 0,0,80,2,0,0,115,20,0,0,0,8,2,4,3,4, + 0,0,81,2,0,0,115,20,0,0,0,8,2,4,3,4, 3,4,2,4,2,12,7,12,15,2,1,12,15,2,1,114, 166,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,48,0,0,0,101,0, @@ -920,10 +920,10 @@ const unsigned char _Py_M__importlib_external[] = { 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,64,0,0,0,116,0, - 124,0,106,1,124,1,131,1,131,1,100,1,25,0,125,2, - 124,2,106,2,100,2,100,1,131,2,100,3,25,0,125,3, - 124,1,106,3,100,2,131,1,100,4,25,0,125,4,124,3, + 0,4,0,0,0,67,0,0,0,115,64,0,0,0,116,0, + 124,0,160,1,124,1,161,1,131,1,100,1,25,0,125,2, + 124,2,160,2,100,2,100,1,161,2,100,3,25,0,125,3, + 124,1,160,3,100,2,161,1,100,4,25,0,125,4,124,3, 100,5,107,2,111,62,124,4,100,5,107,3,83,0,41,6, 122,141,67,111,110,99,114,101,116,101,32,105,109,112,108,101, 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, @@ -941,7 +941,7 @@ const unsigned char _Py_M__importlib_external[] = { 98,0,0,0,90,13,102,105,108,101,110,97,109,101,95,98, 97,115,101,90,9,116,97,105,108,95,110,97,109,101,114,4, 0,0,0,114,4,0,0,0,114,6,0,0,0,114,157,0, - 0,0,149,2,0,0,115,8,0,0,0,0,3,18,1,16, + 0,0,150,2,0,0,115,8,0,0,0,0,3,18,1,16, 1,14,1,122,24,95,76,111,97,100,101,114,66,97,115,105, 99,115,46,105,115,95,112,97,99,107,97,103,101,99,2,0, 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, @@ -951,14 +951,14 @@ const unsigned char _Py_M__importlib_external[] = { 99,114,101,97,116,105,111,110,46,78,114,4,0,0,0,41, 2,114,104,0,0,0,114,162,0,0,0,114,4,0,0,0, 114,4,0,0,0,114,6,0,0,0,218,13,99,114,101,97, - 116,101,95,109,111,100,117,108,101,157,2,0,0,115,0,0, + 116,101,95,109,111,100,117,108,101,158,2,0,0,115,0,0, 0,0,122,27,95,76,111,97,100,101,114,66,97,115,105,99, 115,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, - 67,0,0,0,115,56,0,0,0,124,0,106,0,124,1,106, - 1,131,1,125,2,124,2,100,1,107,8,114,36,116,2,100, - 2,106,3,124,1,106,1,131,1,131,1,130,1,116,4,106, - 5,116,6,124,2,124,1,106,7,131,3,1,0,100,1,83, + 2,0,0,0,0,0,0,0,3,0,0,0,5,0,0,0, + 67,0,0,0,115,56,0,0,0,124,0,160,0,124,1,106, + 1,161,1,125,2,124,2,100,1,107,8,114,36,116,2,100, + 2,160,3,124,1,106,1,161,1,131,1,130,1,116,4,160, + 5,116,6,124,2,124,1,106,7,161,3,1,0,100,1,83, 0,41,3,122,19,69,120,101,99,117,116,101,32,116,104,101, 32,109,111,100,117,108,101,46,78,122,52,99,97,110,110,111, 116,32,108,111,97,100,32,109,111,100,117,108,101,32,123,33, @@ -971,25 +971,25 @@ const unsigned char _Py_M__importlib_external[] = { 114,115,0,0,0,41,3,114,104,0,0,0,218,6,109,111, 100,117,108,101,114,144,0,0,0,114,4,0,0,0,114,4, 0,0,0,114,6,0,0,0,218,11,101,120,101,99,95,109, - 111,100,117,108,101,160,2,0,0,115,10,0,0,0,0,2, + 111,100,117,108,101,161,2,0,0,115,10,0,0,0,0,2, 12,1,8,1,6,1,10,1,122,25,95,76,111,97,100,101, 114,66,97,115,105,99,115,46,101,120,101,99,95,109,111,100, 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,67,0,0,0,115,12,0,0,0,116,0,106, - 1,124,0,124,1,131,2,83,0,41,1,122,26,84,104,105, + 4,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160, + 1,124,0,124,1,161,2,83,0,41,1,122,26,84,104,105, 115,32,109,111,100,117,108,101,32,105,115,32,100,101,112,114, 101,99,97,116,101,100,46,41,2,114,118,0,0,0,218,17, 95,108,111,97,100,95,109,111,100,117,108,101,95,115,104,105, 109,41,2,114,104,0,0,0,114,123,0,0,0,114,4,0, 0,0,114,4,0,0,0,114,6,0,0,0,218,11,108,111, - 97,100,95,109,111,100,117,108,101,168,2,0,0,115,2,0, + 97,100,95,109,111,100,117,108,101,169,2,0,0,115,2,0, 0,0,0,2,122,25,95,76,111,97,100,101,114,66,97,115, 105,99,115,46,108,111,97,100,95,109,111,100,117,108,101,78, 41,8,114,109,0,0,0,114,108,0,0,0,114,110,0,0, 0,114,111,0,0,0,114,157,0,0,0,114,183,0,0,0, 114,188,0,0,0,114,190,0,0,0,114,4,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,181, - 0,0,0,144,2,0,0,115,10,0,0,0,8,3,4,2, + 0,0,0,145,2,0,0,115,10,0,0,0,8,3,4,2, 8,8,8,3,8,8,114,181,0,0,0,99,0,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, 115,74,0,0,0,101,0,90,1,100,0,90,2,100,1,100, @@ -1014,12 +1014,12 @@ const unsigned char _Py_M__importlib_external[] = { 32,32,32,32,32,32,32,78,41,1,218,7,73,79,69,114, 114,111,114,41,2,114,104,0,0,0,114,37,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,10, - 112,97,116,104,95,109,116,105,109,101,175,2,0,0,115,2, + 112,97,116,104,95,109,116,105,109,101,176,2,0,0,115,2, 0,0,0,0,6,122,23,83,111,117,114,99,101,76,111,97, 100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, - 0,0,0,115,14,0,0,0,100,1,124,0,106,0,124,1, - 131,1,105,1,83,0,41,2,97,170,1,0,0,79,112,116, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, + 0,0,0,115,14,0,0,0,100,1,124,0,160,0,124,1, + 161,1,105,1,83,0,41,2,97,170,1,0,0,79,112,116, 105,111,110,97,108,32,109,101,116,104,111,100,32,114,101,116, 117,114,110,105,110,103,32,97,32,109,101,116,97,100,97,116, 97,32,100,105,99,116,32,102,111,114,32,116,104,101,32,115, @@ -1049,12 +1049,12 @@ const unsigned char _Py_M__importlib_external[] = { 32,32,32,32,32,32,32,114,130,0,0,0,41,1,114,193, 0,0,0,41,2,114,104,0,0,0,114,37,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,10, - 112,97,116,104,95,115,116,97,116,115,183,2,0,0,115,2, + 112,97,116,104,95,115,116,97,116,115,184,2,0,0,115,2, 0,0,0,0,11,122,23,83,111,117,114,99,101,76,111,97, 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, - 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, - 0,0,0,115,12,0,0,0,124,0,106,0,124,2,124,3, - 131,2,83,0,41,1,122,228,79,112,116,105,111,110,97,108, + 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, + 0,0,0,115,12,0,0,0,124,0,160,0,124,2,124,3, + 161,2,83,0,41,1,122,228,79,112,116,105,111,110,97,108, 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, @@ -1073,7 +1073,7 @@ const unsigned char _Py_M__importlib_external[] = { 94,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104, 114,56,0,0,0,114,4,0,0,0,114,4,0,0,0,114, 6,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116, - 101,99,111,100,101,196,2,0,0,115,2,0,0,0,0,8, + 101,99,111,100,101,197,2,0,0,115,2,0,0,0,0,8, 122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95, 99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3, 0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67, @@ -1090,11 +1090,11 @@ const unsigned char _Py_M__importlib_external[] = { 32,32,32,32,32,32,78,114,4,0,0,0,41,3,114,104, 0,0,0,114,37,0,0,0,114,56,0,0,0,114,4,0, 0,0,114,4,0,0,0,114,6,0,0,0,114,195,0,0, - 0,206,2,0,0,115,0,0,0,0,122,21,83,111,117,114, + 0,207,2,0,0,115,0,0,0,0,122,21,83,111,117,114, 99,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, 97,99,2,0,0,0,0,0,0,0,5,0,0,0,16,0, - 0,0,67,0,0,0,115,82,0,0,0,124,0,106,0,124, - 1,131,1,125,2,121,14,124,0,106,1,124,2,131,1,125, + 0,0,67,0,0,0,115,82,0,0,0,124,0,160,0,124, + 1,161,1,125,2,121,14,124,0,160,1,124,2,161,1,125, 3,87,0,110,48,4,0,116,2,107,10,114,72,1,0,125, 4,1,0,122,20,116,3,100,1,124,1,100,2,141,2,124, 4,130,2,87,0,89,0,100,3,100,3,125,4,126,4,88, @@ -1110,7 +1110,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,114,153,0,0,0,41,5,114,104,0,0,0,114,123,0, 0,0,114,37,0,0,0,114,151,0,0,0,218,3,101,120, 99,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,10,103,101,116,95,115,111,117,114,99,101,213,2,0,0, + 218,10,103,101,116,95,115,111,117,114,99,101,214,2,0,0, 115,14,0,0,0,0,2,10,1,2,1,14,1,16,1,4, 1,28,1,122,23,83,111,117,114,99,101,76,111,97,100,101, 114,46,103,101,116,95,115,111,117,114,99,101,114,31,0,0, @@ -1132,31 +1132,31 @@ const unsigned char _Py_M__importlib_external[] = { 112,105,108,101,41,4,114,104,0,0,0,114,56,0,0,0, 114,37,0,0,0,114,200,0,0,0,114,4,0,0,0,114, 4,0,0,0,114,6,0,0,0,218,14,115,111,117,114,99, - 101,95,116,111,95,99,111,100,101,223,2,0,0,115,4,0, + 101,95,116,111,95,99,111,100,101,224,2,0,0,115,4,0, 0,0,0,5,12,1,122,27,83,111,117,114,99,101,76,111, 97,100,101,114,46,115,111,117,114,99,101,95,116,111,95,99, 111,100,101,99,2,0,0,0,0,0,0,0,10,0,0,0, - 43,0,0,0,67,0,0,0,115,94,1,0,0,124,0,106, - 0,124,1,131,1,125,2,100,1,125,3,121,12,116,1,124, + 43,0,0,0,67,0,0,0,115,94,1,0,0,124,0,160, + 0,124,1,161,1,125,2,100,1,125,3,121,12,116,1,124, 2,131,1,125,4,87,0,110,24,4,0,116,2,107,10,114, 50,1,0,1,0,1,0,100,1,125,4,89,0,110,162,88, - 0,121,14,124,0,106,3,124,2,131,1,125,5,87,0,110, + 0,121,14,124,0,160,3,124,2,161,1,125,5,87,0,110, 20,4,0,116,4,107,10,114,86,1,0,1,0,1,0,89, 0,110,126,88,0,116,5,124,5,100,2,25,0,131,1,125, - 3,121,14,124,0,106,6,124,4,131,1,125,6,87,0,110, + 3,121,14,124,0,160,6,124,4,161,1,125,6,87,0,110, 20,4,0,116,7,107,10,114,134,1,0,1,0,1,0,89, 0,110,78,88,0,121,20,116,8,124,6,124,5,124,1,124, 4,100,3,141,4,125,7,87,0,110,24,4,0,116,9,116, 10,102,2,107,10,114,180,1,0,1,0,1,0,89,0,110, - 32,88,0,116,11,106,12,100,4,124,4,124,2,131,3,1, + 32,88,0,116,11,160,12,100,4,124,4,124,2,161,3,1, 0,116,13,124,7,124,1,124,4,124,2,100,5,141,4,83, - 0,124,0,106,6,124,2,131,1,125,8,124,0,106,14,124, - 8,124,2,131,2,125,9,116,11,106,12,100,6,124,2,131, + 0,124,0,160,6,124,2,161,1,125,8,124,0,160,14,124, + 8,124,2,161,2,125,9,116,11,160,12,100,6,124,2,161, 2,1,0,116,15,106,16,12,0,144,1,114,90,124,4,100, 1,107,9,144,1,114,90,124,3,100,1,107,9,144,1,114, 90,116,17,124,9,124,3,116,18,124,8,131,1,131,3,125, - 6,121,30,124,0,106,19,124,2,124,4,124,6,131,3,1, - 0,116,11,106,12,100,7,124,4,131,2,1,0,87,0,110, + 6,121,30,124,0,160,19,124,2,124,4,124,6,161,3,1, + 0,116,11,160,12,100,7,124,4,161,2,1,0,87,0,110, 22,4,0,116,2,107,10,144,1,114,88,1,0,1,0,1, 0,89,0,110,2,88,0,124,9,83,0,41,8,122,190,67, 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, @@ -1189,7 +1189,7 @@ const unsigned char _Py_M__importlib_external[] = { 10,98,121,116,101,115,95,100,97,116,97,114,151,0,0,0, 90,11,99,111,100,101,95,111,98,106,101,99,116,114,4,0, 0,0,114,4,0,0,0,114,6,0,0,0,114,184,0,0, - 0,231,2,0,0,115,78,0,0,0,0,7,10,1,4,1, + 0,232,2,0,0,115,78,0,0,0,0,7,10,1,4,1, 2,1,12,1,14,1,10,2,2,1,14,1,14,1,6,2, 12,1,2,1,14,1,14,1,6,2,2,1,4,1,4,1, 12,1,18,1,6,2,8,1,6,1,6,1,2,1,8,1, @@ -1201,7 +1201,7 @@ const unsigned char _Py_M__importlib_external[] = { 114,196,0,0,0,114,195,0,0,0,114,199,0,0,0,114, 203,0,0,0,114,184,0,0,0,114,4,0,0,0,114,4, 0,0,0,114,4,0,0,0,114,6,0,0,0,114,191,0, - 0,0,173,2,0,0,115,14,0,0,0,8,2,8,8,8, + 0,0,174,2,0,0,115,14,0,0,0,8,2,8,8,8, 13,8,10,8,7,8,10,14,8,114,191,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,80,0,0,0,101,0,90,1,100,0,90,2, @@ -1227,7 +1227,7 @@ const unsigned char _Py_M__importlib_external[] = { 32,102,105,110,100,101,114,46,78,41,2,114,102,0,0,0, 114,37,0,0,0,41,3,114,104,0,0,0,114,123,0,0, 0,114,37,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,182,0,0,0,32,3,0,0,115,4, + 114,6,0,0,0,114,182,0,0,0,33,3,0,0,115,4, 0,0,0,0,3,6,1,122,19,70,105,108,101,76,111,97, 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, @@ -1236,7 +1236,7 @@ const unsigned char _Py_M__importlib_external[] = { 78,41,2,218,9,95,95,99,108,97,115,115,95,95,114,115, 0,0,0,41,2,114,104,0,0,0,218,5,111,116,104,101, 114,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,6,95,95,101,113,95,95,38,3,0,0,115,4,0,0, + 218,6,95,95,101,113,95,95,39,3,0,0,115,4,0,0, 0,0,1,12,1,122,17,70,105,108,101,76,111,97,100,101, 114,46,95,95,101,113,95,95,99,1,0,0,0,0,0,0, 0,1,0,0,0,3,0,0,0,67,0,0,0,115,20,0, @@ -1244,12 +1244,12 @@ const unsigned char _Py_M__importlib_external[] = { 131,1,65,0,83,0,41,1,78,41,3,218,4,104,97,115, 104,114,102,0,0,0,114,37,0,0,0,41,1,114,104,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,218,8,95,95,104,97,115,104,95,95,42,3,0,0,115, + 0,218,8,95,95,104,97,115,104,95,95,43,3,0,0,115, 2,0,0,0,0,1,122,19,70,105,108,101,76,111,97,100, 101,114,46,95,95,104,97,115,104,95,95,99,2,0,0,0, 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0, - 115,16,0,0,0,116,0,116,1,124,0,131,2,106,2,124, - 1,131,1,83,0,41,1,122,100,76,111,97,100,32,97,32, + 115,16,0,0,0,116,0,116,1,124,0,131,2,160,2,124, + 1,161,1,83,0,41,1,122,100,76,111,97,100,32,97,32, 109,111,100,117,108,101,32,102,114,111,109,32,97,32,102,105, 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, @@ -1259,7 +1259,7 @@ const unsigned char _Py_M__importlib_external[] = { 5,115,117,112,101,114,114,207,0,0,0,114,190,0,0,0, 41,2,114,104,0,0,0,114,123,0,0,0,41,1,114,208, 0,0,0,114,4,0,0,0,114,6,0,0,0,114,190,0, - 0,0,45,3,0,0,115,2,0,0,0,0,10,122,22,70, + 0,0,46,3,0,0,115,2,0,0,0,0,10,122,22,70, 105,108,101,76,111,97,100,101,114,46,108,111,97,100,95,109, 111,100,117,108,101,99,2,0,0,0,0,0,0,0,2,0, 0,0,1,0,0,0,67,0,0,0,115,6,0,0,0,124, @@ -1269,19 +1269,19 @@ const unsigned char _Py_M__importlib_external[] = { 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, 101,114,46,41,1,114,37,0,0,0,41,2,114,104,0,0, 0,114,123,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,155,0,0,0,57,3,0,0,115,2, + 114,6,0,0,0,114,155,0,0,0,58,3,0,0,115,2, 0,0,0,0,3,122,23,70,105,108,101,76,111,97,100,101, 114,46,103,101,116,95,102,105,108,101,110,97,109,101,99,2, 0,0,0,0,0,0,0,3,0,0,0,9,0,0,0,67, - 0,0,0,115,32,0,0,0,116,0,106,1,124,1,100,1, - 131,2,143,10,125,2,124,2,106,2,131,0,83,0,81,0, + 0,0,0,115,32,0,0,0,116,0,160,1,124,1,100,1, + 161,2,143,10,125,2,124,2,160,2,161,0,83,0,81,0, 82,0,88,0,100,2,83,0,41,3,122,39,82,101,116,117, 114,110,32,116,104,101,32,100,97,116,97,32,102,114,111,109, 32,112,97,116,104,32,97,115,32,114,97,119,32,98,121,116, 101,115,46,218,1,114,78,41,3,114,52,0,0,0,114,53, 0,0,0,90,4,114,101,97,100,41,3,114,104,0,0,0, 114,37,0,0,0,114,57,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,114,197,0,0,0,62,3, + 4,0,0,0,114,6,0,0,0,114,197,0,0,0,63,3, 0,0,115,4,0,0,0,0,2,14,1,122,19,70,105,108, 101,76,111,97,100,101,114,46,103,101,116,95,100,97,116,97, 41,12,114,109,0,0,0,114,108,0,0,0,114,110,0,0, @@ -1290,7 +1290,7 @@ const unsigned char _Py_M__importlib_external[] = { 155,0,0,0,114,197,0,0,0,90,13,95,95,99,108,97, 115,115,99,101,108,108,95,95,114,4,0,0,0,114,4,0, 0,0,41,1,114,208,0,0,0,114,6,0,0,0,114,207, - 0,0,0,27,3,0,0,115,14,0,0,0,8,3,4,2, + 0,0,0,28,3,0,0,115,14,0,0,0,8,3,4,2, 8,6,8,4,8,3,16,12,12,5,114,207,0,0,0,99, 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, 64,0,0,0,115,46,0,0,0,101,0,90,1,100,0,90, @@ -1311,7 +1311,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,218,8,115,116,95,109,116,105,109,101,90,7,115, 116,95,115,105,122,101,41,3,114,104,0,0,0,114,37,0, 0,0,114,205,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,6,0,0,0,114,194,0,0,0,72,3,0,0,115, + 0,114,6,0,0,0,114,194,0,0,0,73,3,0,0,115, 4,0,0,0,0,2,8,1,122,27,83,111,117,114,99,101, 70,105,108,101,76,111,97,100,101,114,46,112,97,116,104,95, 115,116,97,116,115,99,4,0,0,0,0,0,0,0,5,0, @@ -1321,27 +1321,27 @@ const unsigned char _Py_M__importlib_external[] = { 111,100,101,41,2,114,101,0,0,0,114,195,0,0,0,41, 5,114,104,0,0,0,114,94,0,0,0,114,93,0,0,0, 114,56,0,0,0,114,44,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,114,196,0,0,0,77,3, + 4,0,0,0,114,6,0,0,0,114,196,0,0,0,78,3, 0,0,115,4,0,0,0,0,2,8,1,122,32,83,111,117, 114,99,101,70,105,108,101,76,111,97,100,101,114,46,95,99, 97,99,104,101,95,98,121,116,101,99,111,100,101,105,182,1, 0,0,41,1,114,217,0,0,0,99,3,0,0,0,1,0, - 0,0,9,0,0,0,17,0,0,0,67,0,0,0,115,250, + 0,0,9,0,0,0,18,0,0,0,67,0,0,0,115,250, 0,0,0,116,0,124,1,131,1,92,2,125,4,125,5,103, 0,125,6,120,40,124,4,114,56,116,1,124,4,131,1,12, 0,114,56,116,0,124,4,131,1,92,2,125,4,125,7,124, - 6,106,2,124,7,131,1,1,0,113,18,87,0,120,108,116, + 6,160,2,124,7,161,1,1,0,113,18,87,0,120,108,116, 3,124,6,131,1,68,0,93,96,125,7,116,4,124,4,124, - 7,131,2,125,4,121,14,116,5,106,6,124,4,131,1,1, + 7,131,2,125,4,121,14,116,5,160,6,124,4,161,1,1, 0,87,0,113,68,4,0,116,7,107,10,114,118,1,0,1, 0,1,0,119,68,89,0,113,68,4,0,116,8,107,10,114, - 162,1,0,125,8,1,0,122,18,116,9,106,10,100,1,124, - 4,124,8,131,3,1,0,100,2,83,0,100,2,125,8,126, + 162,1,0,125,8,1,0,122,18,116,9,160,10,100,1,124, + 4,124,8,161,3,1,0,100,2,83,0,100,2,125,8,126, 8,88,0,113,68,88,0,113,68,87,0,121,28,116,11,124, - 1,124,2,124,3,131,3,1,0,116,9,106,10,100,3,124, - 1,131,2,1,0,87,0,110,48,4,0,116,8,107,10,114, - 244,1,0,125,8,1,0,122,20,116,9,106,10,100,1,124, - 1,124,8,131,3,1,0,87,0,89,0,100,2,100,2,125, + 1,124,2,124,3,131,3,1,0,116,9,160,10,100,3,124, + 1,161,2,1,0,87,0,110,48,4,0,116,8,107,10,114, + 244,1,0,125,8,1,0,122,20,116,9,160,10,100,1,124, + 1,124,8,161,3,1,0,87,0,89,0,100,2,100,2,125, 8,126,8,88,0,110,2,88,0,100,2,83,0,41,4,122, 27,87,114,105,116,101,32,98,121,116,101,115,32,100,97,116, 97,32,116,111,32,97,32,102,105,108,101,46,122,27,99,111, @@ -1356,7 +1356,7 @@ const unsigned char _Py_M__importlib_external[] = { 114,56,0,0,0,114,217,0,0,0,218,6,112,97,114,101, 110,116,114,98,0,0,0,114,29,0,0,0,114,25,0,0, 0,114,198,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,195,0,0,0,82,3,0,0,115,42, + 114,6,0,0,0,114,195,0,0,0,83,3,0,0,115,42, 0,0,0,0,2,12,1,4,2,16,1,12,1,14,2,14, 1,10,1,2,1,14,1,14,2,6,1,16,3,6,1,8, 1,20,1,2,1,12,1,16,1,16,2,8,1,122,25,83, @@ -1365,7 +1365,7 @@ const unsigned char _Py_M__importlib_external[] = { 114,108,0,0,0,114,110,0,0,0,114,111,0,0,0,114, 194,0,0,0,114,196,0,0,0,114,195,0,0,0,114,4, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,215,0,0,0,68,3,0,0,115,8,0,0,0, + 0,0,114,215,0,0,0,69,3,0,0,115,8,0,0,0, 8,2,4,2,8,5,8,5,114,215,0,0,0,99,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, 0,0,115,32,0,0,0,101,0,90,1,100,0,90,2,100, @@ -1376,8 +1376,8 @@ const unsigned char _Py_M__importlib_external[] = { 110,100,108,101,115,32,115,111,117,114,99,101,108,101,115,115, 32,102,105,108,101,32,105,109,112,111,114,116,115,46,99,2, 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, - 0,0,0,115,48,0,0,0,124,0,106,0,124,1,131,1, - 125,2,124,0,106,1,124,2,131,1,125,3,116,2,124,3, + 0,0,0,115,48,0,0,0,124,0,160,0,124,1,161,1, + 125,2,124,0,160,1,124,2,161,1,125,3,116,2,124,3, 124,1,124,2,100,1,141,3,125,4,116,3,124,4,124,1, 124,2,100,2,141,3,83,0,41,3,78,41,2,114,102,0, 0,0,114,37,0,0,0,41,2,114,102,0,0,0,114,93, @@ -1385,7 +1385,7 @@ const unsigned char _Py_M__importlib_external[] = { 139,0,0,0,114,145,0,0,0,41,5,114,104,0,0,0, 114,123,0,0,0,114,37,0,0,0,114,56,0,0,0,114, 206,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,114,184,0,0,0,117,3,0,0,115,8,0,0, + 0,0,0,114,184,0,0,0,118,3,0,0,115,8,0,0, 0,0,1,10,1,10,1,14,1,122,29,83,111,117,114,99, 101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,46, 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, @@ -1395,13 +1395,13 @@ const unsigned char _Py_M__importlib_external[] = { 115,32,110,111,32,115,111,117,114,99,101,32,99,111,100,101, 46,78,114,4,0,0,0,41,2,114,104,0,0,0,114,123, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,199,0,0,0,123,3,0,0,115,2,0,0,0, + 0,0,114,199,0,0,0,124,3,0,0,115,2,0,0,0, 0,2,122,31,83,111,117,114,99,101,108,101,115,115,70,105, 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, 114,99,101,78,41,6,114,109,0,0,0,114,108,0,0,0, 114,110,0,0,0,114,111,0,0,0,114,184,0,0,0,114, 199,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,114,220,0,0,0,113,3,0, + 0,0,0,114,6,0,0,0,114,220,0,0,0,114,3,0, 0,115,6,0,0,0,8,2,4,2,8,6,114,220,0,0, 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, 0,0,64,0,0,0,115,92,0,0,0,101,0,90,1,100, @@ -1423,7 +1423,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,95,1,100,0,83,0,41,1,78,41,2,114,102,0,0, 0,114,37,0,0,0,41,3,114,104,0,0,0,114,102,0, 0,0,114,37,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,6,0,0,0,114,182,0,0,0,140,3,0,0,115, + 0,114,6,0,0,0,114,182,0,0,0,141,3,0,0,115, 4,0,0,0,0,1,6,1,122,28,69,120,116,101,110,115, 105,111,110,70,105,108,101,76,111,97,100,101,114,46,95,95, 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,2, @@ -1432,7 +1432,7 @@ const unsigned char _Py_M__importlib_external[] = { 124,1,106,1,107,2,83,0,41,1,78,41,2,114,208,0, 0,0,114,115,0,0,0,41,2,114,104,0,0,0,114,209, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,210,0,0,0,144,3,0,0,115,4,0,0,0, + 0,0,114,210,0,0,0,145,3,0,0,115,4,0,0,0, 0,1,12,1,122,26,69,120,116,101,110,115,105,111,110,70, 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, @@ -1440,13 +1440,13 @@ const unsigned char _Py_M__importlib_external[] = { 131,1,116,0,124,0,106,2,131,1,65,0,83,0,41,1, 78,41,3,114,211,0,0,0,114,102,0,0,0,114,37,0, 0,0,41,1,114,104,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,114,212,0,0,0,148,3,0, + 0,0,0,114,6,0,0,0,114,212,0,0,0,149,3,0, 0,115,2,0,0,0,0,1,122,28,69,120,116,101,110,115, 105,111,110,70,105,108,101,76,111,97,100,101,114,46,95,95, 104,97,115,104,95,95,99,2,0,0,0,0,0,0,0,3, - 0,0,0,4,0,0,0,67,0,0,0,115,36,0,0,0, - 116,0,106,1,116,2,106,3,124,1,131,2,125,2,116,0, - 106,4,100,1,124,1,106,5,124,0,106,6,131,3,1,0, + 0,0,0,5,0,0,0,67,0,0,0,115,36,0,0,0, + 116,0,160,1,116,2,106,3,124,1,161,2,125,2,116,0, + 160,4,100,1,124,1,106,5,124,0,106,6,161,3,1,0, 124,2,83,0,41,2,122,38,67,114,101,97,116,101,32,97, 110,32,117,110,105,116,105,97,108,105,122,101,100,32,101,120, 116,101,110,115,105,111,110,32,109,111,100,117,108,101,122,38, @@ -1457,14 +1457,14 @@ const unsigned char _Py_M__importlib_external[] = { 100,121,110,97,109,105,99,114,133,0,0,0,114,102,0,0, 0,114,37,0,0,0,41,3,114,104,0,0,0,114,162,0, 0,0,114,187,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,6,0,0,0,114,183,0,0,0,151,3,0,0,115, + 0,114,6,0,0,0,114,183,0,0,0,152,3,0,0,115, 10,0,0,0,0,2,4,1,10,1,6,1,12,1,122,33, 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, 100,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,4,0, - 0,0,67,0,0,0,115,36,0,0,0,116,0,106,1,116, - 2,106,3,124,1,131,2,1,0,116,0,106,4,100,1,124, - 0,106,5,124,0,106,6,131,3,1,0,100,2,83,0,41, + 101,99,2,0,0,0,0,0,0,0,2,0,0,0,5,0, + 0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,116, + 2,106,3,124,1,161,2,1,0,116,0,160,4,100,1,124, + 0,106,5,124,0,106,6,161,3,1,0,100,2,83,0,41, 3,122,30,73,110,105,116,105,97,108,105,122,101,32,97,110, 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, 101,122,40,101,120,116,101,110,115,105,111,110,32,109,111,100, @@ -1474,7 +1474,7 @@ const unsigned char _Py_M__importlib_external[] = { 120,101,99,95,100,121,110,97,109,105,99,114,133,0,0,0, 114,102,0,0,0,114,37,0,0,0,41,2,114,104,0,0, 0,114,187,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,188,0,0,0,159,3,0,0,115,6, + 114,6,0,0,0,114,188,0,0,0,160,3,0,0,115,6, 0,0,0,0,2,14,1,6,1,122,31,69,120,116,101,110, 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,101, 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, @@ -1492,7 +1492,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,41,2,114,24,0,0,0,218,6,115,117,102,102, 105,120,41,1,218,9,102,105,108,101,95,110,97,109,101,114, 4,0,0,0,114,6,0,0,0,250,9,60,103,101,110,101, - 120,112,114,62,168,3,0,0,115,2,0,0,0,4,1,122, + 120,112,114,62,169,3,0,0,115,2,0,0,0,4,1,122, 49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46, 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, @@ -1500,7 +1500,7 @@ const unsigned char _Py_M__importlib_external[] = { 97,110,121,218,18,69,88,84,69,78,83,73,79,78,95,83, 85,70,70,73,88,69,83,41,2,114,104,0,0,0,114,123, 0,0,0,114,4,0,0,0,41,1,114,223,0,0,0,114, - 6,0,0,0,114,157,0,0,0,165,3,0,0,115,6,0, + 6,0,0,0,114,157,0,0,0,166,3,0,0,115,6,0, 0,0,0,2,14,1,12,1,122,30,69,120,116,101,110,115, 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, @@ -1511,7 +1511,7 @@ const unsigned char _Py_M__importlib_external[] = { 110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100, 101,32,111,98,106,101,99,116,46,78,114,4,0,0,0,41, 2,114,104,0,0,0,114,123,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,6,0,0,0,114,184,0,0,0,171, + 114,4,0,0,0,114,6,0,0,0,114,184,0,0,0,172, 3,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101, 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, @@ -1522,7 +1522,7 @@ const unsigned char _Py_M__importlib_external[] = { 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, 114,4,0,0,0,41,2,114,104,0,0,0,114,123,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,199,0,0,0,175,3,0,0,115,2,0,0,0,0,2, + 114,199,0,0,0,176,3,0,0,115,2,0,0,0,0,2, 122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76, 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, @@ -1533,7 +1533,7 @@ const unsigned char _Py_M__importlib_external[] = { 98,121,32,116,104,101,32,102,105,110,100,101,114,46,41,1, 114,37,0,0,0,41,2,114,104,0,0,0,114,123,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,155,0,0,0,179,3,0,0,115,2,0,0,0,0,3, + 114,155,0,0,0,180,3,0,0,115,2,0,0,0,0,3, 122,32,69,120,116,101,110,115,105,111,110,70,105,108,101,76, 111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,97, 109,101,78,41,14,114,109,0,0,0,114,108,0,0,0,114, @@ -1542,7 +1542,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,114,157,0,0,0,114,184,0,0,0,114,199,0,0, 0,114,120,0,0,0,114,155,0,0,0,114,4,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, - 221,0,0,0,132,3,0,0,115,20,0,0,0,8,6,4, + 221,0,0,0,133,3,0,0,115,20,0,0,0,8,6,4, 2,8,4,8,4,8,3,8,8,8,6,8,6,8,4,8, 4,114,221,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,96,0,0,0, @@ -1572,9 +1572,9 @@ const unsigned char _Py_M__importlib_external[] = { 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,0,0,0,0,4,0,0,0,3,0,0,0,67,0, 0,0,115,36,0,0,0,124,1,124,0,95,0,124,2,124, - 0,95,1,116,2,124,0,106,3,131,0,131,1,124,0,95, + 0,95,1,116,2,124,0,160,3,161,0,131,1,124,0,95, 4,124,3,124,0,95,5,100,0,83,0,41,1,78,41,6, 218,5,95,110,97,109,101,218,5,95,112,97,116,104,114,97, 0,0,0,218,16,95,103,101,116,95,112,97,114,101,110,116, @@ -1583,12 +1583,12 @@ const unsigned char _Py_M__importlib_external[] = { 102,105,110,100,101,114,41,4,114,104,0,0,0,114,102,0, 0,0,114,37,0,0,0,218,11,112,97,116,104,95,102,105, 110,100,101,114,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,114,182,0,0,0,192,3,0,0,115,8,0,0, + 0,0,0,114,182,0,0,0,193,3,0,0,115,8,0,0, 0,0,1,6,1,6,1,14,1,122,23,95,78,97,109,101, 115,112,97,99,101,80,97,116,104,46,95,95,105,110,105,116, 95,95,99,1,0,0,0,0,0,0,0,4,0,0,0,3, 0,0,0,67,0,0,0,115,38,0,0,0,124,0,106,0, - 106,1,100,1,131,1,92,3,125,1,125,2,125,3,124,2, + 160,1,100,1,161,1,92,3,125,1,125,2,125,3,124,2, 100,2,107,2,114,30,100,6,83,0,124,1,100,5,102,2, 83,0,41,7,122,62,82,101,116,117,114,110,115,32,97,32, 116,117,112,108,101,32,111,102,32,40,112,97,114,101,110,116, @@ -1601,12 +1601,12 @@ const unsigned char _Py_M__importlib_external[] = { 0,114,219,0,0,0,218,3,100,111,116,90,2,109,101,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,23, 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, - 104,95,110,97,109,101,115,198,3,0,0,115,8,0,0,0, + 104,95,110,97,109,101,115,199,3,0,0,115,8,0,0,0, 0,2,18,1,8,2,4,3,122,38,95,78,97,109,101,115, 112,97,99,101,80,97,116,104,46,95,102,105,110,100,95,112, 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, 99,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,67,0,0,0,115,28,0,0,0,124,0,106,0,131,0, + 0,67,0,0,0,115,28,0,0,0,124,0,160,0,161,0, 92,2,125,1,125,2,116,1,116,2,106,3,124,1,25,0, 124,2,131,2,83,0,41,1,78,41,4,114,235,0,0,0, 114,114,0,0,0,114,8,0,0,0,218,7,109,111,100,117, @@ -1614,13 +1614,13 @@ const unsigned char _Py_M__importlib_external[] = { 110,116,95,109,111,100,117,108,101,95,110,97,109,101,90,14, 112,97,116,104,95,97,116,116,114,95,110,97,109,101,114,4, 0,0,0,114,4,0,0,0,114,6,0,0,0,114,230,0, - 0,0,208,3,0,0,115,4,0,0,0,0,1,12,1,122, + 0,0,209,3,0,0,115,4,0,0,0,0,1,12,1,122, 31,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, 95,103,101,116,95,112,97,114,101,110,116,95,112,97,116,104, - 99,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,67,0,0,0,115,80,0,0,0,116,0,124,0,106,1, - 131,0,131,1,125,1,124,1,124,0,106,2,107,3,114,74, - 124,0,106,3,124,0,106,4,124,1,131,2,125,2,124,2, + 99,1,0,0,0,0,0,0,0,3,0,0,0,4,0,0, + 0,67,0,0,0,115,80,0,0,0,116,0,124,0,160,1, + 161,0,131,1,125,1,124,1,124,0,106,2,107,3,114,74, + 124,0,160,3,124,0,106,4,124,1,161,2,125,2,124,2, 100,0,107,9,114,68,124,2,106,5,100,0,107,8,114,68, 124,2,106,6,114,68,124,2,106,6,124,0,95,7,124,1, 124,0,95,2,124,0,106,7,83,0,41,1,78,41,8,114, @@ -1629,16 +1629,16 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,114,229,0,0,0,41,3,114,104,0,0,0,90,11, 112,97,114,101,110,116,95,112,97,116,104,114,162,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,218, - 12,95,114,101,99,97,108,99,117,108,97,116,101,212,3,0, + 12,95,114,101,99,97,108,99,117,108,97,116,101,213,3,0, 0,115,16,0,0,0,0,2,12,1,10,1,14,3,18,1, 6,1,8,1,6,1,122,27,95,78,97,109,101,115,112,97, 99,101,80,97,116,104,46,95,114,101,99,97,108,99,117,108, 97,116,101,99,1,0,0,0,0,0,0,0,1,0,0,0, - 2,0,0,0,67,0,0,0,115,12,0,0,0,116,0,124, - 0,106,1,131,0,131,1,83,0,41,1,78,41,2,218,4, + 3,0,0,0,67,0,0,0,115,12,0,0,0,116,0,124, + 0,160,1,161,0,131,1,83,0,41,1,78,41,2,218,4, 105,116,101,114,114,237,0,0,0,41,1,114,104,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,218, - 8,95,95,105,116,101,114,95,95,225,3,0,0,115,2,0, + 8,95,95,105,116,101,114,95,95,226,3,0,0,115,2,0, 0,0,0,1,122,23,95,78,97,109,101,115,112,97,99,101, 80,97,116,104,46,95,95,105,116,101,114,95,95,99,3,0, 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, @@ -1646,40 +1646,40 @@ const unsigned char _Py_M__importlib_external[] = { 0,100,0,83,0,41,1,78,41,1,114,229,0,0,0,41, 3,114,104,0,0,0,218,5,105,110,100,101,120,114,37,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,218,11,95,95,115,101,116,105,116,101,109,95,95,228,3, + 0,218,11,95,95,115,101,116,105,116,101,109,95,95,229,3, 0,0,115,2,0,0,0,0,1,122,26,95,78,97,109,101, 115,112,97,99,101,80,97,116,104,46,95,95,115,101,116,105, 116,101,109,95,95,99,1,0,0,0,0,0,0,0,1,0, - 0,0,2,0,0,0,67,0,0,0,115,12,0,0,0,116, - 0,124,0,106,1,131,0,131,1,83,0,41,1,78,41,2, + 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,116, + 0,124,0,160,1,161,0,131,1,83,0,41,1,78,41,2, 114,33,0,0,0,114,237,0,0,0,41,1,114,104,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,7,95,95,108,101,110,95,95,231,3,0,0,115,2,0, + 218,7,95,95,108,101,110,95,95,232,3,0,0,115,2,0, 0,0,0,1,122,22,95,78,97,109,101,115,112,97,99,101, 80,97,116,104,46,95,95,108,101,110,95,95,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, - 0,115,12,0,0,0,100,1,106,0,124,0,106,1,131,1, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,1, 83,0,41,2,78,122,20,95,78,97,109,101,115,112,97,99, 101,80,97,116,104,40,123,33,114,125,41,41,2,114,50,0, 0,0,114,229,0,0,0,41,1,114,104,0,0,0,114,4, 0,0,0,114,4,0,0,0,114,6,0,0,0,218,8,95, - 95,114,101,112,114,95,95,234,3,0,0,115,2,0,0,0, + 95,114,101,112,114,95,95,235,3,0,0,115,2,0,0,0, 0,1,122,23,95,78,97,109,101,115,112,97,99,101,80,97, 116,104,46,95,95,114,101,112,114,95,95,99,2,0,0,0, - 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, - 115,12,0,0,0,124,1,124,0,106,0,131,0,107,6,83, + 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, + 115,12,0,0,0,124,1,124,0,160,0,161,0,107,6,83, 0,41,1,78,41,1,114,237,0,0,0,41,2,114,104,0, 0,0,218,4,105,116,101,109,114,4,0,0,0,114,4,0, 0,0,114,6,0,0,0,218,12,95,95,99,111,110,116,97, - 105,110,115,95,95,237,3,0,0,115,2,0,0,0,0,1, + 105,110,115,95,95,238,3,0,0,115,2,0,0,0,0,1, 122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,104, 46,95,95,99,111,110,116,97,105,110,115,95,95,99,2,0, - 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, - 0,0,115,16,0,0,0,124,0,106,0,106,1,124,1,131, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,16,0,0,0,124,0,106,0,160,1,124,1,161, 1,1,0,100,0,83,0,41,1,78,41,2,114,229,0,0, 0,114,161,0,0,0,41,2,114,104,0,0,0,114,244,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,114,161,0,0,0,240,3,0,0,115,2,0,0,0,0, + 0,114,161,0,0,0,241,3,0,0,115,2,0,0,0,0, 1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116, 104,46,97,112,112,101,110,100,78,41,14,114,109,0,0,0, 114,108,0,0,0,114,110,0,0,0,114,111,0,0,0,114, @@ -1687,7 +1687,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,114,239,0,0,0,114,241,0,0,0,114,242,0, 0,0,114,243,0,0,0,114,245,0,0,0,114,161,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,227,0,0,0,185,3,0,0,115,22, + 114,6,0,0,0,114,227,0,0,0,186,3,0,0,115,22, 0,0,0,8,5,4,2,8,6,8,10,8,4,8,13,8, 3,8,3,8,3,8,3,8,3,114,227,0,0,0,99,0, 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, @@ -1704,11 +1704,11 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,114,229,0,0,0,41,4,114,104,0,0,0,114,102, 0,0,0,114,37,0,0,0,114,233,0,0,0,114,4,0, 0,0,114,4,0,0,0,114,6,0,0,0,114,182,0,0, - 0,246,3,0,0,115,2,0,0,0,0,1,122,25,95,78, + 0,247,3,0,0,115,2,0,0,0,0,1,122,25,95,78, 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,95, 95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0, - 2,0,0,0,2,0,0,0,67,0,0,0,115,12,0,0, - 0,100,1,106,0,124,1,106,1,131,1,83,0,41,2,122, + 2,0,0,0,3,0,0,0,67,0,0,0,115,12,0,0, + 0,100,1,160,0,124,1,106,1,161,1,83,0,41,2,122, 115,82,101,116,117,114,110,32,114,101,112,114,32,102,111,114, 32,116,104,101,32,109,111,100,117,108,101,46,10,10,32,32, 32,32,32,32,32,32,84,104,101,32,109,101,116,104,111,100, @@ -1721,21 +1721,21 @@ const unsigned char _Py_M__importlib_external[] = { 2,114,50,0,0,0,114,109,0,0,0,41,2,114,168,0, 0,0,114,187,0,0,0,114,4,0,0,0,114,4,0,0, 0,114,6,0,0,0,218,11,109,111,100,117,108,101,95,114, - 101,112,114,249,3,0,0,115,2,0,0,0,0,7,122,28, + 101,112,114,250,3,0,0,115,2,0,0,0,0,7,122,28, 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, 46,109,111,100,117,108,101,95,114,101,112,114,99,2,0,0, 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, 0,115,4,0,0,0,100,1,83,0,41,2,78,84,114,4, 0,0,0,41,2,114,104,0,0,0,114,123,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,157, - 0,0,0,2,4,0,0,115,2,0,0,0,0,1,122,27, + 0,0,0,3,4,0,0,115,2,0,0,0,0,1,122,27, 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, 115,4,0,0,0,100,1,83,0,41,2,78,114,32,0,0, 0,114,4,0,0,0,41,2,114,104,0,0,0,114,123,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,114,199,0,0,0,5,4,0,0,115,2,0,0,0,0, + 0,114,199,0,0,0,6,4,0,0,115,2,0,0,0,0, 1,122,27,95,78,97,109,101,115,112,97,99,101,76,111,97, 100,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2, 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,67, @@ -1744,7 +1744,7 @@ const unsigned char _Py_M__importlib_external[] = { 122,8,60,115,116,114,105,110,103,62,114,186,0,0,0,84, 41,1,114,201,0,0,0,41,1,114,202,0,0,0,41,2, 114,104,0,0,0,114,123,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,114,184,0,0,0,8,4, + 4,0,0,0,114,6,0,0,0,114,184,0,0,0,9,4, 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, @@ -1754,19 +1754,19 @@ const unsigned char _Py_M__importlib_external[] = { 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, 78,114,4,0,0,0,41,2,114,104,0,0,0,114,162,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,114,183,0,0,0,11,4,0,0,115,0,0,0,0,122, + 0,114,183,0,0,0,12,4,0,0,115,0,0,0,0,122, 30,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, 67,0,0,0,115,4,0,0,0,100,0,83,0,41,1,78, 114,4,0,0,0,41,2,114,104,0,0,0,114,187,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,188,0,0,0,14,4,0,0,115,2,0,0,0,0,1, + 114,188,0,0,0,15,4,0,0,115,2,0,0,0,0,1, 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, - 0,0,0,115,26,0,0,0,116,0,106,1,100,1,124,0, - 106,2,131,2,1,0,116,0,106,3,124,0,124,1,131,2, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, + 0,0,0,115,26,0,0,0,116,0,160,1,100,1,124,0, + 106,2,161,2,1,0,116,0,160,3,124,0,124,1,161,2, 83,0,41,2,122,98,76,111,97,100,32,97,32,110,97,109, 101,115,112,97,99,101,32,109,111,100,117,108,101,46,10,10, 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, @@ -1779,7 +1779,7 @@ const unsigned char _Py_M__importlib_external[] = { 41,4,114,118,0,0,0,114,133,0,0,0,114,229,0,0, 0,114,189,0,0,0,41,2,114,104,0,0,0,114,123,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,114,190,0,0,0,17,4,0,0,115,6,0,0,0,0, + 0,114,190,0,0,0,18,4,0,0,115,6,0,0,0,0, 7,6,1,8,1,122,28,95,78,97,109,101,115,112,97,99, 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, 117,108,101,78,41,12,114,109,0,0,0,114,108,0,0,0, @@ -1787,7 +1787,7 @@ const unsigned char _Py_M__importlib_external[] = { 247,0,0,0,114,157,0,0,0,114,199,0,0,0,114,184, 0,0,0,114,183,0,0,0,114,188,0,0,0,114,190,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,6,0,0,0,114,246,0,0,0,245,3,0,0,115, + 0,114,6,0,0,0,114,246,0,0,0,246,3,0,0,115, 16,0,0,0,8,1,8,3,12,9,8,3,8,3,8,3, 8,3,8,3,114,246,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, @@ -1804,9 +1804,9 @@ const unsigned char _Py_M__importlib_external[] = { 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,42,0,0,0,120,36,116,0,106,1,106,2,131,0,68, + 115,42,0,0,0,120,36,116,0,106,1,160,2,161,0,68, 0,93,22,125,1,116,3,124,1,100,1,131,2,114,12,124, - 1,106,4,131,0,1,0,113,12,87,0,100,2,83,0,41, + 1,160,4,161,0,1,0,113,12,87,0,100,2,83,0,41, 3,122,125,67,97,108,108,32,116,104,101,32,105,110,118,97, 108,105,100,97,116,101,95,99,97,99,104,101,115,40,41,32, 109,101,116,104,111,100,32,111,110,32,97,108,108,32,112,97, @@ -1821,13 +1821,13 @@ const unsigned char _Py_M__importlib_external[] = { 218,6,118,97,108,117,101,115,114,112,0,0,0,114,249,0, 0,0,41,2,114,168,0,0,0,218,6,102,105,110,100,101, 114,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,249,0,0,0,35,4,0,0,115,6,0,0,0,0,4, + 114,249,0,0,0,36,4,0,0,115,6,0,0,0,0,4, 16,1,10,1,122,28,80,97,116,104,70,105,110,100,101,114, 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, 101,115,99,2,0,0,0,0,0,0,0,3,0,0,0,12, 0,0,0,67,0,0,0,115,86,0,0,0,116,0,106,1, 100,1,107,9,114,30,116,0,106,1,12,0,114,30,116,2, - 106,3,100,2,116,4,131,2,1,0,120,50,116,0,106,1, + 160,3,100,2,116,4,161,2,1,0,120,50,116,0,106,1, 68,0,93,36,125,2,121,8,124,2,124,1,131,1,83,0, 4,0,116,5,107,10,114,72,1,0,1,0,1,0,119,38, 89,0,113,38,88,0,113,38,87,0,100,1,83,0,100,1, @@ -1841,16 +1841,16 @@ const unsigned char _Py_M__importlib_external[] = { 114,103,0,0,0,41,3,114,168,0,0,0,114,37,0,0, 0,90,4,104,111,111,107,114,4,0,0,0,114,4,0,0, 0,114,6,0,0,0,218,11,95,112,97,116,104,95,104,111, - 111,107,115,43,4,0,0,115,16,0,0,0,0,3,18,1, + 111,107,115,44,4,0,0,115,16,0,0,0,0,3,18,1, 12,1,12,1,2,1,8,1,14,1,12,2,122,22,80,97, 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,104, 111,111,107,115,99,2,0,0,0,0,0,0,0,3,0,0, 0,19,0,0,0,67,0,0,0,115,102,0,0,0,124,1, - 100,1,107,2,114,42,121,12,116,0,106,1,131,0,125,1, + 100,1,107,2,114,42,121,12,116,0,160,1,161,0,125,1, 87,0,110,20,4,0,116,2,107,10,114,40,1,0,1,0, 1,0,100,2,83,0,88,0,121,14,116,3,106,4,124,1, 25,0,125,2,87,0,110,40,4,0,116,5,107,10,114,96, - 1,0,1,0,1,0,124,0,106,6,124,1,131,1,125,2, + 1,0,1,0,1,0,124,0,160,6,124,1,161,1,125,2, 124,2,116,3,106,4,124,1,60,0,89,0,110,2,88,0, 124,2,83,0,41,3,122,210,71,101,116,32,116,104,101,32, 102,105,110,100,101,114,32,102,111,114,32,116,104,101,32,112, @@ -1872,17 +1872,17 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,41,3,114,168,0,0,0,114,37,0,0,0,114, 252,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, 0,0,0,218,20,95,112,97,116,104,95,105,109,112,111,114, - 116,101,114,95,99,97,99,104,101,56,4,0,0,115,22,0, + 116,101,114,95,99,97,99,104,101,57,4,0,0,115,22,0, 0,0,0,8,8,1,2,1,12,1,14,3,6,1,2,1, 14,1,14,1,10,1,16,1,122,31,80,97,116,104,70,105, 110,100,101,114,46,95,112,97,116,104,95,105,109,112,111,114, 116,101,114,95,99,97,99,104,101,99,3,0,0,0,0,0, - 0,0,6,0,0,0,3,0,0,0,67,0,0,0,115,82, - 0,0,0,116,0,124,2,100,1,131,2,114,26,124,2,106, - 1,124,1,131,1,92,2,125,3,125,4,110,14,124,2,106, - 2,124,1,131,1,125,3,103,0,125,4,124,3,100,0,107, - 9,114,60,116,3,106,4,124,1,124,3,131,2,83,0,116, - 3,106,5,124,1,100,0,131,2,125,5,124,4,124,5,95, + 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,82, + 0,0,0,116,0,124,2,100,1,131,2,114,26,124,2,160, + 1,124,1,161,1,92,2,125,3,125,4,110,14,124,2,160, + 2,124,1,161,1,125,3,103,0,125,4,124,3,100,0,107, + 9,114,60,116,3,160,4,124,1,124,3,161,2,83,0,116, + 3,160,5,124,1,100,0,161,2,125,5,124,4,124,5,95, 6,124,5,83,0,41,2,78,114,121,0,0,0,41,7,114, 112,0,0,0,114,121,0,0,0,114,179,0,0,0,114,118, 0,0,0,114,176,0,0,0,114,158,0,0,0,114,154,0, @@ -1890,21 +1890,21 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,114,124,0,0,0,114,125,0,0,0,114,162,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, 0,218,16,95,108,101,103,97,99,121,95,103,101,116,95,115, - 112,101,99,78,4,0,0,115,18,0,0,0,0,4,10,1, + 112,101,99,79,4,0,0,115,18,0,0,0,0,4,10,1, 16,2,10,1,4,1,8,1,12,1,12,1,6,1,122,27, 80,97,116,104,70,105,110,100,101,114,46,95,108,101,103,97, 99,121,95,103,101,116,95,115,112,101,99,78,99,4,0,0, 0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,0, 0,115,170,0,0,0,103,0,125,4,120,160,124,2,68,0, 93,130,125,5,116,0,124,5,116,1,116,2,102,2,131,2, - 115,30,113,10,124,0,106,3,124,5,131,1,125,6,124,6, + 115,30,113,10,124,0,160,3,124,5,161,1,125,6,124,6, 100,1,107,9,114,10,116,4,124,6,100,2,131,2,114,72, - 124,6,106,5,124,1,124,3,131,2,125,7,110,12,124,0, - 106,6,124,1,124,6,131,2,125,7,124,7,100,1,107,8, + 124,6,160,5,124,1,124,3,161,2,125,7,110,12,124,0, + 160,6,124,1,124,6,161,2,125,7,124,7,100,1,107,8, 114,94,113,10,124,7,106,7,100,1,107,9,114,108,124,7, 83,0,124,7,106,8,125,8,124,8,100,1,107,8,114,130, - 116,9,100,3,131,1,130,1,124,4,106,10,124,8,131,1, - 1,0,113,10,87,0,116,11,106,12,124,1,100,1,131,2, + 116,9,100,3,131,1,130,1,124,4,160,10,124,8,161,1, + 1,0,113,10,87,0,116,11,160,12,124,1,100,1,161,2, 125,7,124,4,124,7,95,8,124,7,83,0,100,1,83,0, 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, @@ -1921,15 +1921,15 @@ const unsigned char _Py_M__importlib_external[] = { 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, 114,252,0,0,0,114,162,0,0,0,114,125,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,9, - 95,103,101,116,95,115,112,101,99,93,4,0,0,115,40,0, + 95,103,101,116,95,115,112,101,99,94,4,0,0,115,40,0, 0,0,0,5,4,1,10,1,14,1,2,1,10,1,8,1, 10,1,14,2,12,1,8,1,2,1,10,1,4,1,6,1, 8,1,8,5,14,2,12,1,6,1,122,20,80,97,116,104, 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, - 99,4,0,0,0,0,0,0,0,6,0,0,0,4,0,0, + 99,4,0,0,0,0,0,0,0,6,0,0,0,5,0,0, 0,67,0,0,0,115,100,0,0,0,124,2,100,1,107,8, - 114,14,116,0,106,1,125,2,124,0,106,2,124,1,124,2, - 124,3,131,3,125,4,124,4,100,1,107,8,114,40,100,1, + 114,14,116,0,106,1,125,2,124,0,160,2,124,1,124,2, + 124,3,161,3,125,4,124,4,100,1,107,8,114,40,100,1, 83,0,124,4,106,3,100,1,107,8,114,92,124,4,106,4, 125,5,124,5,114,86,100,2,124,4,95,5,116,6,124,1, 124,5,124,0,106,2,131,3,124,4,95,4,124,4,83,0, @@ -1949,12 +1949,12 @@ const unsigned char _Py_M__importlib_external[] = { 41,6,114,168,0,0,0,114,123,0,0,0,114,37,0,0, 0,114,177,0,0,0,114,162,0,0,0,114,3,1,0,0, 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, - 178,0,0,0,125,4,0,0,115,26,0,0,0,0,6,8, + 178,0,0,0,126,4,0,0,115,26,0,0,0,0,6,8, 1,6,1,14,1,8,1,4,1,10,1,6,1,4,3,6, 1,16,1,4,2,6,2,122,20,80,97,116,104,70,105,110, 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, - 0,0,115,30,0,0,0,124,0,106,0,124,1,124,2,131, + 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, + 0,0,115,30,0,0,0,124,0,160,0,124,1,124,2,161, 2,125,3,124,3,100,1,107,8,114,24,100,1,83,0,124, 3,106,1,83,0,41,2,122,170,102,105,110,100,32,116,104, 101,32,109,111,100,117,108,101,32,111,110,32,115,121,115,46, @@ -1970,7 +1970,7 @@ const unsigned char _Py_M__importlib_external[] = { 32,32,32,78,41,2,114,178,0,0,0,114,124,0,0,0, 41,4,114,168,0,0,0,114,123,0,0,0,114,37,0,0, 0,114,162,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,179,0,0,0,149,4,0,0,115,8, + 114,6,0,0,0,114,179,0,0,0,150,4,0,0,115,8, 0,0,0,0,8,12,1,8,1,4,1,122,22,80,97,116, 104,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, 117,108,101,41,1,78,41,2,78,78,41,1,78,41,12,114, @@ -1979,7 +1979,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,114,0,1,0,0,114,1,1,0,0,114,4,1,0, 0,114,178,0,0,0,114,179,0,0,0,114,4,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, - 248,0,0,0,31,4,0,0,115,22,0,0,0,8,2,4, + 248,0,0,0,32,4,0,0,115,22,0,0,0,8,2,4, 2,12,8,12,13,12,22,12,15,2,1,12,31,2,1,12, 23,2,1,114,248,0,0,0,99,0,0,0,0,0,0,0, 0,0,0,0,0,3,0,0,0,64,0,0,0,115,90,0, @@ -2001,10 +2001,10 @@ const unsigned char _Py_M__importlib_external[] = { 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,88,0, + 0,5,0,0,0,6,0,0,0,7,0,0,0,115,88,0, 0,0,103,0,125,3,120,40,124,2,68,0,93,32,92,2, - 137,0,125,4,124,3,106,0,135,0,102,1,100,1,100,2, - 132,8,124,4,68,0,131,1,131,1,1,0,113,10,87,0, + 137,0,125,4,124,3,160,0,135,0,102,1,100,1,100,2, + 132,8,124,4,68,0,131,1,161,1,1,0,113,10,87,0, 124,3,124,0,95,1,124,1,112,58,100,3,124,0,95,2, 100,6,124,0,95,3,116,4,131,0,124,0,95,5,116,4, 131,0,124,0,95,6,100,5,83,0,41,7,122,154,73,110, @@ -2023,7 +2023,7 @@ const unsigned char _Py_M__importlib_external[] = { 1,0,113,2,100,0,83,0,41,1,78,114,4,0,0,0, 41,2,114,24,0,0,0,114,222,0,0,0,41,1,114,124, 0,0,0,114,4,0,0,0,114,6,0,0,0,114,224,0, - 0,0,178,4,0,0,115,2,0,0,0,4,0,122,38,70, + 0,0,179,4,0,0,115,2,0,0,0,4,0,122,38,70, 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, 95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,110, 101,120,112,114,62,114,61,0,0,0,114,31,0,0,0,78, @@ -2035,7 +2035,7 @@ const unsigned char _Py_M__importlib_external[] = { 5,114,104,0,0,0,114,37,0,0,0,218,14,108,111,97, 100,101,114,95,100,101,116,97,105,108,115,90,7,108,111,97, 100,101,114,115,114,164,0,0,0,114,4,0,0,0,41,1, - 114,124,0,0,0,114,6,0,0,0,114,182,0,0,0,172, + 114,124,0,0,0,114,6,0,0,0,114,182,0,0,0,173, 4,0,0,115,16,0,0,0,0,4,4,1,14,1,28,1, 6,2,10,1,6,1,8,1,122,19,70,105,108,101,70,105, 110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0, @@ -2046,11 +2046,11 @@ const unsigned char _Py_M__importlib_external[] = { 105,109,101,46,114,31,0,0,0,78,114,91,0,0,0,41, 1,114,7,1,0,0,41,1,114,104,0,0,0,114,4,0, 0,0,114,4,0,0,0,114,6,0,0,0,114,249,0,0, - 0,186,4,0,0,115,2,0,0,0,0,2,122,28,70,105, + 0,187,4,0,0,115,2,0,0,0,0,2,122,28,70,105, 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, - 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, - 42,0,0,0,124,0,106,0,124,1,131,1,125,2,124,2, + 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, + 42,0,0,0,124,0,160,0,124,1,161,1,125,2,124,2, 100,1,107,8,114,26,100,1,103,0,102,2,83,0,124,2, 106,1,124,2,106,2,112,38,103,0,102,2,83,0,41,2, 122,197,84,114,121,32,116,111,32,102,105,110,100,32,97,32, @@ -2068,7 +2068,7 @@ const unsigned char _Py_M__importlib_external[] = { 32,32,32,32,32,32,32,78,41,3,114,178,0,0,0,114, 124,0,0,0,114,154,0,0,0,41,3,114,104,0,0,0, 114,123,0,0,0,114,162,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,114,121,0,0,0,192,4, + 4,0,0,0,114,6,0,0,0,114,121,0,0,0,193,4, 0,0,115,8,0,0,0,0,7,10,1,8,1,8,1,122, 22,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, 95,108,111,97,100,101,114,99,6,0,0,0,0,0,0,0, @@ -2079,32 +2079,32 @@ const unsigned char _Py_M__importlib_external[] = { 0,41,7,114,104,0,0,0,114,163,0,0,0,114,123,0, 0,0,114,37,0,0,0,90,4,115,109,115,108,114,177,0, 0,0,114,124,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,6,0,0,0,114,4,1,0,0,204,4,0,0,115, + 0,114,6,0,0,0,114,4,1,0,0,205,4,0,0,115, 6,0,0,0,0,1,10,1,8,1,122,20,70,105,108,101, 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, - 78,99,3,0,0,0,0,0,0,0,14,0,0,0,15,0, + 78,99,3,0,0,0,0,0,0,0,14,0,0,0,16,0, 0,0,67,0,0,0,115,98,1,0,0,100,1,125,3,124, - 1,106,0,100,2,131,1,100,3,25,0,125,4,121,24,116, - 1,124,0,106,2,112,34,116,3,106,4,131,0,131,1,106, + 1,160,0,100,2,161,1,100,3,25,0,125,4,121,24,116, + 1,124,0,106,2,112,34,116,3,160,4,161,0,131,1,106, 5,125,5,87,0,110,24,4,0,116,6,107,10,114,66,1, 0,1,0,1,0,100,10,125,5,89,0,110,2,88,0,124, - 5,124,0,106,7,107,3,114,92,124,0,106,8,131,0,1, + 5,124,0,106,7,107,3,114,92,124,0,160,8,161,0,1, 0,124,5,124,0,95,7,116,9,131,0,114,114,124,0,106, - 10,125,6,124,4,106,11,131,0,125,7,110,10,124,0,106, + 10,125,6,124,4,160,11,161,0,125,7,110,10,124,0,106, 12,125,6,124,4,125,7,124,7,124,6,107,6,114,218,116, 13,124,0,106,2,124,4,131,2,125,8,120,72,124,0,106, 14,68,0,93,54,92,2,125,9,125,10,100,5,124,9,23, 0,125,11,116,13,124,8,124,11,131,2,125,12,116,15,124, - 12,131,1,114,152,124,0,106,16,124,10,124,1,124,12,124, - 8,103,1,124,2,131,5,83,0,113,152,87,0,116,17,124, + 12,131,1,114,152,124,0,160,16,124,10,124,1,124,12,124, + 8,103,1,124,2,161,5,83,0,113,152,87,0,116,17,124, 8,131,1,125,3,120,88,124,0,106,14,68,0,93,78,92, 2,125,9,125,10,116,13,124,0,106,2,124,4,124,9,23, 0,131,2,125,12,116,18,106,19,100,6,124,12,100,3,100, 7,141,3,1,0,124,7,124,9,23,0,124,6,107,6,114, - 226,116,15,124,12,131,1,114,226,124,0,106,16,124,10,124, - 1,124,12,100,8,124,2,131,5,83,0,113,226,87,0,124, - 3,144,1,114,94,116,18,106,19,100,9,124,8,131,2,1, - 0,116,18,106,20,124,1,100,8,131,2,125,13,124,8,103, + 226,116,15,124,12,131,1,114,226,124,0,160,16,124,10,124, + 1,124,12,100,8,124,2,161,5,83,0,113,226,87,0,124, + 3,144,1,114,94,116,18,160,19,100,9,124,8,161,2,1, + 0,116,18,160,20,124,1,100,8,161,2,125,13,124,8,103, 1,124,13,95,21,124,13,83,0,100,8,83,0,41,11,122, 111,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115, 112,101,99,32,102,111,114,32,116,104,101,32,115,112,101,99, @@ -2134,25 +2134,25 @@ const unsigned char _Py_M__importlib_external[] = { 0,90,13,105,110,105,116,95,102,105,108,101,110,97,109,101, 90,9,102,117,108,108,95,112,97,116,104,114,162,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, - 178,0,0,0,209,4,0,0,115,70,0,0,0,0,5,4, + 178,0,0,0,210,4,0,0,115,70,0,0,0,0,5,4, 1,14,1,2,1,24,1,14,1,10,1,10,1,8,1,6, 2,6,1,6,1,10,2,6,1,4,2,8,1,12,1,16, 1,8,1,10,1,8,1,24,4,8,2,16,1,16,1,16, 1,12,1,8,1,10,1,12,1,6,1,12,1,12,1,8, 1,4,1,122,20,70,105,108,101,70,105,110,100,101,114,46, 102,105,110,100,95,115,112,101,99,99,1,0,0,0,0,0, - 0,0,9,0,0,0,13,0,0,0,67,0,0,0,115,194, - 0,0,0,124,0,106,0,125,1,121,22,116,1,106,2,124, - 1,112,22,116,1,106,3,131,0,131,1,125,2,87,0,110, + 0,0,9,0,0,0,14,0,0,0,67,0,0,0,115,194, + 0,0,0,124,0,106,0,125,1,121,22,116,1,160,2,124, + 1,112,22,116,1,160,3,161,0,161,1,125,2,87,0,110, 30,4,0,116,4,116,5,116,6,102,3,107,10,114,58,1, 0,1,0,1,0,103,0,125,2,89,0,110,2,88,0,116, - 7,106,8,106,9,100,1,131,1,115,84,116,10,124,2,131, + 7,106,8,160,9,100,1,161,1,115,84,116,10,124,2,131, 1,124,0,95,11,110,78,116,10,131,0,125,3,120,64,124, - 2,68,0,93,56,125,4,124,4,106,12,100,2,131,1,92, - 3,125,5,125,6,125,7,124,6,114,138,100,3,106,13,124, - 5,124,7,106,14,131,0,131,2,125,8,110,4,124,5,125, - 8,124,3,106,15,124,8,131,1,1,0,113,96,87,0,124, - 3,124,0,95,11,116,7,106,8,106,9,116,16,131,1,114, + 2,68,0,93,56,125,4,124,4,160,12,100,2,161,1,92, + 3,125,5,125,6,125,7,124,6,114,138,100,3,160,13,124, + 5,124,7,160,14,161,0,161,2,125,8,110,4,124,5,125, + 8,124,3,160,15,124,8,161,1,1,0,113,96,87,0,124, + 3,124,0,95,11,116,7,106,8,160,9,116,16,161,1,114, 190,100,4,100,5,132,0,124,2,68,0,131,1,124,0,95, 17,100,6,83,0,41,7,122,68,70,105,108,108,32,116,104, 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, @@ -2160,12 +2160,12 @@ const unsigned char _Py_M__importlib_external[] = { 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,61,0,0,0,122,5,123,125,46,123,125,99,1, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,83, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,83, 0,0,0,115,20,0,0,0,104,0,124,0,93,12,125,1, - 124,1,106,0,131,0,146,2,113,4,83,0,114,4,0,0, + 124,1,160,0,161,0,146,2,113,4,83,0,114,4,0,0, 0,41,1,114,92,0,0,0,41,2,114,24,0,0,0,90, 2,102,110,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,250,9,60,115,101,116,99,111,109,112,62,30,5,0, + 0,0,250,9,60,115,101,116,99,111,109,112,62,31,5,0, 0,115,2,0,0,0,6,0,122,41,70,105,108,101,70,105, 110,100,101,114,46,95,102,105,108,108,95,99,97,99,104,101, 46,60,108,111,99,97,108,115,62,46,60,115,101,116,99,111, @@ -2182,7 +2182,7 @@ const unsigned char _Py_M__importlib_external[] = { 102,105,120,95,99,111,110,116,101,110,116,115,114,244,0,0, 0,114,102,0,0,0,114,234,0,0,0,114,222,0,0,0, 90,8,110,101,119,95,110,97,109,101,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,114,12,1,0,0,1,5, + 4,0,0,0,114,6,0,0,0,114,12,1,0,0,2,5, 0,0,115,34,0,0,0,0,2,6,1,2,1,22,1,20, 3,10,3,12,1,12,7,6,1,10,1,16,1,4,1,18, 2,4,1,14,1,6,1,12,1,122,22,70,105,108,101,70, @@ -2220,7 +2220,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,114,103,0,0,0,41,1,114,37,0,0,0,41, 2,114,168,0,0,0,114,11,1,0,0,114,4,0,0,0, 114,6,0,0,0,218,24,112,97,116,104,95,104,111,111,107, - 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,42, + 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,43, 5,0,0,115,6,0,0,0,0,2,8,1,12,1,122,54, 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, 104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97, @@ -2228,16 +2228,16 @@ const unsigned char _Py_M__importlib_external[] = { 70,105,110,100,101,114,114,4,0,0,0,41,3,114,168,0, 0,0,114,11,1,0,0,114,17,1,0,0,114,4,0,0, 0,41,2,114,168,0,0,0,114,11,1,0,0,114,6,0, - 0,0,218,9,112,97,116,104,95,104,111,111,107,32,5,0, + 0,0,218,9,112,97,116,104,95,104,111,111,107,33,5,0, 0,115,4,0,0,0,0,10,14,6,122,20,70,105,108,101, 70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107, - 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, - 0,67,0,0,0,115,12,0,0,0,100,1,106,0,124,0, - 106,1,131,1,83,0,41,2,78,122,16,70,105,108,101,70, + 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,115,12,0,0,0,100,1,160,0,124,0, + 106,1,161,1,83,0,41,2,78,122,16,70,105,108,101,70, 105,110,100,101,114,40,123,33,114,125,41,41,2,114,50,0, 0,0,114,37,0,0,0,41,1,114,104,0,0,0,114,4, 0,0,0,114,4,0,0,0,114,6,0,0,0,114,243,0, - 0,0,50,5,0,0,115,2,0,0,0,0,1,122,19,70, + 0,0,51,5,0,0,115,2,0,0,0,0,1,122,19,70, 105,108,101,70,105,110,100,101,114,46,95,95,114,101,112,114, 95,95,41,1,78,41,15,114,109,0,0,0,114,108,0,0, 0,114,110,0,0,0,114,111,0,0,0,114,182,0,0,0, @@ -2245,12 +2245,12 @@ const unsigned char _Py_M__importlib_external[] = { 121,0,0,0,114,4,1,0,0,114,178,0,0,0,114,12, 1,0,0,114,180,0,0,0,114,18,1,0,0,114,243,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,6,0,0,0,114,5,1,0,0,163,4,0,0,115, + 0,114,6,0,0,0,114,5,1,0,0,164,4,0,0,115, 20,0,0,0,8,7,4,2,8,14,8,4,4,2,8,12, 8,5,10,48,8,31,12,18,114,5,1,0,0,99,4,0, 0,0,0,0,0,0,6,0,0,0,11,0,0,0,67,0, - 0,0,115,146,0,0,0,124,0,106,0,100,1,131,1,125, - 4,124,0,106,0,100,2,131,1,125,5,124,4,115,66,124, + 0,0,115,146,0,0,0,124,0,160,0,100,1,161,1,125, + 4,124,0,160,0,100,2,161,1,125,5,124,4,115,66,124, 5,114,36,124,5,106,1,125,4,110,30,124,2,124,3,107, 2,114,56,116,2,124,1,124,2,131,2,125,4,110,10,116, 3,124,1,124,2,131,2,125,4,124,5,115,84,116,4,124, @@ -2268,12 +2268,12 @@ const unsigned char _Py_M__importlib_external[] = { 90,8,112,97,116,104,110,97,109,101,90,9,99,112,97,116, 104,110,97,109,101,114,124,0,0,0,114,162,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,14, - 95,102,105,120,95,117,112,95,109,111,100,117,108,101,56,5, + 95,102,105,120,95,117,112,95,109,111,100,117,108,101,57,5, 0,0,115,34,0,0,0,0,2,10,1,10,1,4,1,4, 1,8,1,8,1,12,2,10,1,4,1,14,1,2,1,8, 1,8,1,8,1,12,1,14,2,114,23,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,38,0,0,0,116,0,116,1,106,2,131,0, + 0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,0, 102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,6, 102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,1, 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, @@ -2288,13 +2288,13 @@ const unsigned char _Py_M__importlib_external[] = { 114,78,0,0,0,41,3,90,10,101,120,116,101,110,115,105, 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116, 101,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, - 6,0,0,0,114,159,0,0,0,79,5,0,0,115,8,0, + 6,0,0,0,114,159,0,0,0,80,5,0,0,115,8,0, 0,0,0,5,12,1,8,1,8,1,114,159,0,0,0,99, 1,0,0,0,0,0,0,0,12,0,0,0,12,0,0,0, 67,0,0,0,115,188,1,0,0,124,0,97,0,116,0,106, 1,97,1,116,0,106,2,97,2,116,1,106,3,116,4,25, 0,125,1,120,56,100,26,68,0,93,48,125,2,124,2,116, - 1,106,3,107,7,114,58,116,0,106,5,124,2,131,1,125, + 1,106,3,107,7,114,58,116,0,160,5,124,2,161,1,125, 3,110,10,116,1,106,3,124,2,25,0,125,3,116,6,124, 1,124,2,124,3,131,3,1,0,113,32,87,0,100,5,100, 6,103,1,102,2,100,7,100,8,100,6,103,2,102,2,102, @@ -2302,22 +2302,22 @@ const unsigned char _Py_M__importlib_external[] = { 6,116,7,100,9,100,10,132,0,124,6,68,0,131,1,131, 1,115,142,116,8,130,1,124,6,100,11,25,0,125,7,124, 5,116,1,106,3,107,6,114,174,116,1,106,3,124,5,25, - 0,125,8,80,0,113,112,121,16,116,0,106,5,124,5,131, + 0,125,8,80,0,113,112,121,16,116,0,160,5,124,5,161, 1,125,8,80,0,87,0,113,112,4,0,116,9,107,10,114, 212,1,0,1,0,1,0,119,112,89,0,113,112,88,0,113, 112,87,0,116,9,100,12,131,1,130,1,116,6,124,1,100, 13,124,8,131,3,1,0,116,6,124,1,100,14,124,7,131, - 3,1,0,116,6,124,1,100,15,100,16,106,10,124,6,131, - 1,131,3,1,0,121,14,116,0,106,5,100,17,131,1,125, + 3,1,0,116,6,124,1,100,15,100,16,160,10,124,6,161, + 1,131,3,1,0,121,14,116,0,160,5,100,17,161,1,125, 9,87,0,110,26,4,0,116,9,107,10,144,1,114,52,1, 0,1,0,1,0,100,18,125,9,89,0,110,2,88,0,116, - 6,124,1,100,17,124,9,131,3,1,0,116,0,106,5,100, - 19,131,1,125,10,116,6,124,1,100,19,124,10,131,3,1, - 0,124,5,100,7,107,2,144,1,114,120,116,0,106,5,100, - 20,131,1,125,11,116,6,124,1,100,21,124,11,131,3,1, + 6,124,1,100,17,124,9,131,3,1,0,116,0,160,5,100, + 19,161,1,125,10,116,6,124,1,100,19,124,10,131,3,1, + 0,124,5,100,7,107,2,144,1,114,120,116,0,160,5,100, + 20,161,1,125,11,116,6,124,1,100,21,124,11,131,3,1, 0,116,6,124,1,100,22,116,11,131,0,131,3,1,0,116, - 12,106,13,116,2,106,14,131,0,131,1,1,0,124,5,100, - 7,107,2,144,1,114,184,116,15,106,16,100,23,131,1,1, + 12,160,13,116,2,160,14,161,0,161,1,1,0,124,5,100, + 7,107,2,144,1,114,184,116,15,160,16,100,23,161,1,1, 0,100,24,116,12,107,6,144,1,114,184,100,25,116,17,95, 18,100,18,83,0,41,27,122,205,83,101,116,117,112,32,116, 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, @@ -2341,7 +2341,7 @@ const unsigned char _Py_M__importlib_external[] = { 100,1,83,0,41,2,114,31,0,0,0,78,41,1,114,33, 0,0,0,41,2,114,24,0,0,0,114,81,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,224, - 0,0,0,115,5,0,0,115,2,0,0,0,4,0,122,25, + 0,0,0,116,5,0,0,115,2,0,0,0,4,0,122,25, 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46, 60,103,101,110,101,120,112,114,62,114,62,0,0,0,122,30, 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114, @@ -2370,17 +2370,17 @@ const unsigned char _Py_M__importlib_external[] = { 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, 117,108,101,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,218,6,95,115,101,116,117,112,90,5,0,0,115,82, + 0,0,218,6,95,115,101,116,117,112,91,5,0,0,115,82, 0,0,0,0,8,4,1,6,1,6,3,10,1,10,1,10, 1,12,2,10,1,16,3,22,1,14,2,22,1,8,1,10, 1,10,1,4,2,2,1,10,1,6,1,14,1,12,2,8, 1,12,1,12,1,18,3,2,1,14,1,16,2,10,1,12, 3,10,1,12,3,10,1,10,1,12,3,14,1,14,1,10, 1,10,1,10,1,114,31,1,0,0,99,1,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, 50,0,0,0,116,0,124,0,131,1,1,0,116,1,131,0, - 125,1,116,2,106,3,106,4,116,5,106,6,124,1,142,0, - 103,1,131,1,1,0,116,2,106,7,106,8,116,9,131,1, + 125,1,116,2,106,3,160,4,116,5,106,6,124,1,142,0, + 103,1,161,1,1,0,116,2,106,7,160,8,116,9,161,1, 1,0,100,1,83,0,41,2,122,41,73,110,115,116,97,108, 108,32,116,104,101,32,112,97,116,104,45,98,97,115,101,100, 32,105,109,112,111,114,116,32,99,111,109,112,111,110,101,110, @@ -2391,7 +2391,7 @@ const unsigned char _Py_M__importlib_external[] = { 114,30,1,0,0,90,17,115,117,112,112,111,114,116,101,100, 95,108,111,97,100,101,114,115,114,4,0,0,0,114,4,0, 0,0,114,6,0,0,0,218,8,95,105,110,115,116,97,108, - 108,158,5,0,0,115,8,0,0,0,0,2,8,1,6,1, + 108,159,5,0,0,115,8,0,0,0,0,2,8,1,6,1, 20,1,114,33,1,0,0,41,1,114,0,0,0,0,41,2, 114,1,0,0,0,114,2,0,0,0,41,1,114,49,0,0, 0,41,1,78,41,3,78,78,78,41,3,78,78,78,41,2, @@ -2424,7 +2424,7 @@ const unsigned char _Py_M__importlib_external[] = { 0,0,0,114,4,0,0,0,114,6,0,0,0,218,8,60, 109,111,100,117,108,101,62,8,0,0,0,115,108,0,0,0, 4,16,4,1,4,1,2,1,6,3,8,17,8,5,8,5, - 8,6,8,12,8,10,8,9,8,5,8,7,10,22,10,123, + 8,6,8,12,8,10,8,9,8,5,8,7,10,22,10,124, 16,1,12,2,4,1,4,2,6,2,6,2,8,2,16,45, 8,34,8,19,8,12,8,12,8,28,8,17,10,55,10,12, 10,10,8,14,6,3,4,1,14,67,14,64,14,29,16,110, diff --git a/Python/marshal.c b/Python/marshal.c index 87a4b240a4..d71d3c2b9d 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -1274,7 +1274,7 @@ r_object(RFILE *p) if (n == 0 && type == TYPE_FROZENSET) { /* call frozenset() to get the empty frozenset singleton */ - v = PyObject_CallFunction((PyObject*)&PyFrozenSet_Type, NULL); + v = _PyObject_CallNoArg((PyObject*)&PyFrozenSet_Type); if (v == NULL) break; R_REF(v); @@ -1649,7 +1649,7 @@ marshal_dump(PyObject *self, PyObject *args) s = PyMarshal_WriteObjectToString(x, version); if (s == NULL) return NULL; - res = _PyObject_CallMethodId(f, &PyId_write, "O", s); + res = _PyObject_CallMethodIdObjArgs(f, &PyId_write, s, NULL); Py_DECREF(s); return res; } diff --git a/Python/modsupport.c b/Python/modsupport.c index aabee8fa59..01b5dc9dda 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -7,16 +7,17 @@ typedef double va_double; static PyObject *va_build_value(const char *, va_list, int); +static PyObject **va_build_stack(PyObject **small_stack, Py_ssize_t small_stack_len, const char *, va_list, int, Py_ssize_t*); /* Package context -- the full module name for package imports */ -char *_Py_PackageContext = NULL; +const char *_Py_PackageContext = NULL; /* Helper for mkvalue() to scan the length of a format */ -static int -countformat(const char *format, int endchar) +static Py_ssize_t +countformat(const char *format, char endchar) { - int count = 0; + Py_ssize_t count = 0; int level = 0; while (level > 0 || *format != endchar) { switch (*format) { @@ -28,8 +29,9 @@ countformat(const char *format, int endchar) case '(': case '[': case '{': - if (level == 0) + if (level == 0) { count++; + } level++; break; case ')': @@ -45,8 +47,9 @@ countformat(const char *format, int endchar) case '\t': break; default: - if (level == 0) + if (level == 0) { count++; + } } format++; } @@ -57,17 +60,18 @@ countformat(const char *format, int endchar) /* Generic function to create a value -- the inverse of getargs() */ /* After an original idea and first implementation by Steven Miale */ -static PyObject *do_mktuple(const char**, va_list *, int, int, int); -static PyObject *do_mklist(const char**, va_list *, int, int, int); -static PyObject *do_mkdict(const char**, va_list *, int, int, int); +static PyObject *do_mktuple(const char**, va_list *, char, Py_ssize_t, int); +static int do_mkstack(PyObject **, const char**, va_list *, char, Py_ssize_t, int); +static PyObject *do_mklist(const char**, va_list *, char, Py_ssize_t, int); +static PyObject *do_mkdict(const char**, va_list *, char, Py_ssize_t, int); static PyObject *do_mkvalue(const char**, va_list *, int); static void -do_ignore(const char **p_format, va_list *p_va, int endchar, int n, int flags) +do_ignore(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags) { PyObject *v; - int i; + Py_ssize_t i; assert(PyErr_Occurred()); v = PyTuple_New(n); for (i = 0; i < n; i++) { @@ -91,15 +95,16 @@ do_ignore(const char **p_format, va_list *p_va, int endchar, int n, int flags) "Unmatched paren in format"); return; } - if (endchar) + if (endchar) { ++*p_format; + } } static PyObject * -do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags) +do_mkdict(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags) { PyObject *d; - int i; + Py_ssize_t i; if (n < 0) return NULL; if (n % 2) { @@ -146,10 +151,10 @@ do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags) } static PyObject * -do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags) +do_mklist(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags) { PyObject *v; - int i; + Py_ssize_t i; if (n < 0) return NULL; /* Note that we can't bail immediately on error as this will leak @@ -179,11 +184,48 @@ do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags) return v; } +static int +do_mkstack(PyObject **stack, const char **p_format, va_list *p_va, + char endchar, Py_ssize_t n, int flags) +{ + Py_ssize_t i; + + if (n < 0) { + return -1; + } + /* Note that we can't bail immediately on error as this will leak + refcounts on any 'N' arguments. */ + for (i = 0; i < n; i++) { + PyObject *w = do_mkvalue(p_format, p_va, flags); + if (w == NULL) { + do_ignore(p_format, p_va, endchar, n - i - 1, flags); + goto error; + } + stack[i] = w; + } + if (**p_format != endchar) { + PyErr_SetString(PyExc_SystemError, + "Unmatched paren in format"); + goto error; + } + if (endchar) { + ++*p_format; + } + return 0; + +error: + n = i; + for (i=0; i < n; i++) { + Py_DECREF(stack[i]); + } + return -1; +} + static PyObject * -do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags) +do_mktuple(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags) { PyObject *v; - int i; + Py_ssize_t i; if (n < 0) return NULL; /* Note that we can't bail immediately on error as this will leak @@ -286,8 +328,8 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) } else { if (n < 0) - n = Py_UNICODE_strlen(u); - v = PyUnicode_FromUnicode(u, n); + n = wcslen(u); + v = PyUnicode_FromWideChar(u, n); } return v; } @@ -465,7 +507,7 @@ static PyObject * va_build_value(const char *format, va_list va, int flags) { const char *f = format; - int n = countformat(f, '\0'); + Py_ssize_t n = countformat(f, '\0'); va_list lva; PyObject *retval; @@ -485,9 +527,68 @@ va_build_value(const char *format, va_list va, int flags) return retval; } +PyObject ** +_Py_VaBuildStack(PyObject **small_stack, Py_ssize_t small_stack_len, + const char *format, va_list va, Py_ssize_t *p_nargs) +{ + return va_build_stack(small_stack, small_stack_len, format, va, 0, p_nargs); +} + +PyObject ** +_Py_VaBuildStack_SizeT(PyObject **small_stack, Py_ssize_t small_stack_len, + const char *format, va_list va, Py_ssize_t *p_nargs) +{ + return va_build_stack(small_stack, small_stack_len, format, va, FLAG_SIZE_T, p_nargs); +} + +static PyObject ** +va_build_stack(PyObject **small_stack, Py_ssize_t small_stack_len, + const char *format, va_list va, int flags, Py_ssize_t *p_nargs) +{ + const char *f; + Py_ssize_t n; + va_list lva; + PyObject **stack; + int res; + + n = countformat(format, '\0'); + if (n < 0) { + *p_nargs = 0; + return NULL; + } + + if (n == 0) { + *p_nargs = 0; + return small_stack; + } + + if (n <= small_stack_len) { + stack = small_stack; + } + else { + stack = PyMem_Malloc(n * sizeof(stack[0])); + if (stack == NULL) { + PyErr_NoMemory(); + return NULL; + } + } + + va_copy(lva, va); + f = format; + res = do_mkstack(stack, &f, &lva, '\0', n, flags); + va_end(lva); + + if (res < 0) { + return NULL; + } + + *p_nargs = n; + return stack; +} + PyObject * -PyEval_CallFunction(PyObject *obj, const char *format, ...) +PyEval_CallFunction(PyObject *callable, const char *format, ...) { va_list vargs; PyObject *args; @@ -501,7 +602,7 @@ PyEval_CallFunction(PyObject *obj, const char *format, ...) if (args == NULL) return NULL; - res = PyEval_CallObject(obj, args); + res = PyEval_CallObject(callable, args); Py_DECREF(args); return res; @@ -509,14 +610,14 @@ PyEval_CallFunction(PyObject *obj, const char *format, ...) PyObject * -PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...) +PyEval_CallMethod(PyObject *obj, const char *name, const char *format, ...) { va_list vargs; PyObject *meth; PyObject *args; PyObject *res; - meth = PyObject_GetAttrString(obj, methodname); + meth = PyObject_GetAttrString(obj, name); if (meth == NULL) return NULL; diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 72d24080d8..567f8723a6 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -159,8 +159,8 @@ static void *opcode_targets[256] = { &&TARGET_BUILD_STRING, &&TARGET_BUILD_TUPLE_UNPACK_WITH_CALL, &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_LOAD_METHOD, + &&TARGET_CALL_METHOD, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index a4f7f823bc..06030c330a 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -193,7 +193,8 @@ add_flag(int flag, const char *envs) static char* get_codec_name(const char *encoding) { - char *name_utf8, *name_str; + const char *name_utf8; + char *name_str; PyObject *codec, *name = NULL; codec = _PyCodec_Lookup(encoding); @@ -1284,8 +1285,7 @@ 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 * std_encoding; - std_encoding = PyUnicode_AsUTF8(encoding_attr); + const char *std_encoding = PyUnicode_AsUTF8(encoding_attr); if (std_encoding != NULL) { PyObject *codec_info = _PyCodec_Lookup(std_encoding); Py_XDECREF(codec_info); diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 8befa546a9..5bddbad1c8 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -154,7 +154,7 @@ PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags) PyObject *m, *d, *v, *w, *oenc = NULL, *mod_name; mod_ty mod; PyArena *arena; - char *ps1 = "", *ps2 = "", *enc = NULL; + const char *ps1 = "", *ps2 = "", *enc = NULL; int errcode = 0; _Py_IDENTIFIER(encoding); _Py_IDENTIFIER(__main__); @@ -511,8 +511,8 @@ PyErr_Print(void) static void print_error_text(PyObject *f, int offset, PyObject *text_obj) { - char *text; - char *nl; + const char *text; + const char *nl; text = PyUnicode_AsUTF8(text_obj); if (text == NULL) diff --git a/Python/structmember.c b/Python/structmember.c index be2737d405..e653d0277c 100644 --- a/Python/structmember.c +++ b/Python/structmember.c @@ -249,7 +249,7 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) Py_XDECREF(oldv); break; case T_CHAR: { - char *string; + const char *string; Py_ssize_t len; string = PyUnicode_AsUTF8AndSize(v, &len); diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 52034ff7fb..9c4d9e6a1c 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -108,7 +108,7 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o) { PyObject *stdout_encoding = NULL; PyObject *encoded, *escaped_str, *repr_str, *buffer, *result; - char *stdout_encoding_str; + const char *stdout_encoding_str; int ret; stdout_encoding = _PyObject_GetAttrId(outf, &PyId_encoding); @@ -130,7 +130,7 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o) buffer = _PyObject_GetAttrId(outf, &PyId_buffer); if (buffer) { - result = _PyObject_CallMethodId(buffer, &PyId_write, "(O)", encoded); + result = _PyObject_CallMethodIdObjArgs(buffer, &PyId_write, encoded, NULL); Py_DECREF(buffer); Py_DECREF(encoded); if (result == NULL) @@ -1098,7 +1098,7 @@ _PySys_GetSizeOf(PyObject *o) Py_TYPE(o)->tp_name); } else { - res = PyObject_CallFunctionObjArgs(method, NULL); + res = _PyObject_CallNoArg(method); Py_DECREF(method); } @@ -1287,6 +1287,19 @@ a 11-tuple where the entries in the tuple are counts of:\n\ 10. Number of stack pops performed by call_function()" ); +static PyObject * +sys_callstats(PyObject *self) +{ + if (PyErr_WarnEx(PyExc_DeprecationWarning, + "sys.callstats() has been deprecated in Python 3.7 " + "and will be removed in the future", 1) < 0) { + return NULL; + } + + Py_RETURN_NONE; +} + + #ifdef __cplusplus extern "C" { #endif @@ -1350,9 +1363,23 @@ PyDoc_STRVAR(is_finalizing_doc, Return True if Python is exiting."); +#ifdef ANDROID_API_LEVEL +PyDoc_STRVAR(getandroidapilevel_doc, +"getandroidapilevel()\n\ +\n\ +Return the build time API version of Android as an integer."); + +static PyObject * +sys_getandroidapilevel(PyObject *self) +{ + return PyLong_FromLong(ANDROID_API_LEVEL); +} +#endif /* ANDROID_API_LEVEL */ + + static PyMethodDef sys_methods[] = { /* Might as well keep this in alphabetic order */ - {"callstats", (PyCFunction)PyEval_GetCallStats, METH_NOARGS, + {"callstats", (PyCFunction)sys_callstats, METH_NOARGS, callstats_doc}, {"_clear_type_cache", sys_clear_type_cache, METH_NOARGS, sys_clear_type_cache__doc__}, @@ -1434,6 +1461,10 @@ static PyMethodDef sys_methods[] = { METH_VARARGS | METH_KEYWORDS, set_asyncgen_hooks_doc}, {"get_asyncgen_hooks", sys_get_asyncgen_hooks, METH_NOARGS, get_asyncgen_hooks_doc}, +#ifdef ANDROID_API_LEVEL + {"getandroidapilevel", (PyCFunction)sys_getandroidapilevel, METH_NOARGS, + getandroidapilevel_doc}, +#endif {NULL, NULL} /* sentinel */ }; @@ -1547,8 +1578,9 @@ error: Py_XDECREF(name); Py_XDECREF(value); /* No return value, therefore clear error state if possible */ - if (_PyThreadState_UncheckedGet()) + if (_PyThreadState_UncheckedGet()) { PyErr_Clear(); + } } PyObject * @@ -2293,7 +2325,7 @@ sys_pyfile_write_unicode(PyObject *unicode, PyObject *file) if (writer == NULL) goto error; - result = _PyObject_CallArg1(writer, unicode); + result = PyObject_CallFunctionObjArgs(writer, unicode, NULL); if (result == NULL) { goto error; } else { @@ -2403,7 +2435,7 @@ sys_format(_Py_Identifier *key, FILE *fp, const char *format, va_list va) { PyObject *file, *message; PyObject *error_type, *error_value, *error_traceback; - char *utf8; + const char *utf8; PyErr_Fetch(&error_type, &error_value, &error_traceback); file = _PySys_GetObjectId(key); |