diff options
author | shadchin <shadchin@yandex-team.com> | 2023-10-03 23:32:21 +0300 |
---|---|---|
committer | shadchin <shadchin@yandex-team.com> | 2023-10-03 23:48:51 +0300 |
commit | 01ffd024041ac933854c367fb8d1b5682d19883f (patch) | |
tree | b70aa497ba132a133ccece49f7763427dcd0743f /contrib/tools/python3/src/Python | |
parent | a33fdb9a34581fd124e92535153b1f1fdeca6aaf (diff) | |
download | ydb-01ffd024041ac933854c367fb8d1b5682d19883f.tar.gz |
Update Python 3 to 3.11.6
Diffstat (limited to 'contrib/tools/python3/src/Python')
-rw-r--r-- | contrib/tools/python3/src/Python/ast.c | 5 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/ceval.c | 26 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/ceval_gil.h | 33 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/deepfreeze/deepfreeze.c | 613 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/fileutils.c | 4 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/pystate.c | 44 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/pythonrun.c | 24 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/symtable.c | 57 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/sysmodule.c | 11 | ||||
-rw-r--r-- | contrib/tools/python3/src/Python/traceback.c | 65 |
10 files changed, 687 insertions, 195 deletions
diff --git a/contrib/tools/python3/src/Python/ast.c b/contrib/tools/python3/src/Python/ast.c index 95179cb702..8bc3c96237 100644 --- a/contrib/tools/python3/src/Python/ast.c +++ b/contrib/tools/python3/src/Python/ast.c @@ -379,6 +379,11 @@ validate_expr(struct validator *state, expr_ty exp, expr_context_ty ctx) ret = validate_exprs(state, exp->v.Tuple.elts, ctx, 0); break; case NamedExpr_kind: + if (exp->v.NamedExpr.target->kind != Name_kind) { + PyErr_SetString(PyExc_TypeError, + "NamedExpr target must be a Name"); + return 0; + } ret = validate_expr(state, exp->v.NamedExpr.value, Load); break; /* This last case doesn't have any checking. */ diff --git a/contrib/tools/python3/src/Python/ceval.c b/contrib/tools/python3/src/Python/ceval.c index 47df353197..df11de084d 100644 --- a/contrib/tools/python3/src/Python/ceval.c +++ b/contrib/tools/python3/src/Python/ceval.c @@ -216,20 +216,6 @@ _PyEvalFrameClearAndPop(PyThreadState *tstate, _PyInterpreterFrame *frame); "cannot access free variable '%s' where it is not associated with a" \ " value in enclosing scope" -#ifndef NDEBUG -/* Ensure that tstate is valid: sanity check for PyEval_AcquireThread() and - PyEval_RestoreThread(). Detect if tstate memory was freed. It can happen - when a thread continues to run after Python finalization, especially - daemon threads. */ -static int -is_tstate_valid(PyThreadState *tstate) -{ - assert(!_PyMem_IsPtrFreed(tstate)); - assert(!_PyMem_IsPtrFreed(tstate->interp)); - return 1; -} -#endif - /* This can set eval_breaker to 0 even though gil_drop_request became 1. We believe this is all right because the eval loop will release @@ -464,7 +450,7 @@ PyEval_AcquireThread(PyThreadState *tstate) void PyEval_ReleaseThread(PyThreadState *tstate) { - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); _PyRuntimeState *runtime = tstate->interp->runtime; PyThreadState *new_tstate = _PyThreadState_Swap(&runtime->gilstate, NULL); @@ -671,7 +657,7 @@ Py_AddPendingCall(int (*func)(void *), void *arg) static int handle_signals(PyThreadState *tstate) { - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); if (!_Py_ThreadCanHandleSignals(tstate->interp)) { return 0; } @@ -739,7 +725,7 @@ void _Py_FinishPendingCalls(PyThreadState *tstate) { assert(PyGILState_Check()); - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); struct _pending_calls *pending = &tstate->interp->ceval.pending; @@ -764,7 +750,7 @@ Py_MakePendingCalls(void) assert(PyGILState_Check()); PyThreadState *tstate = _PyThreadState_GET(); - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); /* Python signal handler doesn't really queue a callback: it only signals that a signal was received, see _PyEval_SignalReceived(). */ @@ -6947,7 +6933,7 @@ maybe_call_line_trace(Py_tracefunc func, PyObject *obj, int _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg) { - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); /* The caller must hold the GIL */ assert(PyGILState_Check()); @@ -6999,7 +6985,7 @@ PyEval_SetProfile(Py_tracefunc func, PyObject *arg) int _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg) { - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); /* The caller must hold the GIL */ assert(PyGILState_Check()); diff --git a/contrib/tools/python3/src/Python/ceval_gil.h b/contrib/tools/python3/src/Python/ceval_gil.h index 476ed7f1a2..94e2df03e0 100644 --- a/contrib/tools/python3/src/Python/ceval_gil.h +++ b/contrib/tools/python3/src/Python/ceval_gil.h @@ -171,7 +171,7 @@ drop_gil(struct _ceval_runtime_state *ceval, struct _ceval_state *ceval2, /* Not switched yet => wait */ if (((PyThreadState*)_Py_atomic_load_relaxed(&gil->last_holder)) == tstate) { - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); RESET_GIL_DROP_REQUEST(tstate->interp); /* NOTE: if COND_WAIT does not atomically start waiting when releasing the mutex, another thread can run through, take @@ -185,25 +185,6 @@ drop_gil(struct _ceval_runtime_state *ceval, struct _ceval_state *ceval2, } -/* Check if a Python thread must exit immediately, rather than taking the GIL - if Py_Finalize() has been called. - - When this function is called by a daemon thread after Py_Finalize() has been - called, the GIL does no longer exist. - - tstate must be non-NULL. */ -static inline int -tstate_must_exit(PyThreadState *tstate) -{ - /* bpo-39877: Access _PyRuntime directly rather than using - tstate->interp->runtime to support calls from Python daemon threads. - After Py_Finalize() has been called, tstate can be a dangling pointer: - point to PyThreadState freed memory. */ - PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(&_PyRuntime); - return (finalizing != NULL && finalizing != tstate); -} - - /* Take the GIL. The function saves errno at entry and restores its value at exit. @@ -216,7 +197,7 @@ take_gil(PyThreadState *tstate) assert(tstate != NULL); - if (tstate_must_exit(tstate)) { + if (_PyThreadState_MustExit(tstate)) { /* bpo-39877: If Py_Finalize() has been called and tstate is not the thread which called Py_Finalize(), exit immediately the thread. @@ -226,7 +207,7 @@ take_gil(PyThreadState *tstate) PyThread_exit_thread(); } - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); PyInterpreterState *interp = tstate->interp; struct _ceval_runtime_state *ceval = &interp->runtime->ceval; struct _ceval_state *ceval2 = &interp->ceval; @@ -255,7 +236,7 @@ take_gil(PyThreadState *tstate) _Py_atomic_load_relaxed(&gil->locked) && gil->switch_number == saved_switchnum) { - if (tstate_must_exit(tstate)) { + if (_PyThreadState_MustExit(tstate)) { MUTEX_UNLOCK(gil->mutex); // gh-96387: If the loop requested a drop request in a previous // iteration, reset the request. Otherwise, drop_gil() can @@ -268,7 +249,7 @@ take_gil(PyThreadState *tstate) } PyThread_exit_thread(); } - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); SET_GIL_DROP_REQUEST(interp); drop_requested = 1; @@ -295,7 +276,7 @@ _ready: MUTEX_UNLOCK(gil->switch_mutex); #endif - if (tstate_must_exit(tstate)) { + if (_PyThreadState_MustExit(tstate)) { /* bpo-36475: If Py_Finalize() has been called and tstate is not the thread which called Py_Finalize(), exit immediately the thread. @@ -307,7 +288,7 @@ _ready: drop_gil(ceval, ceval2, tstate); PyThread_exit_thread(); } - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); if (_Py_atomic_load_relaxed(&ceval2->gil_drop_request)) { RESET_GIL_DROP_REQUEST(interp); diff --git a/contrib/tools/python3/src/Python/deepfreeze/deepfreeze.c b/contrib/tools/python3/src/Python/deepfreeze/deepfreeze.c index 4c527746a2..10274f6b5b 100644 --- a/contrib/tools/python3/src/Python/deepfreeze/deepfreeze.c +++ b/contrib/tools/python3/src/Python/deepfreeze/deepfreeze.c @@ -63328,13 +63328,203 @@ codecs_toplevel_consts_24_consts_10 = { }; static struct { + PyASCIIObject _ascii; + uint8_t _data[19]; + } +codecs_toplevel_consts_24_consts_11_consts_1 = { + ._ascii = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyUnicode_Type, + }, + .length = 18, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .ready = 1, + }, + }, + ._data = "can't serialize %s", +}; +static + struct { + PyGC_Head _gc_head; + struct { + PyObject_VAR_HEAD + PyObject *ob_item[2]; + }_object; + } +codecs_toplevel_consts_24_consts_11_consts = { + ._object = { + .ob_base = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyTuple_Type, + }, + .ob_size = 2, + }, + .ob_item = { + Py_None, + & codecs_toplevel_consts_24_consts_11_consts_1._ascii.ob_base, + }, + }, +}; +static + struct { + PyGC_Head _gc_head; + struct { + PyObject_VAR_HEAD + PyObject *ob_item[3]; + }_object; + } +codecs_toplevel_consts_24_consts_11_names = { + ._object = { + .ob_base = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyTuple_Type, + }, + .ob_size = 3, + }, + .ob_item = { + & const_str_TypeError._ascii.ob_base, + &_Py_ID(__class__), + &_Py_ID(__name__), + }, + }, +}; +static + struct { + PyASCIIObject _ascii; + uint8_t _data[27]; + } +codecs_toplevel_consts_24_consts_11_qualname = { + ._ascii = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyUnicode_Type, + }, + .length = 26, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .ready = 1, + }, + }, + ._data = "StreamWriter.__reduce_ex__", +}; +static + struct { + PyObject_VAR_HEAD + Py_hash_t ob_shash; + char ob_sval[28]; + } +codecs_toplevel_consts_24_consts_11_linetable = { + .ob_base = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyBytes_Type, + }, + .ob_size = 27, + }, + .ob_shash = -1, + .ob_sval = "\x80\x00\xdd\x0e\x17\xd0\x18\x2c\xa8\x74\xac\x7e\xd4\x2f\x46\xd1\x18\x46\xd1\x0e\x47\xd4\x0e\x47\xd0\x08\x47", +}; +static + struct { + PyASCIIObject _ascii; + uint8_t _data[6]; + } +const_str_proto = { + ._ascii = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyUnicode_Type, + }, + .length = 5, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .ready = 1, + }, + }, + ._data = "proto", +}; +static + struct { + PyGC_Head _gc_head; + struct { + PyObject_VAR_HEAD + PyObject *ob_item[2]; + }_object; + } +codecs_toplevel_consts_24_consts_11_localsplusnames = { + ._object = { + .ob_base = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyTuple_Type, + }, + .ob_size = 2, + }, + .ob_item = { + & const_str_self._ascii.ob_base, + & const_str_proto._ascii.ob_base, + }, + }, +}; +static + struct _PyCode_DEF(58) +codecs_toplevel_consts_24_consts_11 = { + .ob_base = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyCode_Type, + }, + .ob_size = 29, + }, + .co_consts = & codecs_toplevel_consts_24_consts_11_consts._object.ob_base.ob_base, + .co_names = & codecs_toplevel_consts_24_consts_11_names._object.ob_base.ob_base, + .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), + .co_flags = 3, + .co_warmup = QUICKENING_INITIAL_WARMUP_VALUE, + ._co_linearray_entry_size = 0, + .co_argcount = 2, + .co_posonlyargcount = 0, + .co_kwonlyargcount = 0, + .co_stacksize = 4, + .co_firstlineno = 417, + .co_nlocalsplus = 2, + .co_nlocals = 2, + .co_nplaincellvars = 0, + .co_ncellvars = 0, + .co_nfreevars = 0, + .co_localsplusnames = & codecs_toplevel_consts_24_consts_11_localsplusnames._object.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_7_consts_2_localspluskinds.ob_base.ob_base, + .co_filename = & codecs_toplevel_consts_12_consts_5_filename._ascii.ob_base, + .co_name = &_Py_ID(__reduce_ex__), + .co_qualname = & codecs_toplevel_consts_24_consts_11_qualname._ascii.ob_base, + .co_linetable = & codecs_toplevel_consts_24_consts_11_linetable.ob_base.ob_base, + ._co_code = NULL, + ._co_linearray = NULL, + .co_code_adaptive = "\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x7c\x00\x6a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x06\x00\x00\xa6\x01\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01", + ._co_firsttraceable = 0, +}; +static + struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD PyObject *ob_item[1]; }_object; } -codecs_toplevel_consts_24_consts_13 = { +codecs_toplevel_consts_24_consts_14 = { ._object = { .ob_base = { .ob_base = { @@ -63353,7 +63543,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[14]; + PyObject *ob_item[15]; }_object; } codecs_toplevel_consts_24_consts = { @@ -63363,7 +63553,7 @@ codecs_toplevel_consts_24_consts = { .ob_refcnt = 999999999, .ob_type = &PyTuple_Type, }, - .ob_size = 14, + .ob_size = 15, }, .ob_item = { & const_str_StreamWriter._ascii.ob_base, @@ -63377,9 +63567,10 @@ codecs_toplevel_consts_24_consts = { & codecs_toplevel_consts_24_consts_8.ob_base.ob_base, & codecs_toplevel_consts_24_consts_9.ob_base.ob_base, & codecs_toplevel_consts_24_consts_10.ob_base.ob_base, + & codecs_toplevel_consts_24_consts_11.ob_base.ob_base, Py_None, & codecs_toplevel_consts_14_consts_6._object.ob_base.ob_base, - & codecs_toplevel_consts_24_consts_13._object.ob_base.ob_base, + & codecs_toplevel_consts_24_consts_14._object.ob_base.ob_base, }, }, }; @@ -63388,7 +63579,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[12]; + PyObject *ob_item[13]; }_object; } codecs_toplevel_consts_24_names = { @@ -63398,7 +63589,7 @@ codecs_toplevel_consts_24_names = { .ob_refcnt = 999999999, .ob_type = &PyTuple_Type, }, - .ob_size = 12, + .ob_size = 13, }, .ob_item = { &_Py_ID(__name__), @@ -63413,6 +63604,7 @@ codecs_toplevel_consts_24_names = { &_Py_ID(__getattr__), &_Py_ID(__enter__), &_Py_ID(__exit__), + &_Py_ID(__reduce_ex__), }, }, }; @@ -63420,7 +63612,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[161]; + char ob_sval[181]; } codecs_toplevel_consts_24_linetable = { .ob_base = { @@ -63428,20 +63620,20 @@ codecs_toplevel_consts_24_linetable = { .ob_refcnt = 999999999, .ob_type = &PyBytes_Type, }, - .ob_size = 160, + .ob_size = 180, }, .ob_shash = -1, - .ob_sval = "\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xf0\x04\x17\x05\x1d\xf0\x00\x17\x05\x1d\xf0\x00\x17\x05\x1d\xf0\x00\x17\x05\x1d\xf0\x32\x05\x05\x20\xf0\x00\x05\x05\x20\xf0\x00\x05\x05\x20\xf0\x0e\x05\x05\x22\xf0\x00\x05\x05\x22\xf0\x00\x05\x05\x22\xf0\x0e\x0a\x05\x0d\xf0\x00\x0a\x05\x0d\xf0\x00\x0a\x05\x0d\xf0\x18\x03\x05\x19\xf0\x00\x03\x05\x19\xf0\x00\x03\x05\x19\xf0\x00\x03\x05\x19\xf0\x0c\x00\x1d\x24\xf0\x03\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x0e\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c", + .ob_sval = "\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xf0\x04\x17\x05\x1d\xf0\x00\x17\x05\x1d\xf0\x00\x17\x05\x1d\xf0\x00\x17\x05\x1d\xf0\x32\x05\x05\x20\xf0\x00\x05\x05\x20\xf0\x00\x05\x05\x20\xf0\x0e\x05\x05\x22\xf0\x00\x05\x05\x22\xf0\x00\x05\x05\x22\xf0\x0e\x0a\x05\x0d\xf0\x00\x0a\x05\x0d\xf0\x00\x0a\x05\x0d\xf0\x18\x03\x05\x19\xf0\x00\x03\x05\x19\xf0\x00\x03\x05\x19\xf0\x00\x03\x05\x19\xf0\x0c\x00\x1d\x24\xf0\x03\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x0e\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x06\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01", }; static - struct _PyCode_DEF(70) + struct _PyCode_DEF(76) codecs_toplevel_consts_24 = { .ob_base = { .ob_base = { .ob_refcnt = 999999999, .ob_type = &PyCode_Type, }, - .ob_size = 35, + .ob_size = 38, }, .co_consts = & codecs_toplevel_consts_24_consts._object.ob_base.ob_base, .co_names = & codecs_toplevel_consts_24_names._object.ob_base.ob_base, @@ -63467,7 +63659,7 @@ codecs_toplevel_consts_24 = { .co_linetable = & codecs_toplevel_consts_24_linetable.ob_base.ob_base, ._co_code = NULL, ._co_linearray = NULL, - .co_code_adaptive = "\x97\x00\x65\x00\x5a\x01\x64\x00\x5a\x02\x64\x0c\x64\x02\x84\x01\x5a\x03\x64\x03\x84\x00\x5a\x04\x64\x04\x84\x00\x5a\x05\x64\x05\x84\x00\x5a\x06\x64\x0d\x64\x07\x84\x01\x5a\x07\x65\x08\x66\x01\x64\x08\x84\x01\x5a\x09\x64\x09\x84\x00\x5a\x0a\x64\x0a\x84\x00\x5a\x0b\x64\x0b\x53\x00", + .co_code_adaptive = "\x97\x00\x65\x00\x5a\x01\x64\x00\x5a\x02\x64\x0d\x64\x02\x84\x01\x5a\x03\x64\x03\x84\x00\x5a\x04\x64\x04\x84\x00\x5a\x05\x64\x05\x84\x00\x5a\x06\x64\x0e\x64\x07\x84\x01\x5a\x07\x65\x08\x66\x01\x64\x08\x84\x01\x5a\x09\x64\x09\x84\x00\x5a\x0a\x64\x0a\x84\x00\x5a\x0b\x64\x0b\x84\x00\x5a\x0c\x64\x0c\x53\x00", ._co_firsttraceable = 0, }; static @@ -63713,7 +63905,7 @@ codecs_toplevel_consts_26_consts_2 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 423, + .co_firstlineno = 426, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -63789,7 +63981,7 @@ codecs_toplevel_consts_26_consts_3 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 1, - .co_firstlineno = 448, + .co_firstlineno = 451, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -64217,7 +64409,7 @@ codecs_toplevel_consts_26_consts_6 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 6, - .co_firstlineno = 451, + .co_firstlineno = 454, .co_nlocalsplus = 11, .co_nlocals = 11, .co_nplaincellvars = 0, @@ -64583,7 +64775,7 @@ codecs_toplevel_consts_26_consts_9 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 5, - .co_firstlineno = 531, + .co_firstlineno = 534, .co_nlocalsplus = 9, .co_nlocals = 9, .co_nplaincellvars = 0, @@ -64795,7 +64987,7 @@ codecs_toplevel_consts_26_consts_10 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 606, + .co_firstlineno = 609, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -64942,7 +65134,7 @@ codecs_toplevel_consts_26_consts_11 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 621, + .co_firstlineno = 624, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -65063,7 +65255,7 @@ codecs_toplevel_consts_26_consts_13 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 634, + .co_firstlineno = 637, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -65251,7 +65443,7 @@ codecs_toplevel_consts_26_consts_14 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 642, + .co_firstlineno = 645, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -65310,7 +65502,7 @@ codecs_toplevel_consts_26_consts_15 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 1, - .co_firstlineno = 650, + .co_firstlineno = 653, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -65369,7 +65561,7 @@ codecs_toplevel_consts_26_consts_16 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 653, + .co_firstlineno = 656, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -65428,7 +65620,7 @@ codecs_toplevel_consts_26_consts_17 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 1, - .co_firstlineno = 660, + .co_firstlineno = 663, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -65487,7 +65679,7 @@ codecs_toplevel_consts_26_consts_18 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 663, + .co_firstlineno = 666, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -65506,13 +65698,72 @@ codecs_toplevel_consts_26_consts_18 = { }; static struct { + PyASCIIObject _ascii; + uint8_t _data[27]; + } +codecs_toplevel_consts_26_consts_19_qualname = { + ._ascii = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyUnicode_Type, + }, + .length = 26, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .ready = 1, + }, + }, + ._data = "StreamReader.__reduce_ex__", +}; +static + struct _PyCode_DEF(58) +codecs_toplevel_consts_26_consts_19 = { + .ob_base = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyCode_Type, + }, + .ob_size = 29, + }, + .co_consts = & codecs_toplevel_consts_24_consts_11_consts._object.ob_base.ob_base, + .co_names = & codecs_toplevel_consts_24_consts_11_names._object.ob_base.ob_base, + .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), + .co_flags = 3, + .co_warmup = QUICKENING_INITIAL_WARMUP_VALUE, + ._co_linearray_entry_size = 0, + .co_argcount = 2, + .co_posonlyargcount = 0, + .co_kwonlyargcount = 0, + .co_stacksize = 4, + .co_firstlineno = 669, + .co_nlocalsplus = 2, + .co_nlocals = 2, + .co_nplaincellvars = 0, + .co_ncellvars = 0, + .co_nfreevars = 0, + .co_localsplusnames = & codecs_toplevel_consts_24_consts_11_localsplusnames._object.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_7_consts_2_localspluskinds.ob_base.ob_base, + .co_filename = & codecs_toplevel_consts_12_consts_5_filename._ascii.ob_base, + .co_name = &_Py_ID(__reduce_ex__), + .co_qualname = & codecs_toplevel_consts_26_consts_19_qualname._ascii.ob_base, + .co_linetable = & codecs_toplevel_consts_24_consts_11_linetable.ob_base.ob_base, + ._co_code = NULL, + ._co_linearray = NULL, + .co_code_adaptive = "\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x7c\x00\x6a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x06\x00\x00\xa6\x01\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01", + ._co_firsttraceable = 0, +}; +static + struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD PyObject *ob_item[3]; }_object; } -codecs_toplevel_consts_26_consts_20 = { +codecs_toplevel_consts_26_consts_21 = { ._object = { .ob_base = { .ob_base = { @@ -65533,7 +65784,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[23]; + PyObject *ob_item[24]; }_object; } codecs_toplevel_consts_26_consts = { @@ -65543,7 +65794,7 @@ codecs_toplevel_consts_26_consts = { .ob_refcnt = 999999999, .ob_type = &PyTuple_Type, }, - .ob_size = 23, + .ob_size = 24, }, .ob_item = { & const_str_StreamReader._ascii.ob_base, @@ -65565,10 +65816,11 @@ codecs_toplevel_consts_26_consts = { & codecs_toplevel_consts_26_consts_16.ob_base.ob_base, & codecs_toplevel_consts_26_consts_17.ob_base.ob_base, & codecs_toplevel_consts_26_consts_18.ob_base.ob_base, + & codecs_toplevel_consts_26_consts_19.ob_base.ob_base, & codecs_toplevel_consts_14_consts_6._object.ob_base.ob_base, - & codecs_toplevel_consts_26_consts_20._object.ob_base.ob_base, + & codecs_toplevel_consts_26_consts_21._object.ob_base.ob_base, & importlib__bootstrap_external_toplevel_consts_69_consts_3_consts._object.ob_base.ob_base, - & codecs_toplevel_consts_24_consts_13._object.ob_base.ob_base, + & codecs_toplevel_consts_24_consts_14._object.ob_base.ob_base, }, }, }; @@ -65577,7 +65829,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[18]; + PyObject *ob_item[19]; }_object; } codecs_toplevel_consts_26_names = { @@ -65587,7 +65839,7 @@ codecs_toplevel_consts_26_names = { .ob_refcnt = 999999999, .ob_type = &PyTuple_Type, }, - .ob_size = 18, + .ob_size = 19, }, .ob_item = { &_Py_ID(__name__), @@ -65608,6 +65860,7 @@ codecs_toplevel_consts_26_names = { &_Py_ID(__getattr__), &_Py_ID(__enter__), &_Py_ID(__exit__), + &_Py_ID(__reduce_ex__), }, }, }; @@ -65615,7 +65868,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[256]; + char ob_sval[276]; } codecs_toplevel_consts_26_linetable = { .ob_base = { @@ -65623,20 +65876,20 @@ codecs_toplevel_consts_26_linetable = { .ob_refcnt = 999999999, .ob_type = &PyBytes_Type, }, - .ob_size = 255, + .ob_size = 275, }, .ob_shash = -1, - .ob_sval = "\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xe0\x15\x18\x80\x4e\xf0\x04\x17\x05\x1f\xf0\x00\x17\x05\x1f\xf0\x00\x17\x05\x1f\xf0\x00\x17\x05\x1f\xf0\x32\x01\x05\x22\xf0\x00\x01\x05\x22\xf0\x00\x01\x05\x22\xf0\x00\x01\x05\x22\xf0\x06\x4e\x01\x05\x16\xf0\x00\x4e\x01\x05\x16\xf0\x00\x4e\x01\x05\x16\xf0\x00\x4e\x01\x05\x16\xf0\x60\x02\x49\x01\x05\x14\xf0\x00\x49\x01\x05\x14\xf0\x00\x49\x01\x05\x14\xf0\x00\x49\x01\x05\x14\xf0\x56\x02\x0d\x05\x29\xf0\x00\x0d\x05\x29\xf0\x00\x0d\x05\x29\xf0\x00\x0d\x05\x29\xf0\x1e\x0b\x05\x1f\xf0\x00\x0b\x05\x1f\xf0\x00\x0b\x05\x1f\xf0\x1a\x06\x05\x15\xf0\x00\x06\x05\x15\xf0\x00\x06\x05\x15\xf0\x00\x06\x05\x15\xf0\x10\x06\x05\x1c\xf0\x00\x06\x05\x1c\xf0\x00\x06\x05\x1c\xf0\x10\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x08\x00\x1d\x24\xf0\x03\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x0e\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c", + .ob_sval = "\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xe0\x15\x18\x80\x4e\xf0\x04\x17\x05\x1f\xf0\x00\x17\x05\x1f\xf0\x00\x17\x05\x1f\xf0\x00\x17\x05\x1f\xf0\x32\x01\x05\x22\xf0\x00\x01\x05\x22\xf0\x00\x01\x05\x22\xf0\x00\x01\x05\x22\xf0\x06\x4e\x01\x05\x16\xf0\x00\x4e\x01\x05\x16\xf0\x00\x4e\x01\x05\x16\xf0\x00\x4e\x01\x05\x16\xf0\x60\x02\x49\x01\x05\x14\xf0\x00\x49\x01\x05\x14\xf0\x00\x49\x01\x05\x14\xf0\x00\x49\x01\x05\x14\xf0\x56\x02\x0d\x05\x29\xf0\x00\x0d\x05\x29\xf0\x00\x0d\x05\x29\xf0\x00\x0d\x05\x29\xf0\x1e\x0b\x05\x1f\xf0\x00\x0b\x05\x1f\xf0\x00\x0b\x05\x1f\xf0\x1a\x06\x05\x15\xf0\x00\x06\x05\x15\xf0\x00\x06\x05\x15\xf0\x00\x06\x05\x15\xf0\x10\x06\x05\x1c\xf0\x00\x06\x05\x1c\xf0\x00\x06\x05\x1c\xf0\x10\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x08\x00\x1d\x24\xf0\x03\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x0e\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x06\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01", }; static - struct _PyCode_DEF(106) + struct _PyCode_DEF(112) codecs_toplevel_consts_26 = { .ob_base = { .ob_base = { .ob_refcnt = 999999999, .ob_type = &PyCode_Type, }, - .ob_size = 53, + .ob_size = 56, }, .co_consts = & codecs_toplevel_consts_26_consts._object.ob_base.ob_base, .co_names = & codecs_toplevel_consts_26_names._object.ob_base.ob_base, @@ -65648,7 +65901,7 @@ codecs_toplevel_consts_26 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 419, + .co_firstlineno = 422, .co_nlocalsplus = 0, .co_nlocals = 0, .co_nplaincellvars = 0, @@ -65662,7 +65915,7 @@ codecs_toplevel_consts_26 = { .co_linetable = & codecs_toplevel_consts_26_linetable.ob_base.ob_base, ._co_code = NULL, ._co_linearray = NULL, - .co_code_adaptive = "\x97\x00\x65\x00\x5a\x01\x64\x00\x5a\x02\x65\x03\x5a\x04\x64\x13\x64\x02\x84\x01\x5a\x05\x64\x13\x64\x03\x84\x01\x5a\x06\x64\x14\x64\x06\x84\x01\x5a\x07\x64\x15\x64\x09\x84\x01\x5a\x08\x64\x15\x64\x0a\x84\x01\x5a\x09\x64\x0b\x84\x00\x5a\x0a\x64\x16\x64\x0d\x84\x01\x5a\x0b\x64\x0e\x84\x00\x5a\x0c\x64\x0f\x84\x00\x5a\x0d\x65\x0e\x66\x01\x64\x10\x84\x01\x5a\x0f\x64\x11\x84\x00\x5a\x10\x64\x12\x84\x00\x5a\x11\x64\x07\x53\x00", + .co_code_adaptive = "\x97\x00\x65\x00\x5a\x01\x64\x00\x5a\x02\x65\x03\x5a\x04\x64\x14\x64\x02\x84\x01\x5a\x05\x64\x14\x64\x03\x84\x01\x5a\x06\x64\x15\x64\x06\x84\x01\x5a\x07\x64\x16\x64\x09\x84\x01\x5a\x08\x64\x16\x64\x0a\x84\x01\x5a\x09\x64\x0b\x84\x00\x5a\x0a\x64\x17\x64\x0d\x84\x01\x5a\x0b\x64\x0e\x84\x00\x5a\x0c\x64\x0f\x84\x00\x5a\x0d\x65\x0e\x66\x01\x64\x10\x84\x01\x5a\x0f\x64\x11\x84\x00\x5a\x10\x64\x12\x84\x00\x5a\x11\x64\x13\x84\x00\x5a\x12\x64\x07\x53\x00", ._co_firsttraceable = 0, }; static @@ -65952,7 +66205,7 @@ codecs_toplevel_consts_28_consts_4 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 681, + .co_firstlineno = 687, .co_nlocalsplus = 5, .co_nlocals = 5, .co_nplaincellvars = 0, @@ -66074,7 +66327,7 @@ codecs_toplevel_consts_28_consts_6 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 699, + .co_firstlineno = 705, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -66173,7 +66426,7 @@ codecs_toplevel_consts_28_consts_8 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 703, + .co_firstlineno = 709, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -66295,7 +66548,7 @@ codecs_toplevel_consts_28_consts_9 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 707, + .co_firstlineno = 713, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -66394,7 +66647,7 @@ codecs_toplevel_consts_28_consts_10 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 711, + .co_firstlineno = 717, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -66453,7 +66706,7 @@ codecs_toplevel_consts_28_consts_11 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 1, - .co_firstlineno = 716, + .co_firstlineno = 722, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -66575,7 +66828,7 @@ codecs_toplevel_consts_28_consts_12 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 719, + .co_firstlineno = 725, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -66674,7 +66927,7 @@ codecs_toplevel_consts_28_consts_13 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 723, + .co_firstlineno = 729, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -66774,7 +67027,7 @@ codecs_toplevel_consts_28_consts_14 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 727, + .co_firstlineno = 733, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -66876,7 +67129,7 @@ codecs_toplevel_consts_28_consts_16 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 732, + .co_firstlineno = 738, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -66935,7 +67188,7 @@ codecs_toplevel_consts_28_consts_17 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 738, + .co_firstlineno = 744, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -66994,7 +67247,7 @@ codecs_toplevel_consts_28_consts_18 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 1, - .co_firstlineno = 747, + .co_firstlineno = 753, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -67053,7 +67306,7 @@ codecs_toplevel_consts_28_consts_19 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 750, + .co_firstlineno = 756, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -67072,13 +67325,72 @@ codecs_toplevel_consts_28_consts_19 = { }; static struct { + PyASCIIObject _ascii; + uint8_t _data[33]; + } +codecs_toplevel_consts_28_consts_20_qualname = { + ._ascii = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyUnicode_Type, + }, + .length = 32, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .ready = 1, + }, + }, + ._data = "StreamReaderWriter.__reduce_ex__", +}; +static + struct _PyCode_DEF(58) +codecs_toplevel_consts_28_consts_20 = { + .ob_base = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyCode_Type, + }, + .ob_size = 29, + }, + .co_consts = & codecs_toplevel_consts_24_consts_11_consts._object.ob_base.ob_base, + .co_names = & codecs_toplevel_consts_24_consts_11_names._object.ob_base.ob_base, + .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), + .co_flags = 3, + .co_warmup = QUICKENING_INITIAL_WARMUP_VALUE, + ._co_linearray_entry_size = 0, + .co_argcount = 2, + .co_posonlyargcount = 0, + .co_kwonlyargcount = 0, + .co_stacksize = 4, + .co_firstlineno = 759, + .co_nlocalsplus = 2, + .co_nlocals = 2, + .co_nplaincellvars = 0, + .co_ncellvars = 0, + .co_nfreevars = 0, + .co_localsplusnames = & codecs_toplevel_consts_24_consts_11_localsplusnames._object.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_7_consts_2_localspluskinds.ob_base.ob_base, + .co_filename = & codecs_toplevel_consts_12_consts_5_filename._ascii.ob_base, + .co_name = &_Py_ID(__reduce_ex__), + .co_qualname = & codecs_toplevel_consts_28_consts_20_qualname._ascii.ob_base, + .co_linetable = & codecs_toplevel_consts_24_consts_11_linetable.ob_base.ob_base, + ._co_code = NULL, + ._co_linearray = NULL, + .co_code_adaptive = "\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x7c\x00\x6a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x06\x00\x00\xa6\x01\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01", + ._co_firsttraceable = 0, +}; +static + struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD PyObject *ob_item[1]; }_object; } -codecs_toplevel_consts_28_consts_21 = { +codecs_toplevel_consts_28_consts_22 = { ._object = { .ob_base = { .ob_base = { @@ -67097,7 +67409,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[24]; + PyObject *ob_item[25]; }_object; } codecs_toplevel_consts_28_consts = { @@ -67107,7 +67419,7 @@ codecs_toplevel_consts_28_consts = { .ob_refcnt = 999999999, .ob_type = &PyTuple_Type, }, - .ob_size = 24, + .ob_size = 25, }, .ob_item = { & const_str_StreamReaderWriter._ascii.ob_base, @@ -67130,10 +67442,11 @@ codecs_toplevel_consts_28_consts = { & codecs_toplevel_consts_28_consts_17.ob_base.ob_base, & codecs_toplevel_consts_28_consts_18.ob_base.ob_base, & codecs_toplevel_consts_28_consts_19.ob_base.ob_base, + & codecs_toplevel_consts_28_consts_20.ob_base.ob_base, & codecs_toplevel_consts_14_consts_6._object.ob_base.ob_base, - & codecs_toplevel_consts_28_consts_21._object.ob_base.ob_base, + & codecs_toplevel_consts_28_consts_22._object.ob_base.ob_base, & importlib__bootstrap_toplevel_consts_1_consts._object.ob_base.ob_base, - & codecs_toplevel_consts_24_consts_13._object.ob_base.ob_base, + & codecs_toplevel_consts_24_consts_14._object.ob_base.ob_base, }, }, }; @@ -67142,7 +67455,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[19]; + PyObject *ob_item[20]; }_object; } codecs_toplevel_consts_28_names = { @@ -67152,7 +67465,7 @@ codecs_toplevel_consts_28_names = { .ob_refcnt = 999999999, .ob_type = &PyTuple_Type, }, - .ob_size = 19, + .ob_size = 20, }, .ob_item = { &_Py_ID(__name__), @@ -67174,6 +67487,7 @@ codecs_toplevel_consts_28_names = { &_Py_ID(__getattr__), &_Py_ID(__enter__), &_Py_ID(__exit__), + &_Py_ID(__reduce_ex__), }, }, }; @@ -67181,7 +67495,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[268]; + char ob_sval[288]; } codecs_toplevel_consts_28_linetable = { .ob_base = { @@ -67189,20 +67503,20 @@ codecs_toplevel_consts_28_linetable = { .ob_refcnt = 999999999, .ob_type = &PyBytes_Type, }, - .ob_size = 267, + .ob_size = 287, }, .ob_shash = -1, - .ob_sval = "\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xf0\x04\x07\x05\x08\xf0\x00\x07\x05\x08\xf0\x12\x00\x10\x19\x80\x48\xf0\x04\x10\x05\x1d\xf0\x00\x10\x05\x1d\xf0\x00\x10\x05\x1d\xf0\x00\x10\x05\x1d\xf0\x24\x02\x05\x26\xf0\x00\x02\x05\x26\xf0\x00\x02\x05\x26\xf0\x00\x02\x05\x26\xf0\x08\x02\x05\x2a\xf0\x00\x02\x05\x2a\xf0\x00\x02\x05\x2a\xf0\x00\x02\x05\x2a\xf0\x08\x02\x05\x2f\xf0\x00\x02\x05\x2f\xf0\x00\x02\x05\x2f\xf0\x00\x02\x05\x2f\xf0\x08\x03\x05\x21\xf0\x00\x03\x05\x21\xf0\x00\x03\x05\x21\xf0\x0a\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x02\x05\x27\xf0\x00\x02\x05\x27\xf0\x00\x02\x05\x27\xf0\x08\x02\x05\x2c\xf0\x00\x02\x05\x2c\xf0\x00\x02\x05\x2c\xf0\x08\x03\x05\x1c\xf0\x00\x03\x05\x1c\xf0\x00\x03\x05\x1c\xf0\x0a\x04\x05\x20\xf0\x00\x04\x05\x20\xf0\x00\x04\x05\x20\xf0\x00\x04\x05\x20\xf0\x0e\x00\x1d\x24\xf0\x03\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x12\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c", + .ob_sval = "\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xf0\x04\x07\x05\x08\xf0\x00\x07\x05\x08\xf0\x12\x00\x10\x19\x80\x48\xf0\x04\x10\x05\x1d\xf0\x00\x10\x05\x1d\xf0\x00\x10\x05\x1d\xf0\x00\x10\x05\x1d\xf0\x24\x02\x05\x26\xf0\x00\x02\x05\x26\xf0\x00\x02\x05\x26\xf0\x00\x02\x05\x26\xf0\x08\x02\x05\x2a\xf0\x00\x02\x05\x2a\xf0\x00\x02\x05\x2a\xf0\x00\x02\x05\x2a\xf0\x08\x02\x05\x2f\xf0\x00\x02\x05\x2f\xf0\x00\x02\x05\x2f\xf0\x00\x02\x05\x2f\xf0\x08\x03\x05\x21\xf0\x00\x03\x05\x21\xf0\x00\x03\x05\x21\xf0\x0a\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x02\x05\x27\xf0\x00\x02\x05\x27\xf0\x00\x02\x05\x27\xf0\x08\x02\x05\x2c\xf0\x00\x02\x05\x2c\xf0\x00\x02\x05\x2c\xf0\x08\x03\x05\x1c\xf0\x00\x03\x05\x1c\xf0\x00\x03\x05\x1c\xf0\x0a\x04\x05\x20\xf0\x00\x04\x05\x20\xf0\x00\x04\x05\x20\xf0\x00\x04\x05\x20\xf0\x0e\x00\x1d\x24\xf0\x03\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x12\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x06\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01", }; static - struct _PyCode_DEF(114) + struct _PyCode_DEF(120) codecs_toplevel_consts_28 = { .ob_base = { .ob_base = { .ob_refcnt = 999999999, .ob_type = &PyCode_Type, }, - .ob_size = 57, + .ob_size = 60, }, .co_consts = & codecs_toplevel_consts_28_consts._object.ob_base.ob_base, .co_names = & codecs_toplevel_consts_28_names._object.ob_base.ob_base, @@ -67214,7 +67528,7 @@ codecs_toplevel_consts_28 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 668, + .co_firstlineno = 674, .co_nlocalsplus = 0, .co_nlocals = 0, .co_nplaincellvars = 0, @@ -67228,7 +67542,7 @@ codecs_toplevel_consts_28 = { .co_linetable = & codecs_toplevel_consts_28_linetable.ob_base.ob_base, ._co_code = NULL, ._co_linearray = NULL, - .co_code_adaptive = "\x97\x00\x65\x00\x5a\x01\x64\x00\x5a\x02\x64\x01\x5a\x03\x64\x02\x5a\x04\x64\x14\x64\x04\x84\x01\x5a\x05\x64\x15\x64\x06\x84\x01\x5a\x06\x64\x16\x64\x08\x84\x01\x5a\x07\x64\x16\x64\x09\x84\x01\x5a\x08\x64\x0a\x84\x00\x5a\x09\x64\x0b\x84\x00\x5a\x0a\x64\x0c\x84\x00\x5a\x0b\x64\x0d\x84\x00\x5a\x0c\x64\x0e\x84\x00\x5a\x0d\x64\x17\x64\x10\x84\x01\x5a\x0e\x65\x0f\x66\x01\x64\x11\x84\x01\x5a\x10\x64\x12\x84\x00\x5a\x11\x64\x13\x84\x00\x5a\x12\x64\x07\x53\x00", + .co_code_adaptive = "\x97\x00\x65\x00\x5a\x01\x64\x00\x5a\x02\x64\x01\x5a\x03\x64\x02\x5a\x04\x64\x15\x64\x04\x84\x01\x5a\x05\x64\x16\x64\x06\x84\x01\x5a\x06\x64\x17\x64\x08\x84\x01\x5a\x07\x64\x17\x64\x09\x84\x01\x5a\x08\x64\x0a\x84\x00\x5a\x09\x64\x0b\x84\x00\x5a\x0a\x64\x0c\x84\x00\x5a\x0b\x64\x0d\x84\x00\x5a\x0c\x64\x0e\x84\x00\x5a\x0d\x64\x18\x64\x10\x84\x01\x5a\x0e\x65\x0f\x66\x01\x64\x11\x84\x01\x5a\x10\x64\x12\x84\x00\x5a\x11\x64\x13\x84\x00\x5a\x12\x64\x14\x84\x00\x5a\x13\x64\x07\x53\x00", ._co_firsttraceable = 0, }; static @@ -67412,7 +67726,7 @@ codecs_toplevel_consts_30_consts_4 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 775, + .co_firstlineno = 784, .co_nlocalsplus = 7, .co_nlocals = 7, .co_nplaincellvars = 0, @@ -67560,7 +67874,7 @@ codecs_toplevel_consts_30_consts_6 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 803, + .co_firstlineno = 812, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -67661,7 +67975,7 @@ codecs_toplevel_consts_30_consts_8 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 809, + .co_firstlineno = 818, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -67812,7 +68126,7 @@ codecs_toplevel_consts_30_consts_9 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 818, + .co_firstlineno = 827, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -67937,7 +68251,7 @@ codecs_toplevel_consts_30_consts_10 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 824, + .co_firstlineno = 833, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -67996,7 +68310,7 @@ codecs_toplevel_consts_30_consts_11 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 1, - .co_firstlineno = 831, + .co_firstlineno = 840, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -68143,7 +68457,7 @@ codecs_toplevel_consts_30_consts_12 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 834, + .co_firstlineno = 843, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -68270,7 +68584,7 @@ codecs_toplevel_consts_30_consts_13 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 839, + .co_firstlineno = 848, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -68329,7 +68643,7 @@ codecs_toplevel_consts_30_consts_14 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 845, + .co_firstlineno = 854, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -68429,7 +68743,7 @@ codecs_toplevel_consts_30_consts_16 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 850, + .co_firstlineno = 859, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -68488,7 +68802,7 @@ codecs_toplevel_consts_30_consts_17 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 856, + .co_firstlineno = 865, .co_nlocalsplus = 3, .co_nlocals = 3, .co_nplaincellvars = 0, @@ -68547,7 +68861,7 @@ codecs_toplevel_consts_30_consts_18 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 1, - .co_firstlineno = 863, + .co_firstlineno = 872, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -68606,7 +68920,7 @@ codecs_toplevel_consts_30_consts_19 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 866, + .co_firstlineno = 875, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -68625,10 +68939,69 @@ codecs_toplevel_consts_30_consts_19 = { }; static struct { + PyASCIIObject _ascii; + uint8_t _data[28]; + } +codecs_toplevel_consts_30_consts_20_qualname = { + ._ascii = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyUnicode_Type, + }, + .length = 27, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .ready = 1, + }, + }, + ._data = "StreamRecoder.__reduce_ex__", +}; +static + struct _PyCode_DEF(58) +codecs_toplevel_consts_30_consts_20 = { + .ob_base = { + .ob_base = { + .ob_refcnt = 999999999, + .ob_type = &PyCode_Type, + }, + .ob_size = 29, + }, + .co_consts = & codecs_toplevel_consts_24_consts_11_consts._object.ob_base.ob_base, + .co_names = & codecs_toplevel_consts_24_consts_11_names._object.ob_base.ob_base, + .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), + .co_flags = 3, + .co_warmup = QUICKENING_INITIAL_WARMUP_VALUE, + ._co_linearray_entry_size = 0, + .co_argcount = 2, + .co_posonlyargcount = 0, + .co_kwonlyargcount = 0, + .co_stacksize = 4, + .co_firstlineno = 878, + .co_nlocalsplus = 2, + .co_nlocals = 2, + .co_nplaincellvars = 0, + .co_ncellvars = 0, + .co_nfreevars = 0, + .co_localsplusnames = & codecs_toplevel_consts_24_consts_11_localsplusnames._object.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_7_consts_2_localspluskinds.ob_base.ob_base, + .co_filename = & codecs_toplevel_consts_12_consts_5_filename._ascii.ob_base, + .co_name = &_Py_ID(__reduce_ex__), + .co_qualname = & codecs_toplevel_consts_30_consts_20_qualname._ascii.ob_base, + .co_linetable = & codecs_toplevel_consts_24_consts_11_linetable.ob_base.ob_base, + ._co_code = NULL, + ._co_linearray = NULL, + .co_code_adaptive = "\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x7c\x00\x6a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x06\x00\x00\xa6\x01\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01", + ._co_firsttraceable = 0, +}; +static + struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[24]; + PyObject *ob_item[25]; }_object; } codecs_toplevel_consts_30_consts = { @@ -68638,7 +69011,7 @@ codecs_toplevel_consts_30_consts = { .ob_refcnt = 999999999, .ob_type = &PyTuple_Type, }, - .ob_size = 24, + .ob_size = 25, }, .ob_item = { & const_str_StreamRecoder._ascii.ob_base, @@ -68661,10 +69034,11 @@ codecs_toplevel_consts_30_consts = { & codecs_toplevel_consts_30_consts_17.ob_base.ob_base, & codecs_toplevel_consts_30_consts_18.ob_base.ob_base, & codecs_toplevel_consts_30_consts_19.ob_base.ob_base, + & codecs_toplevel_consts_30_consts_20.ob_base.ob_base, & codecs_toplevel_consts_14_consts_6._object.ob_base.ob_base, - & codecs_toplevel_consts_28_consts_21._object.ob_base.ob_base, + & codecs_toplevel_consts_28_consts_22._object.ob_base.ob_base, & importlib__bootstrap_toplevel_consts_1_consts._object.ob_base.ob_base, - & codecs_toplevel_consts_24_consts_13._object.ob_base.ob_base, + & codecs_toplevel_consts_24_consts_14._object.ob_base.ob_base, }, }, }; @@ -68717,7 +69091,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[20]; + PyObject *ob_item[21]; }_object; } codecs_toplevel_consts_30_names = { @@ -68727,7 +69101,7 @@ codecs_toplevel_consts_30_names = { .ob_refcnt = 999999999, .ob_type = &PyTuple_Type, }, - .ob_size = 20, + .ob_size = 21, }, .ob_item = { &_Py_ID(__name__), @@ -68750,6 +69124,7 @@ codecs_toplevel_consts_30_names = { &_Py_ID(__getattr__), &_Py_ID(__enter__), &_Py_ID(__exit__), + &_Py_ID(__reduce_ex__), }, }, }; @@ -68757,7 +69132,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[278]; + char ob_sval[298]; } codecs_toplevel_consts_30_linetable = { .ob_base = { @@ -68765,20 +69140,20 @@ codecs_toplevel_consts_30_linetable = { .ob_refcnt = 999999999, .ob_type = &PyBytes_Type, }, - .ob_size = 277, + .ob_size = 297, }, .ob_shash = -1, - .ob_sval = "\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xf0\x04\x0d\x05\x08\xf0\x00\x0d\x05\x08\xf0\x1e\x00\x15\x1e\x80\x4d\xd8\x14\x1d\x80\x4d\xf0\x06\x00\x19\x21\xf0\x03\x1a\x05\x1d\xf0\x00\x1a\x05\x1d\xf0\x00\x1a\x05\x1d\xf0\x00\x1a\x05\x1d\xf0\x38\x04\x05\x14\xf0\x00\x04\x05\x14\xf0\x00\x04\x05\x14\xf0\x00\x04\x05\x14\xf0\x0c\x07\x05\x14\xf0\x00\x07\x05\x14\xf0\x00\x07\x05\x14\xf0\x00\x07\x05\x14\xf0\x12\x04\x05\x2e\xf0\x00\x04\x05\x2e\xf0\x00\x04\x05\x2e\xf0\x00\x04\x05\x2e\xf0\x0c\x05\x05\x14\xf0\x00\x05\x05\x14\xf0\x00\x05\x05\x14\xf0\x0e\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x03\x05\x27\xf0\x00\x03\x05\x27\xf0\x00\x03\x05\x27\xf0\x0a\x04\x05\x27\xf0\x00\x04\x05\x27\xf0\x00\x04\x05\x27\xf0\x0c\x03\x05\x1c\xf0\x00\x03\x05\x1c\xf0\x00\x03\x05\x1c\xf0\x0a\x04\x05\x29\xf0\x00\x04\x05\x29\xf0\x00\x04\x05\x29\xf0\x00\x04\x05\x29\xf0\x0e\x00\x1d\x24\xf0\x03\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x0e\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c", + .ob_sval = "\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xf0\x04\x0d\x05\x08\xf0\x00\x0d\x05\x08\xf0\x1e\x00\x15\x1e\x80\x4d\xd8\x14\x1d\x80\x4d\xf0\x06\x00\x19\x21\xf0\x03\x1a\x05\x1d\xf0\x00\x1a\x05\x1d\xf0\x00\x1a\x05\x1d\xf0\x00\x1a\x05\x1d\xf0\x38\x04\x05\x14\xf0\x00\x04\x05\x14\xf0\x00\x04\x05\x14\xf0\x00\x04\x05\x14\xf0\x0c\x07\x05\x14\xf0\x00\x07\x05\x14\xf0\x00\x07\x05\x14\xf0\x00\x07\x05\x14\xf0\x12\x04\x05\x2e\xf0\x00\x04\x05\x2e\xf0\x00\x04\x05\x2e\xf0\x00\x04\x05\x2e\xf0\x0c\x05\x05\x14\xf0\x00\x05\x05\x14\xf0\x00\x05\x05\x14\xf0\x0e\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x03\x05\x27\xf0\x00\x03\x05\x27\xf0\x00\x03\x05\x27\xf0\x0a\x04\x05\x27\xf0\x00\x04\x05\x27\xf0\x00\x04\x05\x27\xf0\x0c\x03\x05\x1c\xf0\x00\x03\x05\x1c\xf0\x00\x03\x05\x1c\xf0\x0a\x04\x05\x29\xf0\x00\x04\x05\x29\xf0\x00\x04\x05\x29\xf0\x00\x04\x05\x29\xf0\x0e\x00\x1d\x24\xf0\x03\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x00\x05\x05\x2a\xf0\x0e\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x00\x01\x05\x14\xf0\x06\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x00\x01\x05\x1c\xf0\x06\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01\xf0\x00\x01\x05\x48\x01", }; static - struct _PyCode_DEF(120) + struct _PyCode_DEF(126) codecs_toplevel_consts_30 = { .ob_base = { .ob_base = { .ob_refcnt = 999999999, .ob_type = &PyCode_Type, }, - .ob_size = 60, + .ob_size = 63, }, .co_consts = & codecs_toplevel_consts_30_consts._object.ob_base.ob_base, .co_names = & codecs_toplevel_consts_30_names._object.ob_base.ob_base, @@ -68790,7 +69165,7 @@ codecs_toplevel_consts_30 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 755, + .co_firstlineno = 764, .co_nlocalsplus = 0, .co_nlocals = 0, .co_nplaincellvars = 0, @@ -68804,7 +69179,7 @@ codecs_toplevel_consts_30 = { .co_linetable = & codecs_toplevel_consts_30_linetable.ob_base.ob_base, ._co_code = NULL, ._co_linearray = NULL, - .co_code_adaptive = "\x97\x00\x65\x00\x5a\x01\x64\x00\x5a\x02\x64\x01\x5a\x03\x64\x02\x5a\x04\x64\x02\x5a\x05\x09\x00\x64\x14\x64\x04\x84\x01\x5a\x06\x64\x15\x64\x06\x84\x01\x5a\x07\x64\x16\x64\x08\x84\x01\x5a\x08\x64\x16\x64\x09\x84\x01\x5a\x09\x64\x0a\x84\x00\x5a\x0a\x64\x0b\x84\x00\x5a\x0b\x64\x0c\x84\x00\x5a\x0c\x64\x0d\x84\x00\x5a\x0d\x64\x0e\x84\x00\x5a\x0e\x64\x17\x64\x10\x84\x01\x5a\x0f\x65\x10\x66\x01\x64\x11\x84\x01\x5a\x11\x64\x12\x84\x00\x5a\x12\x64\x13\x84\x00\x5a\x13\x64\x07\x53\x00", + .co_code_adaptive = "\x97\x00\x65\x00\x5a\x01\x64\x00\x5a\x02\x64\x01\x5a\x03\x64\x02\x5a\x04\x64\x02\x5a\x05\x09\x00\x64\x15\x64\x04\x84\x01\x5a\x06\x64\x16\x64\x06\x84\x01\x5a\x07\x64\x17\x64\x08\x84\x01\x5a\x08\x64\x17\x64\x09\x84\x01\x5a\x09\x64\x0a\x84\x00\x5a\x0a\x64\x0b\x84\x00\x5a\x0b\x64\x0c\x84\x00\x5a\x0c\x64\x0d\x84\x00\x5a\x0d\x64\x0e\x84\x00\x5a\x0e\x64\x18\x64\x10\x84\x01\x5a\x0f\x65\x10\x66\x01\x64\x11\x84\x01\x5a\x11\x64\x12\x84\x00\x5a\x12\x64\x13\x84\x00\x5a\x13\x64\x14\x84\x00\x5a\x14\x64\x07\x53\x00", ._co_firsttraceable = 0, }; static @@ -69031,7 +69406,7 @@ codecs_toplevel_consts_35 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 6, - .co_firstlineno = 871, + .co_firstlineno = 883, .co_nlocalsplus = 8, .co_nlocals = 8, .co_nplaincellvars = 0, @@ -69252,7 +69627,7 @@ codecs_toplevel_consts_36 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 8, - .co_firstlineno = 920, + .co_firstlineno = 932, .co_nlocalsplus = 7, .co_nlocals = 7, .co_nplaincellvars = 0, @@ -69395,7 +69770,7 @@ codecs_toplevel_consts_37 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 958, + .co_firstlineno = 970, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -69499,7 +69874,7 @@ codecs_toplevel_consts_38 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 968, + .co_firstlineno = 980, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -69688,7 +70063,7 @@ codecs_toplevel_consts_39 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 978, + .co_firstlineno = 990, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -69838,7 +70213,7 @@ codecs_toplevel_consts_40 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 992, + .co_firstlineno = 1004, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -69959,7 +70334,7 @@ codecs_toplevel_consts_41 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 1006, + .co_firstlineno = 1018, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -70063,7 +70438,7 @@ codecs_toplevel_consts_42 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 3, - .co_firstlineno = 1016, + .co_firstlineno = 1028, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -70259,7 +70634,7 @@ codecs_toplevel_consts_43 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 5, - .co_firstlineno = 1026, + .co_firstlineno = 1038, .co_nlocalsplus = 7, .co_nlocals = 7, .co_nplaincellvars = 0, @@ -70411,7 +70786,7 @@ codecs_toplevel_consts_44 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 5, - .co_firstlineno = 1044, + .co_firstlineno = 1056, .co_nlocalsplus = 7, .co_nlocals = 7, .co_nplaincellvars = 0, @@ -70532,7 +70907,7 @@ codecs_toplevel_consts_45_consts_1 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 1072, + .co_firstlineno = 1084, .co_nlocalsplus = 2, .co_nlocals = 2, .co_nplaincellvars = 0, @@ -70675,7 +71050,7 @@ codecs_toplevel_consts_45 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 2, - .co_firstlineno = 1064, + .co_firstlineno = 1076, .co_nlocalsplus = 1, .co_nlocals = 1, .co_nplaincellvars = 0, @@ -70909,7 +71284,7 @@ codecs_toplevel_consts_46 = { .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_stacksize = 4, - .co_firstlineno = 1074, + .co_firstlineno = 1086, .co_nlocalsplus = 4, .co_nlocals = 4, .co_nplaincellvars = 0, @@ -71358,7 +71733,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[1189]; + char ob_sval[1221]; } codecs_toplevel_linetable = { .ob_base = { @@ -71366,10 +71741,10 @@ codecs_toplevel_linetable = { .ob_refcnt = 999999999, .ob_type = &PyBytes_Type, }, - .ob_size = 1188, + .ob_size = 1220, }, .ob_shash = -1, - .ob_sval = "\xf0\x03\x01\x01\x01\xf0\x02\x07\x01\x04\xf0\x00\x07\x01\x04\xf0\x12\x00\x01\x10\x80\x0f\x80\x0f\x80\x0f\xd8\x00\x0a\x80\x0a\x80\x0a\x80\x0a\xf0\x08\x03\x01\x45\x01\xd8\x04\x19\xd0\x04\x19\xd0\x04\x19\xd0\x04\x19\xd0\x04\x19\xf8\xd8\x07\x12\xf0\x00\x01\x01\x45\x01\xf0\x00\x01\x01\x45\x01\xf0\x00\x01\x01\x45\x01\xd8\x0a\x15\x88\x2b\xd0\x16\x3d\xc0\x03\xd1\x16\x43\xd1\x0a\x44\xd4\x0a\x44\xd0\x04\x44\xf8\xf8\xf8\xf8\xf0\x03\x01\x01\x45\x01\xf8\xf8\xf8\xf0\x06\x0d\x0b\x2d\xf0\x00\x0d\x0b\x2d\xf0\x00\x0d\x0b\x2d\x80\x07\xf0\x30\x00\x0c\x1b\x80\x08\xf0\x06\x00\x19\x24\xd0\x00\x23\x80\x06\x88\x1c\xf0\x06\x00\x19\x24\xd0\x00\x23\x80\x06\x88\x1c\xf0\x06\x00\x10\x23\x80\x0c\xf0\x06\x00\x10\x23\x80\x0c\xe0\x03\x06\x84\x3d\x90\x48\xd2\x03\x1c\xd0\x03\x1c\xf0\x06\x00\x17\x23\xd0\x04\x22\x80\x43\x88\x29\xf0\x06\x00\x11\x1d\x80\x49\x80\x49\xf0\x0a\x00\x17\x23\xd0\x04\x22\x80\x43\x88\x29\xf0\x06\x00\x11\x1d\x80\x49\xf0\x06\x00\x0c\x18\x80\x08\xd8\x0b\x17\x80\x08\xd8\x0b\x17\x80\x08\xd8\x0b\x17\x80\x08\xf0\x0a\x1d\x01\x26\xf0\x00\x1d\x01\x26\xf0\x00\x1d\x01\x26\xf0\x00\x1d\x01\x26\xf0\x00\x1d\x01\x26\x90\x05\xf1\x00\x1d\x01\x26\xf4\x00\x1d\x01\x26\xf0\x00\x1d\x01\x26\xf0\x3e\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf1\x00\x40\x01\x01\x22\xf4\x00\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf0\x44\x02\x26\x01\x0c\xf0\x00\x26\x01\x0c\xf0\x00\x26\x01\x0c\xf0\x00\x26\x01\x0c\xf0\x00\x26\x01\x0c\x98\x16\xf1\x00\x26\x01\x0c\xf4\x00\x26\x01\x0c\xf0\x00\x26\x01\x0c\xf0\x50\x01\x20\x01\x22\xf0\x00\x20\x01\x22\xf0\x00\x20\x01\x22\xf0\x00\x20\x01\x22\xf0\x00\x20\x01\x22\xd0\x21\x33\xf1\x00\x20\x01\x22\xf4\x00\x20\x01\x22\xf0\x00\x20\x01\x22\xf0\x44\x01\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\x98\x16\xf1\x00\x2f\x01\x0c\xf4\x00\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\xf0\x62\x01\x22\x01\x1f\xf0\x00\x22\x01\x1f\xf0\x00\x22\x01\x1f\xf0\x00\x22\x01\x1f\xf0\x00\x22\x01\x1f\xd0\x21\x33\xf1\x00\x22\x01\x1f\xf4\x00\x22\x01\x1f\xf0\x00\x22\x01\x1f\xf0\x56\x01\x45\x01\x01\x1c\xf0\x00\x45\x01\x01\x1c\xf0\x00\x45\x01\x01\x1c\xf0\x00\x45\x01\x01\x1c\xf0\x00\x45\x01\x01\x1c\x90\x35\xf1\x00\x45\x01\x01\x1c\xf4\x00\x45\x01\x01\x1c\xf0\x00\x45\x01\x01\x1c\xf0\x52\x02\x75\x03\x01\x1c\xf0\x00\x75\x03\x01\x1c\xf0\x00\x75\x03\x01\x1c\xf0\x00\x75\x03\x01\x1c\xf0\x00\x75\x03\x01\x1c\x90\x35\xf1\x00\x75\x03\x01\x1c\xf4\x00\x75\x03\x01\x1c\xf0\x00\x75\x03\x01\x1c\xf0\x72\x07\x53\x01\x01\x1c\xf0\x00\x53\x01\x01\x1c\xf0\x00\x53\x01\x01\x1c\xf0\x00\x53\x01\x01\x1c\xf0\x00\x53\x01\x01\x1c\xf1\x00\x53\x01\x01\x1c\xf4\x00\x53\x01\x01\x1c\xf0\x00\x53\x01\x01\x1c\xf0\x6e\x02\x70\x01\x01\x1c\xf0\x00\x70\x01\x01\x1c\xf0\x00\x70\x01\x01\x1c\xf0\x00\x70\x01\x01\x1c\xf0\x00\x70\x01\x01\x1c\xf1\x00\x70\x01\x01\x1c\xf4\x00\x70\x01\x01\x1c\xf0\x00\x70\x01\x01\x1c\xf0\x68\x03\x2f\x01\x0e\xf0\x00\x2f\x01\x0e\xf0\x00\x2f\x01\x0e\xf0\x00\x2f\x01\x0e\xf0\x62\x01\x22\x01\x0e\xf0\x00\x22\x01\x0e\xf0\x00\x22\x01\x0e\xf0\x00\x22\x01\x0e\xf0\x4c\x01\x08\x01\x23\xf0\x00\x08\x01\x23\xf0\x00\x08\x01\x23\xf0\x14\x08\x01\x23\xf0\x00\x08\x01\x23\xf0\x00\x08\x01\x23\xf0\x14\x0c\x01\x13\xf0\x00\x0c\x01\x13\xf0\x00\x0c\x01\x13\xf0\x1c\x0c\x01\x13\xf0\x00\x0c\x01\x13\xf0\x00\x0c\x01\x13\xf0\x1c\x08\x01\x29\xf0\x00\x08\x01\x29\xf0\x00\x08\x01\x29\xf0\x14\x08\x01\x29\xf0\x00\x08\x01\x29\xf0\x00\x08\x01\x29\xf0\x14\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x24\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x28\x08\x01\x1e\xf0\x00\x08\x01\x1e\xf0\x00\x08\x01\x1e\xf0\x14\x13\x01\x0d\xf0\x00\x13\x01\x0d\xf0\x00\x13\x01\x0d\xf0\x2e\x0e\x01\x1e\xd8\x14\x20\x90\x4c\xa0\x18\xd1\x14\x2a\xd4\x14\x2a\x80\x4d\xd8\x14\x20\x90\x4c\xa0\x18\xd1\x14\x2a\xd4\x14\x2a\x80\x4d\xd8\x15\x21\x90\x5c\xa0\x29\xd1\x15\x2c\xd4\x15\x2c\x80\x4e\xd8\x1f\x2b\x98\x7c\xd0\x2c\x3f\xd1\x1f\x40\xd4\x1f\x40\xd0\x04\x1c\xd8\x1e\x2a\x98\x6c\xd0\x2b\x3d\xd1\x1e\x3e\xd4\x1e\x3e\xd0\x04\x1b\xd8\x19\x25\x98\x1c\xa0\x6d\xd1\x19\x34\xd4\x19\x34\xd0\x04\x16\xd0\x04\x16\xf8\xd8\x07\x12\xf0\x00\x07\x01\x1e\xf0\x00\x07\x01\x1e\xf0\x00\x07\x01\x1e\xe0\x14\x18\x80\x4d\xd8\x14\x18\x80\x4d\xd8\x15\x19\x80\x4e\xd8\x1f\x23\xd0\x04\x1c\xd8\x1e\x22\xd0\x04\x1b\xd8\x19\x1d\xd0\x04\x16\xd0\x04\x16\xd0\x04\x16\xf0\x0f\x07\x01\x1e\xf8\xf8\xf8\xf0\x16\x00\x0a\x0b\x80\x06\xd8\x03\x09\xf0\x00\x01\x01\x15\xd8\x04\x14\xd0\x04\x14\xd0\x04\x14\xd0\x04\x14\xf0\x08\x00\x04\x0c\x88\x7a\xd2\x03\x19\xd0\x03\x19\xf0\x06\x00\x12\x1d\x90\x1b\x98\x53\x9c\x5a\xa8\x19\xb0\x47\xd1\x11\x3c\xd4\x11\x3c\x80\x43\x84\x4a\xf0\x06\x00\x11\x1c\x90\x0b\x98\x43\x9c\x49\xa0\x77\xb0\x09\xd1\x10\x3a\xd4\x10\x3a\x80\x43\x84\x49\x80\x49\x80\x49\xf0\x0d\x00\x04\x1a\xd0\x03\x19", + .ob_sval = "\xf0\x03\x01\x01\x01\xf0\x02\x07\x01\x04\xf0\x00\x07\x01\x04\xf0\x12\x00\x01\x10\x80\x0f\x80\x0f\x80\x0f\xd8\x00\x0a\x80\x0a\x80\x0a\x80\x0a\xf0\x08\x03\x01\x45\x01\xd8\x04\x19\xd0\x04\x19\xd0\x04\x19\xd0\x04\x19\xd0\x04\x19\xf8\xd8\x07\x12\xf0\x00\x01\x01\x45\x01\xf0\x00\x01\x01\x45\x01\xf0\x00\x01\x01\x45\x01\xd8\x0a\x15\x88\x2b\xd0\x16\x3d\xc0\x03\xd1\x16\x43\xd1\x0a\x44\xd4\x0a\x44\xd0\x04\x44\xf8\xf8\xf8\xf8\xf0\x03\x01\x01\x45\x01\xf8\xf8\xf8\xf0\x06\x0d\x0b\x2d\xf0\x00\x0d\x0b\x2d\xf0\x00\x0d\x0b\x2d\x80\x07\xf0\x30\x00\x0c\x1b\x80\x08\xf0\x06\x00\x19\x24\xd0\x00\x23\x80\x06\x88\x1c\xf0\x06\x00\x19\x24\xd0\x00\x23\x80\x06\x88\x1c\xf0\x06\x00\x10\x23\x80\x0c\xf0\x06\x00\x10\x23\x80\x0c\xe0\x03\x06\x84\x3d\x90\x48\xd2\x03\x1c\xd0\x03\x1c\xf0\x06\x00\x17\x23\xd0\x04\x22\x80\x43\x88\x29\xf0\x06\x00\x11\x1d\x80\x49\x80\x49\xf0\x0a\x00\x17\x23\xd0\x04\x22\x80\x43\x88\x29\xf0\x06\x00\x11\x1d\x80\x49\xf0\x06\x00\x0c\x18\x80\x08\xd8\x0b\x17\x80\x08\xd8\x0b\x17\x80\x08\xd8\x0b\x17\x80\x08\xf0\x0a\x1d\x01\x26\xf0\x00\x1d\x01\x26\xf0\x00\x1d\x01\x26\xf0\x00\x1d\x01\x26\xf0\x00\x1d\x01\x26\x90\x05\xf1\x00\x1d\x01\x26\xf4\x00\x1d\x01\x26\xf0\x00\x1d\x01\x26\xf0\x3e\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf1\x00\x40\x01\x01\x22\xf4\x00\x40\x01\x01\x22\xf0\x00\x40\x01\x01\x22\xf0\x44\x02\x26\x01\x0c\xf0\x00\x26\x01\x0c\xf0\x00\x26\x01\x0c\xf0\x00\x26\x01\x0c\xf0\x00\x26\x01\x0c\x98\x16\xf1\x00\x26\x01\x0c\xf4\x00\x26\x01\x0c\xf0\x00\x26\x01\x0c\xf0\x50\x01\x20\x01\x22\xf0\x00\x20\x01\x22\xf0\x00\x20\x01\x22\xf0\x00\x20\x01\x22\xf0\x00\x20\x01\x22\xd0\x21\x33\xf1\x00\x20\x01\x22\xf4\x00\x20\x01\x22\xf0\x00\x20\x01\x22\xf0\x44\x01\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\x98\x16\xf1\x00\x2f\x01\x0c\xf4\x00\x2f\x01\x0c\xf0\x00\x2f\x01\x0c\xf0\x62\x01\x22\x01\x1f\xf0\x00\x22\x01\x1f\xf0\x00\x22\x01\x1f\xf0\x00\x22\x01\x1f\xf0\x00\x22\x01\x1f\xd0\x21\x33\xf1\x00\x22\x01\x1f\xf4\x00\x22\x01\x1f\xf0\x00\x22\x01\x1f\xf0\x56\x01\x48\x01\x01\x48\x01\xf0\x00\x48\x01\x01\x48\x01\xf0\x00\x48\x01\x01\x48\x01\xf0\x00\x48\x01\x01\x48\x01\xf0\x00\x48\x01\x01\x48\x01\x90\x35\xf1\x00\x48\x01\x01\x48\x01\xf4\x00\x48\x01\x01\x48\x01\xf0\x00\x48\x01\x01\x48\x01\xf0\x58\x02\x78\x03\x01\x48\x01\xf0\x00\x78\x03\x01\x48\x01\xf0\x00\x78\x03\x01\x48\x01\xf0\x00\x78\x03\x01\x48\x01\xf0\x00\x78\x03\x01\x48\x01\x90\x35\xf1\x00\x78\x03\x01\x48\x01\xf4\x00\x78\x03\x01\x48\x01\xf0\x00\x78\x03\x01\x48\x01\xf0\x78\x07\x56\x01\x01\x48\x01\xf0\x00\x56\x01\x01\x48\x01\xf0\x00\x56\x01\x01\x48\x01\xf0\x00\x56\x01\x01\x48\x01\xf0\x00\x56\x01\x01\x48\x01\xf1\x00\x56\x01\x01\x48\x01\xf4\x00\x56\x01\x01\x48\x01\xf0\x00\x56\x01\x01\x48\x01\xf0\x74\x02\x73\x01\x01\x48\x01\xf0\x00\x73\x01\x01\x48\x01\xf0\x00\x73\x01\x01\x48\x01\xf0\x00\x73\x01\x01\x48\x01\xf0\x00\x73\x01\x01\x48\x01\xf1\x00\x73\x01\x01\x48\x01\xf4\x00\x73\x01\x01\x48\x01\xf0\x00\x73\x01\x01\x48\x01\xf0\x6e\x03\x2f\x01\x0e\xf0\x00\x2f\x01\x0e\xf0\x00\x2f\x01\x0e\xf0\x00\x2f\x01\x0e\xf0\x62\x01\x22\x01\x0e\xf0\x00\x22\x01\x0e\xf0\x00\x22\x01\x0e\xf0\x00\x22\x01\x0e\xf0\x4c\x01\x08\x01\x23\xf0\x00\x08\x01\x23\xf0\x00\x08\x01\x23\xf0\x14\x08\x01\x23\xf0\x00\x08\x01\x23\xf0\x00\x08\x01\x23\xf0\x14\x0c\x01\x13\xf0\x00\x0c\x01\x13\xf0\x00\x0c\x01\x13\xf0\x1c\x0c\x01\x13\xf0\x00\x0c\x01\x13\xf0\x00\x0c\x01\x13\xf0\x1c\x08\x01\x29\xf0\x00\x08\x01\x29\xf0\x00\x08\x01\x29\xf0\x14\x08\x01\x29\xf0\x00\x08\x01\x29\xf0\x00\x08\x01\x29\xf0\x14\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x24\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x00\x10\x01\x15\xf0\x28\x08\x01\x1e\xf0\x00\x08\x01\x1e\xf0\x00\x08\x01\x1e\xf0\x14\x13\x01\x0d\xf0\x00\x13\x01\x0d\xf0\x00\x13\x01\x0d\xf0\x2e\x0e\x01\x1e\xd8\x14\x20\x90\x4c\xa0\x18\xd1\x14\x2a\xd4\x14\x2a\x80\x4d\xd8\x14\x20\x90\x4c\xa0\x18\xd1\x14\x2a\xd4\x14\x2a\x80\x4d\xd8\x15\x21\x90\x5c\xa0\x29\xd1\x15\x2c\xd4\x15\x2c\x80\x4e\xd8\x1f\x2b\x98\x7c\xd0\x2c\x3f\xd1\x1f\x40\xd4\x1f\x40\xd0\x04\x1c\xd8\x1e\x2a\x98\x6c\xd0\x2b\x3d\xd1\x1e\x3e\xd4\x1e\x3e\xd0\x04\x1b\xd8\x19\x25\x98\x1c\xa0\x6d\xd1\x19\x34\xd4\x19\x34\xd0\x04\x16\xd0\x04\x16\xf8\xd8\x07\x12\xf0\x00\x07\x01\x1e\xf0\x00\x07\x01\x1e\xf0\x00\x07\x01\x1e\xe0\x14\x18\x80\x4d\xd8\x14\x18\x80\x4d\xd8\x15\x19\x80\x4e\xd8\x1f\x23\xd0\x04\x1c\xd8\x1e\x22\xd0\x04\x1b\xd8\x19\x1d\xd0\x04\x16\xd0\x04\x16\xd0\x04\x16\xf0\x0f\x07\x01\x1e\xf8\xf8\xf8\xf0\x16\x00\x0a\x0b\x80\x06\xd8\x03\x09\xf0\x00\x01\x01\x15\xd8\x04\x14\xd0\x04\x14\xd0\x04\x14\xd0\x04\x14\xf0\x08\x00\x04\x0c\x88\x7a\xd2\x03\x19\xd0\x03\x19\xf0\x06\x00\x12\x1d\x90\x1b\x98\x53\x9c\x5a\xa8\x19\xb0\x47\xd1\x11\x3c\xd4\x11\x3c\x80\x43\x84\x4a\xf0\x06\x00\x11\x1c\x90\x0b\x98\x43\x9c\x49\xa0\x77\xb0\x09\xd1\x10\x3a\xd4\x10\x3a\x80\x43\x84\x49\x80\x49\x80\x49\xf0\x0d\x00\x04\x1a\xd0\x03\x19", }; static struct { @@ -92094,7 +92469,7 @@ _collections_abc_toplevel_consts_70_consts = { & _collections_abc_toplevel_consts_70_consts_12.ob_base.ob_base, & _collections_abc_toplevel_consts_70_consts_13.ob_base.ob_base, Py_None, - & codecs_toplevel_consts_28_consts_21._object.ob_base.ob_base, + & codecs_toplevel_consts_28_consts_22._object.ob_base.ob_base, }, }, }; @@ -149349,6 +149724,10 @@ _Py_Deepfreeze_Fini(void) { _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_24_consts_10_qualname); _PyStaticUnicode_Dealloc((PyObject *)&const_str_tb); _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_24_consts_10); + _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_24_consts_11_consts_1); + _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_24_consts_11_qualname); + _PyStaticUnicode_Dealloc((PyObject *)&const_str_proto); + _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_24_consts_11); _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_24); _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_26_consts_2_consts_0); _PyStaticUnicode_Dealloc((PyObject *)&const_str_bytebuffer); @@ -149403,6 +149782,8 @@ _Py_Deepfreeze_Fini(void) { _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_26_consts_17); _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_26_consts_18_qualname); _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_26_consts_18); + _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_26_consts_19_qualname); + _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_26_consts_19); _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_26); _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_28_consts_1); _PyStaticUnicode_Dealloc((PyObject *)&const_str_unknown); @@ -149437,6 +149818,8 @@ _Py_Deepfreeze_Fini(void) { _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_28_consts_18); _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_28_consts_19_qualname); _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_28_consts_19); + _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_28_consts_20_qualname); + _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_28_consts_20); _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_28); _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_30_consts_1); _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_30_consts_4_consts_0); @@ -149468,6 +149851,8 @@ _Py_Deepfreeze_Fini(void) { _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_30_consts_18); _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_30_consts_19_qualname); _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_30_consts_19); + _PyStaticUnicode_Dealloc((PyObject *)&codecs_toplevel_consts_30_consts_20_qualname); + _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_30_consts_20); _PyStaticUnicode_Dealloc((PyObject *)&const_str_data_encoding); _PyStaticUnicode_Dealloc((PyObject *)&const_str_file_encoding); _PyStaticCode_Dealloc((PyCodeObject *)&codecs_toplevel_consts_30); @@ -152148,6 +152533,9 @@ _Py_Deepfreeze_Init(void) { if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_24_consts_10) < 0) { return -1; } + if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_24_consts_11) < 0) { + return -1; + } if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_24) < 0) { return -1; } @@ -152187,6 +152575,9 @@ _Py_Deepfreeze_Init(void) { if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_26_consts_18) < 0) { return -1; } + if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_26_consts_19) < 0) { + return -1; + } if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_26) < 0) { return -1; } @@ -152229,6 +152620,9 @@ _Py_Deepfreeze_Init(void) { if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_28_consts_19) < 0) { return -1; } + if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_28_consts_20) < 0) { + return -1; + } if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_28) < 0) { return -1; } @@ -152271,6 +152665,9 @@ _Py_Deepfreeze_Init(void) { if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_30_consts_19) < 0) { return -1; } + if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_30_consts_20) < 0) { + return -1; + } if (_PyStaticCode_InternStrings((PyCodeObject *)&codecs_toplevel_consts_30) < 0) { return -1; } diff --git a/contrib/tools/python3/src/Python/fileutils.c b/contrib/tools/python3/src/Python/fileutils.c index e1af39ddf0..79ce20bd72 100644 --- a/contrib/tools/python3/src/Python/fileutils.c +++ b/contrib/tools/python3/src/Python/fileutils.c @@ -1687,6 +1687,7 @@ _Py_fopen_obj(PyObject *path, const char *mode) Py_END_ALLOW_THREADS } while (f == NULL && errno == EINTR && !(async_err = PyErr_CheckSignals())); + int saved_errno = errno; #if !USE_UNICODE_WCHAR_CACHE PyMem_Free(wpath); #endif /* USE_UNICODE_WCHAR_CACHE */ @@ -1711,13 +1712,14 @@ _Py_fopen_obj(PyObject *path, const char *mode) Py_END_ALLOW_THREADS } while (f == NULL && errno == EINTR && !(async_err = PyErr_CheckSignals())); - + int saved_errno = errno; Py_DECREF(bytes); #endif if (async_err) return NULL; if (f == NULL) { + errno = saved_errno; PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path); return NULL; } diff --git a/contrib/tools/python3/src/Python/pystate.c b/contrib/tools/python3/src/Python/pystate.c index dfca3f5fd7..db2ce878af 100644 --- a/contrib/tools/python3/src/Python/pystate.c +++ b/contrib/tools/python3/src/Python/pystate.c @@ -882,6 +882,10 @@ _PyThreadState_Init(PyThreadState *tstate) void _PyThreadState_SetCurrent(PyThreadState *tstate) { + // gh-104690: If Python is being finalized and PyInterpreterState_Delete() + // was called, tstate becomes a dangling pointer. + assert(_PyThreadState_CheckConsistency(tstate)); + _PyGILState_NoteThreadState(&tstate->interp->runtime->gilstate, tstate); } @@ -2237,6 +2241,46 @@ _PyThreadState_PopFrame(PyThreadState *tstate, _PyInterpreterFrame * frame) } +#ifndef NDEBUG +// Check that a Python thread state valid. In practice, this function is used +// on a Python debug build to check if 'tstate' is a dangling pointer, if the +// PyThreadState memory has been freed. +// +// Usage: +// +// assert(_PyThreadState_CheckConsistency(tstate)); +int +_PyThreadState_CheckConsistency(PyThreadState *tstate) +{ + assert(!_PyMem_IsPtrFreed(tstate)); + assert(!_PyMem_IsPtrFreed(tstate->interp)); + return 1; +} +#endif + + +// Check if a Python thread must exit immediately, rather than taking the GIL +// if Py_Finalize() has been called. +// +// When this function is called by a daemon thread after Py_Finalize() has been +// called, the GIL does no longer exist. +// +// tstate can be a dangling pointer (point to freed memory): only tstate value +// is used, the pointer is not deferenced. +// +// tstate must be non-NULL. +int +_PyThreadState_MustExit(PyThreadState *tstate) +{ + /* bpo-39877: Access _PyRuntime directly rather than using + tstate->interp->runtime to support calls from Python daemon threads. + After Py_Finalize() has been called, tstate can be a dangling pointer: + point to PyThreadState freed memory. */ + PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(&_PyRuntime); + return (finalizing != NULL && finalizing != tstate); +} + + #ifdef __cplusplus } #endif diff --git a/contrib/tools/python3/src/Python/pythonrun.c b/contrib/tools/python3/src/Python/pythonrun.c index 03e366a8d0..91c2ad3a13 100644 --- a/contrib/tools/python3/src/Python/pythonrun.c +++ b/contrib/tools/python3/src/Python/pythonrun.c @@ -1130,21 +1130,16 @@ error: } static int -print_exception_notes(struct exception_print_context *ctx, PyObject *value) +print_exception_notes(struct exception_print_context *ctx, PyObject *notes) { PyObject *f = ctx->file; - if (!PyExceptionInstance_Check(value)) { + if (notes == NULL) { return 0; } - PyObject *notes; - int res = _PyObject_LookupAttr(value, &_Py_ID(__notes__), ¬es); - if (res <= 0) { - return res; - } if (!PySequence_Check(notes)) { - res = 0; + int res = 0; if (write_indented_margin(ctx, f) < 0) { res = -1; } @@ -1157,7 +1152,6 @@ print_exception_notes(struct exception_print_context *ctx, PyObject *value) res = PyFile_WriteObject(s, f, Py_PRINT_RAW); Py_DECREF(s); } - Py_DECREF(notes); return res; } Py_ssize_t num_notes = PySequence_Length(notes); @@ -1199,17 +1193,16 @@ print_exception_notes(struct exception_print_context *ctx, PyObject *value) } } - Py_DECREF(notes); return 0; error: Py_XDECREF(lines); - Py_DECREF(notes); return -1; } static int print_exception(struct exception_print_context *ctx, PyObject *value) { + PyObject *notes = NULL; PyObject *f = ctx->file; if (!PyExceptionInstance_Check(value)) { @@ -1223,8 +1216,11 @@ print_exception(struct exception_print_context *ctx, PyObject *value) goto error; } - /* grab the type now because value can change below */ + /* grab the type and notes now because value can change below */ PyObject *type = (PyObject *) Py_TYPE(value); + if (_PyObject_LookupAttr(value, &_Py_ID(__notes__), ¬es) < 0) { + goto error; + } if (print_exception_file_and_line(ctx, &value) < 0) { goto error; @@ -1238,14 +1234,16 @@ print_exception(struct exception_print_context *ctx, PyObject *value) if (PyFile_WriteString("\n", f) < 0) { goto error; } - if (print_exception_notes(ctx, value) < 0) { + if (print_exception_notes(ctx, notes) < 0) { goto error; } + Py_XDECREF(notes); Py_DECREF(value); assert(!PyErr_Occurred()); return 0; error: + Py_XDECREF(notes); Py_DECREF(value); return -1; } diff --git a/contrib/tools/python3/src/Python/symtable.c b/contrib/tools/python3/src/Python/symtable.c index 0b259b08b6..37e5c69740 100644 --- a/contrib/tools/python3/src/Python/symtable.c +++ b/contrib/tools/python3/src/Python/symtable.c @@ -128,9 +128,8 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, static PyObject * ste_repr(PySTEntryObject *ste) { - return PyUnicode_FromFormat("<symtable entry %U(%ld), line %d>", - ste->ste_name, - PyLong_AS_LONG(ste->ste_id), ste->ste_lineno); + return PyUnicode_FromFormat("<symtable entry %U(%R), line %d>", + ste->ste_name, ste->ste_id, ste->ste_lineno); } static void @@ -502,6 +501,7 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, PyObject *bound, PyObject *local, PyObject *free, PyObject *global) { + int contains; if (flags & DEF_GLOBAL) { if (flags & DEF_NONLOCAL) { PyErr_Format(PyExc_SyntaxError, @@ -522,7 +522,11 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, "nonlocal declaration not allowed at module level"); return error_at_directive(ste, name); } - if (!PySet_Contains(bound, name)) { + contains = PySet_Contains(bound, name); + if (contains < 0) { + return 0; + } + if (!contains) { PyErr_Format(PyExc_SyntaxError, "no binding for nonlocal '%U' found", name); @@ -546,17 +550,29 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, Note that having a non-NULL bound implies that the block is nested. */ - if (bound && PySet_Contains(bound, name)) { - SET_SCOPE(scopes, name, FREE); - ste->ste_free = 1; - return PySet_Add(free, name) >= 0; + if (bound) { + contains = PySet_Contains(bound, name); + if (contains < 0) { + return 0; + } + if (contains) { + SET_SCOPE(scopes, name, FREE); + ste->ste_free = 1; + return PySet_Add(free, name) >= 0; + } } /* If a parent has a global statement, then call it global explicit? It could also be global implicit. */ - if (global && PySet_Contains(global, name)) { - SET_SCOPE(scopes, name, GLOBAL_IMPLICIT); - return 1; + if (global) { + contains = PySet_Contains(global, name); + if (contains < 0) { + return 0; + } + if (contains) { + SET_SCOPE(scopes, name, GLOBAL_IMPLICIT); + return 1; + } } if (ste->ste_nested) ste->ste_free = 1; @@ -590,8 +606,13 @@ analyze_cells(PyObject *scopes, PyObject *free) scope = PyLong_AS_LONG(v); if (scope != LOCAL) continue; - if (!PySet_Contains(free, name)) + int contains = PySet_Contains(free, name); + if (contains < 0) { + goto error; + } + if (!contains) { continue; + } /* Replace LOCAL with CELL for this name, and remove from free. It is safe to replace the value of name in the dict, because it will not cause a resize. @@ -691,9 +712,15 @@ update_symbols(PyObject *symbols, PyObject *scopes, goto error; } /* Handle global symbol */ - if (bound && !PySet_Contains(bound, name)) { - Py_DECREF(name); - continue; /* it's a global */ + if (bound) { + int contains = PySet_Contains(bound, name); + if (contains < 0) { + goto error; + } + if (!contains) { + Py_DECREF(name); + continue; /* it's a global */ + } } /* Propagate new free symbol up the lexical stack */ if (PyDict_SetItem(symbols, name, v_free) < 0) { diff --git a/contrib/tools/python3/src/Python/sysmodule.c b/contrib/tools/python3/src/Python/sysmodule.c index 5da1381bbc..25fcd4aecf 100644 --- a/contrib/tools/python3/src/Python/sysmodule.c +++ b/contrib/tools/python3/src/Python/sysmodule.c @@ -3113,7 +3113,9 @@ _PySys_UpdateConfig(PyThreadState *tstate) if (config->pycache_prefix != NULL) { SET_SYS_FROM_WSTR("pycache_prefix", config->pycache_prefix); } else { - PyDict_SetItemString(sysdict, "pycache_prefix", Py_None); + if (PyDict_SetItemString(sysdict, "pycache_prefix", Py_None) < 0) { + return -1; + } } COPY_LIST("argv", config->argv); @@ -3127,7 +3129,9 @@ _PySys_UpdateConfig(PyThreadState *tstate) SET_SYS_FROM_WSTR("_stdlib_dir", stdlibdir); } else { - PyDict_SetItemString(sysdict, "_stdlib_dir", Py_None); + if (PyDict_SetItemString(sysdict, "_stdlib_dir", Py_None) < 0) { + return -1; + } } #undef SET_SYS_FROM_WSTR @@ -3137,6 +3141,9 @@ _PySys_UpdateConfig(PyThreadState *tstate) // sys.flags PyObject *flags = _PySys_GetObject(interp, "flags"); // borrowed ref if (flags == NULL) { + if (!_PyErr_Occurred(tstate)) { + _PyErr_SetString(tstate, PyExc_RuntimeError, "lost sys.flags"); + } return -1; } if (set_flags_from_config(interp, flags) < 0) { diff --git a/contrib/tools/python3/src/Python/traceback.c b/contrib/tools/python3/src/Python/traceback.c index 7f47349a27..c4f5ec877b 100644 --- a/contrib/tools/python3/src/Python/traceback.c +++ b/contrib/tools/python3/src/Python/traceback.c @@ -12,6 +12,7 @@ #include "pycore_parser.h" // _PyParser_ASTFromString #include "pycore_pyarena.h" // _PyArena_Free() #include "pycore_pyerrors.h" // _PyErr_Fetch() +#include "pycore_pymem.h" // _PyMem_IsPtrFreed() #include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_traceback.h" // EXCEPTION_TB_HEADER @@ -621,6 +622,11 @@ extract_anchors_from_expr(const char *segment_str, expr_ty expr, Py_ssize_t *lef ++*right_anchor; } + // Keep going if the current char is not ')' + if (i+1 < right->col_offset && (segment_str[i] == ')')) { + continue; + } + // Set the error characters *primary_error_char = "~"; *secondary_error_char = "^"; @@ -631,6 +637,18 @@ extract_anchors_from_expr(const char *segment_str, expr_ty expr, Py_ssize_t *lef case Subscript_kind: { *left_anchor = expr->v.Subscript.value->end_col_offset; *right_anchor = expr->v.Subscript.slice->end_col_offset + 1; + Py_ssize_t str_len = strlen(segment_str); + + // Move right_anchor and left_anchor forward to the first non-whitespace character that is not ']' and '[' + while (*left_anchor < str_len && (IS_WHITESPACE(segment_str[*left_anchor]) || segment_str[*left_anchor] != '[')) { + ++*left_anchor; + } + while (*right_anchor < str_len && (IS_WHITESPACE(segment_str[*right_anchor]) || segment_str[*right_anchor] != ']')) { + ++*right_anchor; + } + if (*right_anchor < str_len){ + *right_anchor += 1; + } // Set the error characters *primary_error_char = "~"; @@ -1217,23 +1235,45 @@ dump_frame(int fd, _PyInterpreterFrame *frame) PUTS(fd, "\n"); } +static int +tstate_is_freed(PyThreadState *tstate) +{ + if (_PyMem_IsPtrFreed(tstate)) { + return 1; + } + if (_PyMem_IsPtrFreed(tstate->interp)) { + return 1; + } + return 0; +} + + +static int +interp_is_freed(PyInterpreterState *interp) +{ + return _PyMem_IsPtrFreed(interp); +} + + static void dump_traceback(int fd, PyThreadState *tstate, int write_header) { - _PyInterpreterFrame *frame; - unsigned int depth; - if (write_header) { PUTS(fd, "Stack (most recent call first):\n"); } - frame = tstate->cframe->current_frame; + if (tstate_is_freed(tstate)) { + PUTS(fd, " <tstate is freed>\n"); + return; + } + + _PyInterpreterFrame *frame = tstate->cframe->current_frame; if (frame == NULL) { PUTS(fd, " <no Python frame>\n"); return; } - depth = 0; + unsigned int depth = 0; while (1) { if (MAX_FRAME_DEPTH <= depth) { PUTS(fd, " ...\n"); @@ -1288,9 +1328,6 @@ const char* _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, PyThreadState *current_tstate) { - PyThreadState *tstate; - unsigned int nthreads; - if (current_tstate == NULL) { /* _Py_DumpTracebackThreads() is called from signal handlers by faulthandler. @@ -1306,6 +1343,10 @@ _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, current_tstate = PyGILState_GetThisThreadState(); } + if (current_tstate != NULL && tstate_is_freed(current_tstate)) { + return "tstate is freed"; + } + if (interp == NULL) { if (current_tstate == NULL) { interp = _PyGILState_GetInterpreterStateUnsafe(); @@ -1320,14 +1361,18 @@ _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, } assert(interp != NULL); + if (interp_is_freed(interp)) { + return "interp is freed"; + } + /* Get the current interpreter from the current thread */ - tstate = PyInterpreterState_ThreadHead(interp); + PyThreadState *tstate = PyInterpreterState_ThreadHead(interp); if (tstate == NULL) return "unable to get the thread head state"; /* Dump the traceback of each thread */ tstate = PyInterpreterState_ThreadHead(interp); - nthreads = 0; + unsigned int nthreads = 0; _Py_BEGIN_SUPPRESS_IPH do { |