summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tools/python3')
-rw-r--r--contrib/tools/python3/.yandex_meta/devtools.copyrights.report4
-rw-r--r--contrib/tools/python3/.yandex_meta/devtools.licenses.report4
-rw-r--r--contrib/tools/python3/.yandex_meta/override.nix4
-rw-r--r--contrib/tools/python3/Include/dynamic_annotations.h3
-rw-r--r--contrib/tools/python3/Include/internal/pycore_pyhash.h8
-rw-r--r--contrib/tools/python3/Include/patchlevel.h4
-rw-r--r--contrib/tools/python3/Include/pyexpat.h8
-rw-r--r--contrib/tools/python3/Lib/_collections_abc.py29
-rw-r--r--contrib/tools/python3/Lib/_pydecimal.py107
-rw-r--r--contrib/tools/python3/Lib/_pyio.py124
-rw-r--r--contrib/tools/python3/Lib/argparse.py2
-rw-r--r--contrib/tools/python3/Lib/asyncio/__main__.py12
-rw-r--r--contrib/tools/python3/Lib/asyncio/base_events.py37
-rw-r--r--contrib/tools/python3/Lib/asyncio/events.py21
-rw-r--r--contrib/tools/python3/Lib/asyncio/locks.py18
-rw-r--r--contrib/tools/python3/Lib/asyncio/proactor_events.py3
-rw-r--r--contrib/tools/python3/Lib/asyncio/queues.py36
-rw-r--r--contrib/tools/python3/Lib/asyncio/runners.py3
-rw-r--r--contrib/tools/python3/Lib/asyncio/selector_events.py31
-rw-r--r--contrib/tools/python3/Lib/asyncio/streams.py14
-rw-r--r--contrib/tools/python3/Lib/asyncio/tasks.py57
-rw-r--r--contrib/tools/python3/Lib/asyncio/threads.py3
-rw-r--r--contrib/tools/python3/Lib/asyncio/timeouts.py3
-rw-r--r--contrib/tools/python3/Lib/asyncio/unix_events.py21
-rw-r--r--contrib/tools/python3/Lib/asyncio/windows_events.py3
-rw-r--r--contrib/tools/python3/Lib/asyncio/windows_utils.py3
-rwxr-xr-xcontrib/tools/python3/Lib/base64.py37
-rw-r--r--contrib/tools/python3/Lib/concurrent/futures/_base.py106
-rw-r--r--contrib/tools/python3/Lib/concurrent/futures/process.py43
-rw-r--r--contrib/tools/python3/Lib/configparser.py17
-rw-r--r--contrib/tools/python3/Lib/curses/textpad.py12
-rw-r--r--contrib/tools/python3/Lib/dataclasses.py70
-rw-r--r--contrib/tools/python3/Lib/email/_header_value_parser.py25
-rw-r--r--contrib/tools/python3/Lib/email/_parseaddr.py2
-rw-r--r--contrib/tools/python3/Lib/email/charset.py2
-rw-r--r--contrib/tools/python3/Lib/email/generator.py2
-rw-r--r--contrib/tools/python3/Lib/email/quoprimime.py2
-rw-r--r--contrib/tools/python3/Lib/encodings/aliases.py8
-rw-r--r--contrib/tools/python3/Lib/ensurepip/__init__.py2
-rw-r--r--contrib/tools/python3/Lib/enum.py25
-rw-r--r--contrib/tools/python3/Lib/ftplib.py11
-rw-r--r--contrib/tools/python3/Lib/functools.py12
-rw-r--r--contrib/tools/python3/Lib/glob.py34
-rw-r--r--contrib/tools/python3/Lib/gzip.py60
-rw-r--r--contrib/tools/python3/Lib/http/client.py11
-rw-r--r--contrib/tools/python3/Lib/http/cookies.py8
-rw-r--r--contrib/tools/python3/Lib/imaplib.py2
-rw-r--r--contrib/tools/python3/Lib/inspect.py2
-rw-r--r--contrib/tools/python3/Lib/json/__init__.py8
-rw-r--r--contrib/tools/python3/Lib/json/tool.py3
-rw-r--r--contrib/tools/python3/Lib/locale.py477
-rw-r--r--contrib/tools/python3/Lib/multiprocessing/connection.py6
-rw-r--r--contrib/tools/python3/Lib/multiprocessing/popen_fork.py12
-rw-r--r--contrib/tools/python3/Lib/multiprocessing/resource_tracker.py89
-rw-r--r--contrib/tools/python3/Lib/ntpath.py16
-rw-r--r--contrib/tools/python3/Lib/pickle.py12
-rw-r--r--contrib/tools/python3/Lib/pydoc_data/module_docs.py2
-rw-r--r--contrib/tools/python3/Lib/pydoc_data/topics.py256
-rw-r--r--contrib/tools/python3/Lib/rlcompleter.py17
-rw-r--r--contrib/tools/python3/Lib/runpy.py25
-rw-r--r--contrib/tools/python3/Lib/shutil.py40
-rwxr-xr-xcontrib/tools/python3/Lib/smtplib.py2
-rw-r--r--contrib/tools/python3/Lib/socket.py28
-rwxr-xr-xcontrib/tools/python3/Lib/tarfile.py51
-rwxr-xr-xcontrib/tools/python3/Lib/timeit.py2
-rw-r--r--contrib/tools/python3/Lib/tomllib/_parser.py14
-rw-r--r--contrib/tools/python3/Lib/traceback.py19
-rw-r--r--contrib/tools/python3/Lib/types.py21
-rw-r--r--contrib/tools/python3/Lib/typing.py225
-rw-r--r--contrib/tools/python3/Lib/unittest/mock.py4
-rw-r--r--contrib/tools/python3/Lib/urllib/robotparser.py207
-rw-r--r--contrib/tools/python3/Lib/venv/scripts/common/activate4
-rwxr-xr-xcontrib/tools/python3/Lib/webbrowser.py5
-rw-r--r--contrib/tools/python3/Lib/xml/etree/ElementTree.py96
-rw-r--r--contrib/tools/python3/Lib/xmlrpc/client.py2
-rw-r--r--contrib/tools/python3/Lib/ya.make4
-rw-r--r--contrib/tools/python3/Lib/zipfile/__init__.py68
-rw-r--r--contrib/tools/python3/Modules/_abc.c8
-rw-r--r--contrib/tools/python3/Modules/_asynciomodule.c31
-rw-r--r--contrib/tools/python3/Modules/_bisectmodule.c12
-rw-r--r--contrib/tools/python3/Modules/_bz2module.c42
-rw-r--r--contrib/tools/python3/Modules/_codecsmodule.c42
-rw-r--r--contrib/tools/python3/Modules/_collectionsmodule.c10
-rw-r--r--contrib/tools/python3/Modules/_csv.c6
-rw-r--r--contrib/tools/python3/Modules/_ctypes/_ctypes.c2
-rw-r--r--contrib/tools/python3/Modules/_datetimemodule.c6
-rw-r--r--contrib/tools/python3/Modules/_elementtree.c57
-rw-r--r--contrib/tools/python3/Modules/_functoolsmodule.c3
-rw-r--r--contrib/tools/python3/Modules/_hashopenssl.c12
-rw-r--r--contrib/tools/python3/Modules/_interpchannelsmodule.c4
-rw-r--r--contrib/tools/python3/Modules/_interpqueuesmodule.c1
-rw-r--r--contrib/tools/python3/Modules/_io/_iomodule.c88
-rw-r--r--contrib/tools/python3/Modules/_io/bytesio.c12
-rw-r--r--contrib/tools/python3/Modules/_io/clinic/_iomodule.c.h86
-rw-r--r--contrib/tools/python3/Modules/_io/clinic/bytesio.c.h10
-rw-r--r--contrib/tools/python3/Modules/_io/clinic/fileio.c.h53
-rw-r--r--contrib/tools/python3/Modules/_io/clinic/iobase.c.h16
-rw-r--r--contrib/tools/python3/Modules/_io/clinic/stringio.c.h5
-rw-r--r--contrib/tools/python3/Modules/_io/clinic/textio.c.h15
-rw-r--r--contrib/tools/python3/Modules/_io/clinic/winconsoleio.c.h8
-rw-r--r--contrib/tools/python3/Modules/_io/fileio.c63
-rw-r--r--contrib/tools/python3/Modules/_io/iobase.c18
-rw-r--r--contrib/tools/python3/Modules/_io/stringio.c5
-rw-r--r--contrib/tools/python3/Modules/_io/textio.c20
-rw-r--r--contrib/tools/python3/Modules/_io/winconsoleio.c11
-rw-r--r--contrib/tools/python3/Modules/_json.c32
-rw-r--r--contrib/tools/python3/Modules/_lzmamodule.c24
-rw-r--r--contrib/tools/python3/Modules/_multiprocessing/clinic/posixshmem.c.h8
-rw-r--r--contrib/tools/python3/Modules/_multiprocessing/posixshmem.c8
-rw-r--r--contrib/tools/python3/Modules/_opcode.c3
-rw-r--r--contrib/tools/python3/Modules/_posixsubprocess.c16
-rw-r--r--contrib/tools/python3/Modules/_queuemodule.c20
-rw-r--r--contrib/tools/python3/Modules/_sqlite/blob.c39
-rw-r--r--contrib/tools/python3/Modules/_sqlite/clinic/blob.c.h19
-rw-r--r--contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h41
-rw-r--r--contrib/tools/python3/Modules/_sqlite/connection.c96
-rw-r--r--contrib/tools/python3/Modules/_sqlite/ya.make4
-rw-r--r--contrib/tools/python3/Modules/_sre/sre.c4
-rw-r--r--contrib/tools/python3/Modules/_ssl.c79
-rw-r--r--contrib/tools/python3/Modules/_struct.c25
-rw-r--r--contrib/tools/python3/Modules/_testlimitedcapi/clinic/long.c.h6
-rw-r--r--contrib/tools/python3/Modules/_testlimitedcapi/long.c6
-rw-r--r--contrib/tools/python3/Modules/_testlimitedcapi/parts.h1
-rw-r--r--contrib/tools/python3/Modules/_testlimitedcapi/weakref.c78
-rw-r--r--contrib/tools/python3/Modules/_winapi.c5
-rw-r--r--contrib/tools/python3/Modules/arraymodule.c42
-rw-r--r--contrib/tools/python3/Modules/binascii.c8
-rw-r--r--contrib/tools/python3/Modules/cjkcodecs/clinic/multibytecodec.c.h18
-rw-r--r--contrib/tools/python3/Modules/cjkcodecs/multibytecodec.c20
-rw-r--r--contrib/tools/python3/Modules/clinic/_abc.c.h8
-rw-r--r--contrib/tools/python3/Modules/clinic/_asynciomodule.c.h19
-rw-r--r--contrib/tools/python3/Modules/clinic/_bisectmodule.c.h10
-rw-r--r--contrib/tools/python3/Modules/clinic/_bz2module.c.h23
-rw-r--r--contrib/tools/python3/Modules/clinic/_codecsmodule.c.h34
-rw-r--r--contrib/tools/python3/Modules/clinic/_curses_panel.c.h8
-rw-r--r--contrib/tools/python3/Modules/clinic/_cursesmodule.c.h282
-rw-r--r--contrib/tools/python3/Modules/clinic/_datetimemodule.c.h6
-rw-r--r--contrib/tools/python3/Modules/clinic/_dbmmodule.c.h5
-rw-r--r--contrib/tools/python3/Modules/clinic/_gdbmmodule.c.h18
-rw-r--r--contrib/tools/python3/Modules/clinic/_hashopenssl.c.h10
-rw-r--r--contrib/tools/python3/Modules/clinic/_lzmamodule.c.h23
-rw-r--r--contrib/tools/python3/Modules/clinic/_posixsubprocess.c.h16
-rw-r--r--contrib/tools/python3/Modules/clinic/_queuemodule.c.h16
-rw-r--r--contrib/tools/python3/Modules/clinic/_ssl.c.h49
-rw-r--r--contrib/tools/python3/Modules/clinic/_testmultiphase.c.h6
-rw-r--r--contrib/tools/python3/Modules/clinic/_tkinter.c.h5
-rw-r--r--contrib/tools/python3/Modules/clinic/arraymodule.c.h23
-rw-r--r--contrib/tools/python3/Modules/clinic/cmathmodule.c.h14
-rw-r--r--contrib/tools/python3/Modules/clinic/gcmodule.c.h13
-rw-r--r--contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h6
-rw-r--r--contrib/tools/python3/Modules/clinic/mathmodule.c.h11
-rw-r--r--contrib/tools/python3/Modules/clinic/overlapped.c.h7
-rw-r--r--contrib/tools/python3/Modules/clinic/pyexpat.c.h177
-rw-r--r--contrib/tools/python3/Modules/clinic/selectmodule.c.h35
-rw-r--r--contrib/tools/python3/Modules/clinic/signalmodule.c.h17
-rw-r--r--contrib/tools/python3/Modules/clinic/termios.c.h5
-rw-r--r--contrib/tools/python3/Modules/clinic/zlibmodule.c.h27
-rw-r--r--contrib/tools/python3/Modules/cmathmodule.c16
-rw-r--r--contrib/tools/python3/Modules/faulthandler.c15
-rw-r--r--contrib/tools/python3/Modules/gcmodule.c15
-rw-r--r--contrib/tools/python3/Modules/itertoolsmodule.c12
-rw-r--r--contrib/tools/python3/Modules/main.c1
-rw-r--r--contrib/tools/python3/Modules/mathmodule.c13
-rw-r--r--contrib/tools/python3/Modules/overlapped.c12
-rw-r--r--contrib/tools/python3/Modules/posixmodule.c2
-rw-r--r--contrib/tools/python3/Modules/pyexpat.c134
-rw-r--r--contrib/tools/python3/Modules/selectmodule.c45
-rw-r--r--contrib/tools/python3/Modules/signalmodule.c21
-rw-r--r--contrib/tools/python3/Modules/socketmodule.c3
-rw-r--r--contrib/tools/python3/Modules/termios.c5
-rw-r--r--contrib/tools/python3/Modules/unicodedata.c175
-rw-r--r--contrib/tools/python3/Modules/zlibmodule.c30
-rw-r--r--contrib/tools/python3/Objects/bytearrayobject.c91
-rw-r--r--contrib/tools/python3/Objects/bytes_methods.c4
-rw-r--r--contrib/tools/python3/Objects/bytesobject.c94
-rw-r--r--contrib/tools/python3/Objects/clinic/bytearrayobject.c.h73
-rw-r--r--contrib/tools/python3/Objects/clinic/bytesobject.c.h75
-rw-r--r--contrib/tools/python3/Objects/clinic/codeobject.c.h5
-rw-r--r--contrib/tools/python3/Objects/clinic/floatobject.c.h8
-rw-r--r--contrib/tools/python3/Objects/clinic/listobject.c.h10
-rw-r--r--contrib/tools/python3/Objects/clinic/longobject.c.h45
-rw-r--r--contrib/tools/python3/Objects/clinic/memoryobject.c.h17
-rw-r--r--contrib/tools/python3/Objects/clinic/odictobject.c.h5
-rw-r--r--contrib/tools/python3/Objects/clinic/unicodeobject.c.h162
-rw-r--r--contrib/tools/python3/Objects/codeobject.c5
-rw-r--r--contrib/tools/python3/Objects/descrobject.c2
-rw-r--r--contrib/tools/python3/Objects/dictobject.c3
-rw-r--r--contrib/tools/python3/Objects/enumobject.c2
-rw-r--r--contrib/tools/python3/Objects/exceptions.c4
-rw-r--r--contrib/tools/python3/Objects/floatobject.c8
-rw-r--r--contrib/tools/python3/Objects/genericaliasobject.c6
-rw-r--r--contrib/tools/python3/Objects/genobject.c8
-rw-r--r--contrib/tools/python3/Objects/listobject.c13
-rw-r--r--contrib/tools/python3/Objects/longobject.c50
-rw-r--r--contrib/tools/python3/Objects/memoryobject.c27
-rw-r--r--contrib/tools/python3/Objects/odictobject.c5
-rw-r--r--contrib/tools/python3/Objects/setobject.c6
-rw-r--r--contrib/tools/python3/Objects/sliceobject.c4
-rw-r--r--contrib/tools/python3/Objects/tupleobject.c8
-rw-r--r--contrib/tools/python3/Objects/typeobject.c12
-rw-r--r--contrib/tools/python3/Objects/unicodeobject.c212
-rw-r--r--contrib/tools/python3/Objects/weakrefobject.c3
-rw-r--r--contrib/tools/python3/PC/clinic/_wmimodule.cpp.h6
-rw-r--r--contrib/tools/python3/Parser/lexer/state.c5
-rw-r--r--contrib/tools/python3/Parser/tokenizer/file_tokenizer.c1
-rw-r--r--contrib/tools/python3/Parser/tokenizer/helpers.c2
-rw-r--r--contrib/tools/python3/Parser/tokenizer/readline_tokenizer.c1
-rw-r--r--contrib/tools/python3/Python/asm_trampoline.S4
-rw-r--r--contrib/tools/python3/Python/asm_trampoline_aarch64.h56
-rw-r--r--contrib/tools/python3/Python/assemble.c6
-rw-r--r--contrib/tools/python3/Python/bltinmodule.c121
-rw-r--r--contrib/tools/python3/Python/clinic/bltinmodule.c.h59
-rw-r--r--contrib/tools/python3/Python/clinic/context.c.h27
-rw-r--r--contrib/tools/python3/Python/clinic/import.c.h7
-rw-r--r--contrib/tools/python3/Python/clinic/marshal.c.h10
-rw-r--r--contrib/tools/python3/Python/clinic/sysmodule.c.h5
-rw-r--r--contrib/tools/python3/Python/compile.c17
-rw-r--r--contrib/tools/python3/Python/context.c39
-rw-r--r--contrib/tools/python3/Python/flowgraph.c16
-rw-r--r--contrib/tools/python3/Python/frozen_modules/_collections_abc.h1396
-rw-r--r--contrib/tools/python3/Python/frozen_modules/ntpath.h2632
-rw-r--r--contrib/tools/python3/Python/frozen_modules/runpy.h1191
-rw-r--r--contrib/tools/python3/Python/hamt.c2
-rw-r--r--contrib/tools/python3/Python/import.c9
-rw-r--r--contrib/tools/python3/Python/lock.c11
-rw-r--r--contrib/tools/python3/Python/marshal.c57
-rw-r--r--contrib/tools/python3/Python/parking_lot.c8
-rw-r--r--contrib/tools/python3/Python/perf_jit_trampoline.c13
-rw-r--r--contrib/tools/python3/Python/perf_trampoline.c17
-rw-r--r--contrib/tools/python3/Python/pylifecycle.c4
-rw-r--r--contrib/tools/python3/Python/pythonrun.c1
-rw-r--r--contrib/tools/python3/Python/sysmodule.c7
-rw-r--r--contrib/tools/python3/README.rst2
-rw-r--r--contrib/tools/python3/bin/ya.make4
-rw-r--r--contrib/tools/python3/patches/pr151320.patch31
-rw-r--r--contrib/tools/python3/ya.make5
236 files changed, 6952 insertions, 5177 deletions
diff --git a/contrib/tools/python3/.yandex_meta/devtools.copyrights.report b/contrib/tools/python3/.yandex_meta/devtools.copyrights.report
index 0623f023e63..c3428fe1aee 100644
--- a/contrib/tools/python3/.yandex_meta/devtools.copyrights.report
+++ b/contrib/tools/python3/.yandex_meta/devtools.copyrights.report
@@ -294,7 +294,7 @@ BELONGS ya.make
Score : 100.00
Match type : COPYRIGHT
Files with this license:
- Modules/selectmodule.c [1731:1732]
+ Modules/selectmodule.c [1732:1733]
KEEP COPYRIGHT_SERVICE_LABEL 4c4db466ec49df90501b3efa15b48115
BELONGS ya.make
@@ -404,7 +404,7 @@ BELONGS ya.make
Score : 100.00
Match type : COPYRIGHT
Files with this license:
- Modules/binascii.c [633:634]
+ Modules/binascii.c [641:642]
KEEP COPYRIGHT_SERVICE_LABEL 6df801c8be98b70cf1e1bd99eee48534
BELONGS Lib/ya.make
diff --git a/contrib/tools/python3/.yandex_meta/devtools.licenses.report b/contrib/tools/python3/.yandex_meta/devtools.licenses.report
index 28aea9f03f3..f46af9bbf22 100644
--- a/contrib/tools/python3/.yandex_meta/devtools.licenses.report
+++ b/contrib/tools/python3/.yandex_meta/devtools.licenses.report
@@ -566,7 +566,7 @@ BELONGS ya.make
Match type : TEXT
Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/gary-s-brown.LICENSE
Files with this license:
- Modules/binascii.c [633:634]
+ Modules/binascii.c [641:642]
KEEP Python-2.0 6a19cf8041a37669b2cd07b9cd3eace3
BELONGS ya.make
@@ -1245,7 +1245,7 @@ BELONGS ya.make
Match type : TEXT
Links : http://opensource.org/licenses/bsd-license.php, http://www.opensource.org/licenses/BSD-2-Clause, https://spdx.org/licenses/BSD-2-Clause
Files with this license:
- Modules/selectmodule.c [1734:1753]
+ Modules/selectmodule.c [1735:1754]
KEEP X11-Hanson fee24880a028f5d50965c0ed93a7a806
BELONGS ya.make
diff --git a/contrib/tools/python3/.yandex_meta/override.nix b/contrib/tools/python3/.yandex_meta/override.nix
index dbb217f044e..79d53ffada0 100644
--- a/contrib/tools/python3/.yandex_meta/override.nix
+++ b/contrib/tools/python3/.yandex_meta/override.nix
@@ -1,11 +1,11 @@
pkgs: attrs: with pkgs; with attrs; rec {
- version = "3.13.13";
+ version = "3.13.14";
src = fetchFromGitHub {
owner = "python";
repo = "cpython";
rev = "v${version}";
- hash = "sha256-JUA430BZJ4cMS/0XLuuYsU85jPkDJLXtl+Jccdlm+fk=";
+ hash = "sha256-jqvOlqpH9gZtYhyLn+BeWeWj/YHZX3ine6X4NPc59fY=";
};
patches = [];
diff --git a/contrib/tools/python3/Include/dynamic_annotations.h b/contrib/tools/python3/Include/dynamic_annotations.h
index 4d4def9bf89..5290319dd76 100644
--- a/contrib/tools/python3/Include/dynamic_annotations.h
+++ b/contrib/tools/python3/Include/dynamic_annotations.h
@@ -461,6 +461,7 @@ int RunningOnValgrind(void);
#if DYNAMIC_ANNOTATIONS_ENABLED != 0 && defined(__cplusplus)
+extern "C++" {
/* _Py_ANNOTATE_UNPROTECTED_READ is the preferred way to annotate racey reads.
Instead of doing
@@ -476,6 +477,8 @@ int RunningOnValgrind(void);
_Py_ANNOTATE_IGNORE_READS_END();
return res;
}
+}
+
/* Apply _Py_ANNOTATE_BENIGN_RACE_SIZED to a static variable. */
#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \
namespace { \
diff --git a/contrib/tools/python3/Include/internal/pycore_pyhash.h b/contrib/tools/python3/Include/internal/pycore_pyhash.h
index 0ce08900e96..9aff316ce62 100644
--- a/contrib/tools/python3/Include/internal/pycore_pyhash.h
+++ b/contrib/tools/python3/Include/internal/pycore_pyhash.h
@@ -30,14 +30,14 @@ PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t);
* pppppppp ssssssss ........ fnv -- two Py_hash_t
* k0k0k0k0 k1k1k1k1 ........ siphash -- two uint64_t
* ........ ........ ssssssss djbx33a -- 16 bytes padding + one Py_hash_t
- * ........ ........ eeeeeeee pyexpat XML hash salt
+ * eeeeeeee eeeeeeee eeeeeeee pyexpat XML hash salt
*
* memory layout on 32 bit systems
* cccccccc cccccccc cccccccc uc
* ppppssss ........ ........ fnv -- two Py_hash_t
* k0k0k0k0 k1k1k1k1 ........ siphash -- two uint64_t (*)
* ........ ........ ssss.... djbx33a -- 16 bytes padding + one Py_hash_t
- * ........ ........ eeee.... pyexpat XML hash salt
+ * eeeeeeee eeeeeeee eeee.... pyexpat XML hash salt
*
* (*) The siphash member may not be available on 32 bit platforms without
* an unsigned int64 data type.
@@ -61,7 +61,9 @@ typedef union {
Py_hash_t suffix;
} djbx33a;
struct {
- unsigned char padding[16];
+ /* 16 bytes for XML_SetHashSalt16Bytes */
+ uint8_t hashsalt16[16];
+ /* 4/8 bytes for legacy XML_SetHashSalt */
Py_hash_t hashsalt;
} expat;
} _Py_HashSecret_t;
diff --git a/contrib/tools/python3/Include/patchlevel.h b/contrib/tools/python3/Include/patchlevel.h
index 746b9fcaa5f..e33d30adf95 100644
--- a/contrib/tools/python3/Include/patchlevel.h
+++ b/contrib/tools/python3/Include/patchlevel.h
@@ -18,12 +18,12 @@
/*--start constants--*/
#define PY_MAJOR_VERSION 3
#define PY_MINOR_VERSION 13
-#define PY_MICRO_VERSION 13
+#define PY_MICRO_VERSION 14
#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL
#define PY_RELEASE_SERIAL 0
/* Version as a string */
-#define PY_VERSION "3.13.13"
+#define PY_VERSION "3.13.14"
/*--end constants--*/
/* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
diff --git a/contrib/tools/python3/Include/pyexpat.h b/contrib/tools/python3/Include/pyexpat.h
index 04548b7684a..a676e16a7a4 100644
--- a/contrib/tools/python3/Include/pyexpat.h
+++ b/contrib/tools/python3/Include/pyexpat.h
@@ -57,6 +57,14 @@ struct PyExpat_CAPI
XML_Parser parser, unsigned long long activationThresholdBytes);
XML_Bool (*SetAllocTrackerMaximumAmplification)(
XML_Parser parser, float maxAmplificationFactor);
+ /* might be NULL for expat < 2.4.0 */
+ XML_Bool (*SetBillionLaughsAttackProtectionActivationThreshold)(
+ XML_Parser parser, unsigned long long activationThresholdBytes);
+ XML_Bool (*SetBillionLaughsAttackProtectionMaximumAmplification)(
+ XML_Parser parser, float maxAmplificationFactor);
+ /* might be NULL for expat < 2.8.0 */
+ XML_Bool (*SetHashSalt16Bytes)(
+ XML_Parser parser, const uint8_t entropy[16]);
/* always add new stuff to the end! */
};
diff --git a/contrib/tools/python3/Lib/_collections_abc.py b/contrib/tools/python3/Lib/_collections_abc.py
index 6e224d36001..da2d0c29f84 100644
--- a/contrib/tools/python3/Lib/_collections_abc.py
+++ b/contrib/tools/python3/Lib/_collections_abc.py
@@ -461,8 +461,8 @@ class Buffer(metaclass=ABCMeta):
class _CallableGenericAlias(GenericAlias):
""" Represent `Callable[argtypes, resulttype]`.
- This sets ``__args__`` to a tuple containing the flattened ``argtypes``
- followed by ``resulttype``.
+ This sets ``__args__`` to a tuple containing the flattened
+ ``argtypes`` followed by ``resulttype``.
Example: ``Callable[[int, str], float]`` sets ``__args__`` to
``(int, str, float)``.
@@ -943,8 +943,9 @@ class MutableMapping(Mapping):
__marker = object()
def pop(self, key, default=__marker):
- '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
- If key is not found, d is returned if given, otherwise KeyError is raised.
+ '''D.pop(k[,d]) -> v, remove specified key and return the corresponding
+ value. If key is not found, d is returned if given, otherwise
+ KeyError is raised.
'''
try:
value = self[key]
@@ -978,9 +979,12 @@ class MutableMapping(Mapping):
def update(self, other=(), /, **kwds):
''' D.update([E, ]**F) -> None. Update D from mapping/iterable E and F.
- If E present and has a .keys() method, does: for k in E.keys(): D[k] = E[k]
- If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v
- In either case, this is followed by: for k, v in F.items(): D[k] = v
+ If E present and has a .keys() method, does:
+ for k in E.keys(): D[k] = E[k]
+ If E present and lacks .keys() method, does:
+ for (k, v) in E: D[k] = v
+ In either case, this is followed by:
+ for k, v in F.items(): D[k] = v
'''
if isinstance(other, Mapping):
for key in other:
@@ -1045,8 +1049,8 @@ class Sequence(Reversible, Collection):
yield self[i]
def index(self, value, start=0, stop=None):
- '''S.index(value, [start, [stop]]) -> integer -- return first index of value.
- Raises ValueError if the value is not present.
+ '''S.index(value, [start, [stop]]) -> integer -- return first index of
+ value. Raises ValueError if the value is not present.
Supporting start and stop arguments is optional, but
recommended.
@@ -1153,15 +1157,16 @@ class MutableSequence(Sequence):
self[i], self[n-i-1] = self[n-i-1], self[i]
def extend(self, values):
- 'S.extend(iterable) -- extend sequence by appending elements from the iterable'
+ """S.extend(iterable) -- extend sequence by appending elements from the
+ iterable"""
if values is self:
values = list(values)
for v in values:
self.append(v)
def pop(self, index=-1):
- '''S.pop([index]) -> item -- remove and return item at index (default last).
- Raise IndexError if list is empty or index is out of range.
+ '''S.pop([index]) -> item -- remove and return item at index (default
+ last). Raise IndexError if list is empty or index is out of range.
'''
v = self[index]
del self[index]
diff --git a/contrib/tools/python3/Lib/_pydecimal.py b/contrib/tools/python3/Lib/_pydecimal.py
index 49119ede7ce..f83524a2560 100644
--- a/contrib/tools/python3/Lib/_pydecimal.py
+++ b/contrib/tools/python3/Lib/_pydecimal.py
@@ -102,8 +102,8 @@ class DecimalException(ArithmeticError):
anything, though.
handle -- Called when context._raise_error is called and the
- trap_enabler is not set. First argument is self, second is the
- context. More arguments can be given, those being after
+ trap_enabler is not set. First argument is self, second is
+ the context. More arguments can be given, those being after
the explanation in _raise_error (For example,
context._raise_error(NewError, '(-x)!', self._sign) would
call NewError().handle(context, self._sign).)
@@ -220,11 +220,12 @@ class InvalidContext(InvalidOperation):
"""Invalid context. Unknown rounding, for example.
This occurs and signals invalid-operation if an invalid context was
- detected during an operation. This can occur if contexts are not checked
- on creation and either the precision exceeds the capability of the
- underlying concrete representation or an unknown or unsupported rounding
- was specified. These aspects of the context need only be checked when
- the values are required to be used. The result is [0,qNaN].
+ detected during an operation. This can occur if contexts are not
+ checked on creation and either the precision exceeds the capability of
+ the underlying concrete representation or an unknown or unsupported
+ rounding was specified. These aspects of the context need only be
+ checked when the values are required to be used. The result is
+ [0,qNaN].
"""
def handle(self, context, *args):
@@ -317,8 +318,9 @@ class FloatOperation(DecimalException, TypeError):
Decimal.from_float() or context.create_decimal_from_float() do not
set the flag.
- Otherwise (the signal is trapped), only equality comparisons and explicit
- conversions are silent. All other mixed operations raise FloatOperation.
+ Otherwise (the signal is trapped), only equality comparisons and
+ explicit conversions are silent. All other mixed operations raise
+ FloatOperation.
"""
# List of public traps and flags
@@ -2860,8 +2862,8 @@ class Decimal(object):
"""Compares self to other using the abstract representations.
This is not like the standard compare, which use their numerical
- value. Note that a total ordering is defined for all possible abstract
- representations.
+ value. Note that a total ordering is defined for all possible
+ abstract representations.
"""
other = _convert_other(other, raiseit=True)
@@ -2932,7 +2934,8 @@ class Decimal(object):
def compare_total_mag(self, other, context=None):
"""Compares self to other using abstract repr., ignoring sign.
- Like compare_total, but with operand's sign ignored and assumed to be 0.
+ Like compare_total, but with operand's sign ignored and assumed to
+ be 0.
"""
other = _convert_other(other, raiseit=True)
@@ -4069,9 +4072,9 @@ class Context(object):
def abs(self, a):
"""Returns the absolute value of the operand.
- If the operand is negative, the result is the same as using the minus
- operation on the operand. Otherwise, the result is the same as using
- the plus operation on the operand.
+ If the operand is negative, the result is the same as using the
+ minus operation on the operand. Otherwise, the result is the same
+ as using the plus operation on the operand.
>>> ExtendedContext.abs(Decimal('2.1'))
Decimal('2.1')
@@ -4127,16 +4130,17 @@ class Context(object):
def compare(self, a, b):
"""Compares values numerically.
- If the signs of the operands differ, a value representing each operand
- ('-1' if the operand is less than zero, '0' if the operand is zero or
- negative zero, or '1' if the operand is greater than zero) is used in
- place of that operand for the comparison instead of the actual
- operand.
+ If the signs of the operands differ, a value representing each
+ operand ('-1' if the operand is less than zero, '0' if the operand
+ is zero or negative zero, or '1' if the operand is greater than
+ zero) is used in place of that operand for the comparison instead of
+ the actual operand.
- The comparison is then effected by subtracting the second operand from
- the first and then returning a value according to the result of the
- subtraction: '-1' if the result is less than zero, '0' if the result is
- zero or negative zero, or '1' if the result is greater than zero.
+ The comparison is then effected by subtracting the second operand
+ from the first and then returning a value according to the result of
+ the subtraction: '-1' if the result is less than zero, '0' if the
+ result is zero or negative zero, or '1' if the result is greater
+ than zero.
>>> ExtendedContext.compare(Decimal('2.1'), Decimal('3'))
Decimal('-1')
@@ -4199,8 +4203,8 @@ class Context(object):
"""Compares two operands using their abstract representation.
This is not like the standard compare, which use their numerical
- value. Note that a total ordering is defined for all possible abstract
- representations.
+ value. Note that a total ordering is defined for all possible
+ abstract representations.
>>> ExtendedContext.compare_total(Decimal('12.73'), Decimal('127.9'))
Decimal('-1')
@@ -4227,7 +4231,8 @@ class Context(object):
def compare_total_mag(self, a, b):
"""Compares two operands using their abstract representation ignoring sign.
- Like compare_total, but with operand's sign ignored and assumed to be 0.
+ Like compare_total, but with operand's sign ignored and assumed to
+ be 0.
"""
a = _convert_other(a, raiseit=True)
return a.compare_total_mag(b)
@@ -4885,8 +4890,8 @@ class Context(object):
If either operand is a special value then the general rules apply.
Otherwise, the operands are multiplied together
- ('long multiplication'), resulting in a number which may be as long as
- the sum of the lengths of the two operands.
+ ('long multiplication'), resulting in a number which may be as long
+ as the sum of the lengths of the two operands.
>>> ExtendedContext.multiply(Decimal('1.20'), Decimal('3'))
Decimal('3.60')
@@ -5162,19 +5167,19 @@ class Context(object):
"""Returns a value equal to 'a' (rounded), having the exponent of 'b'.
The coefficient of the result is derived from that of the left-hand
- operand. It may be rounded using the current rounding setting (if the
- exponent is being increased), multiplied by a positive power of ten (if
- the exponent is being decreased), or is unchanged (if the exponent is
- already equal to that of the right-hand operand).
+ operand. It may be rounded using the current rounding setting (if
+ the exponent is being increased), multiplied by a positive power of
+ ten (if the exponent is being decreased), or is unchanged (if the
+ exponent is already equal to that of the right-hand operand).
Unlike other operations, if the length of the coefficient after the
quantize operation would be greater than precision then an Invalid
- operation condition is raised. This guarantees that, unless there is
- an error condition, the exponent of the result of a quantize is always
- equal to that of the right-hand operand.
+ operation condition is raised. This guarantees that, unless there
+ is an error condition, the exponent of the result of a quantize is
+ always equal to that of the right-hand operand.
- Also unlike other operations, quantize will never raise Underflow, even
- if the result is subnormal and inexact.
+ Also unlike other operations, quantize will never raise Underflow,
+ even if the result is subnormal and inexact.
>>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.001'))
Decimal('2.170')
@@ -5228,13 +5233,13 @@ class Context(object):
"""Returns the remainder from integer division.
The result is the residue of the dividend after the operation of
- calculating integer division as described for divide-integer, rounded
- to precision digits if necessary. The sign of the result, if
- non-zero, is the same as that of the original dividend.
+ calculating integer division as described for divide-integer,
+ rounded to precision digits if necessary. The sign of the result,
+ if non-zero, is the same as that of the original dividend.
- This operation will fail under the same conditions as integer division
- (that is, if integer division on the same two operands would fail, the
- remainder cannot be calculated).
+ This operation will fail under the same conditions as integer
+ division (that is, if integer division on the same two operands
+ would fail, the remainder cannot be calculated).
>>> ExtendedContext.remainder(Decimal('2.1'), Decimal('3'))
Decimal('2.1')
@@ -5268,9 +5273,9 @@ class Context(object):
is chosen). If the result is equal to 0 then its sign will be the
sign of a.
- This operation will fail under the same conditions as integer division
- (that is, if integer division on the same two operands would fail, the
- remainder cannot be calculated).
+ This operation will fail under the same conditions as integer
+ division (that is, if integer division on the same two operands
+ would fail, the remainder cannot be calculated).
>>> ExtendedContext.remainder_near(Decimal('2.1'), Decimal('3'))
Decimal('-0.9')
@@ -5328,8 +5333,8 @@ class Context(object):
def same_quantum(self, a, b):
"""Returns True if the two operands have the same exponent.
- The result is never affected by either the sign or the coefficient of
- either operand.
+ The result is never affected by either the sign or the coefficient
+ of either operand.
>>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('0.001'))
False
@@ -5401,8 +5406,8 @@ class Context(object):
def sqrt(self, a):
"""Square root of a non-negative number to context precision.
- If the result must be inexact, it is rounded using the round-half-even
- algorithm.
+ If the result must be inexact, it is rounded using the
+ round-half-even algorithm.
>>> ExtendedContext.sqrt(Decimal('0'))
Decimal('0')
diff --git a/contrib/tools/python3/Lib/_pyio.py b/contrib/tools/python3/Lib/_pyio.py
index 9ed2e5b2aa0..7c1635cb331 100644
--- a/contrib/tools/python3/Lib/_pyio.py
+++ b/contrib/tools/python3/Lib/_pyio.py
@@ -82,27 +82,28 @@ def open(file, mode="r", buffering=-1, encoding=None, errors=None,
wrapped. (If a file descriptor is given, it is closed when the
returned I/O object is closed, unless closefd is set to False.)
- mode is an optional string that specifies the mode in which the file is
- opened. It defaults to 'r' which means open for reading in text mode. Other
- common values are 'w' for writing (truncating the file if it already
- exists), 'x' for exclusive creation of a new file, and 'a' for appending
- (which on some Unix systems, means that all writes append to the end of the
- file regardless of the current seek position). In text mode, if encoding is
- not specified the encoding used is platform dependent. (For reading and
- writing raw bytes use binary mode and leave encoding unspecified.) The
- available modes are:
+ mode is an optional string that specifies the mode in which the file
+ is opened. It defaults to 'r' which means open for reading in text
+ mode. Other common values are 'w' for writing (truncating the file if
+ it already exists), 'x' for exclusive creation of a new file, and
+ 'a' for appending (which on some Unix systems, means that all writes
+ append to the end of the file regardless of the current seek position).
+ In text mode, if encoding is not specified the encoding used is platform
+ dependent. (For reading and writing raw bytes use binary mode and leave
+ encoding unspecified.) The available modes are:
- ========= ===============================================================
+ ========= ==========================================================
Character Meaning
- --------- ---------------------------------------------------------------
+ --------- ----------------------------------------------------------
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
- 'a' open for writing, appending to the end of the file if it exists
+ 'a' open for writing, appending to the end of the file if it
+ exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
- ========= ===============================================================
+ ========= ==========================================================
The default mode is 'rt' (open for reading text). For binary random
access, the mode 'w+b' opens and truncates the file to 0 bytes, while
@@ -110,22 +111,22 @@ def open(file, mode="r", buffering=-1, encoding=None, errors=None,
raises an `FileExistsError` if the file already exists.
Python distinguishes between files opened in binary and text modes,
- even when the underlying operating system doesn't. Files opened in
+ even when the underlying operating system doesn't. Files opened in
binary mode (appending 'b' to the mode argument) return contents as
- bytes objects without any decoding. In text mode (the default, or when
+ bytes objects without any decoding. In text mode (the default, or when
't' is appended to the mode argument), the contents of the file are
returned as strings, the bytes having been first decoded using a
platform-dependent encoding or using the specified encoding if given.
buffering is an optional integer used to set the buffering policy.
- Pass 0 to switch buffering off (only allowed in binary mode), 1 to select
- line buffering (only usable in text mode), and an integer > 1 to indicate
- the size of a fixed-size chunk buffer. When no buffering argument is
- given, the default buffering policy works as follows:
+ Pass 0 to switch buffering off (only allowed in binary mode), 1 to
+ select line buffering (only usable in text mode), and an integer > 1 to
+ indicate the size of a fixed-size chunk buffer. When no buffering
+ argument is given, the default buffering policy works as follows:
* Binary files are buffered in fixed-size chunks; the size of the buffer
- is chosen using a heuristic trying to determine the underlying device's
- "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`.
+ is chosen using a heuristic trying to determine the underlying
+ device's "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`.
On many systems, the buffer will typically be 4096 or 8192 bytes long.
* "Interactive" text files (files for which isatty() returns True)
@@ -146,8 +147,8 @@ def open(file, mode="r", buffering=-1, encoding=None, errors=None,
encoding error strings.
newline is a string controlling how universal newlines works (it only
- applies to text mode). It can be None, '', '\n', '\r', and '\r\n'. It works
- as follows:
+ applies to text mode). It can be None, '', '\n', '\r', and '\r\n'. It
+ works as follows:
* On input, if newline is None, universal newlines mode is
enabled. Lines in the input can end in '\n', '\r', or '\r\n', and
@@ -163,17 +164,17 @@ def open(file, mode="r", buffering=-1, encoding=None, errors=None,
other legal values, any '\n' characters written are translated to
the given string.
- closedfd is a bool. If closefd is False, the underlying file descriptor will
- be kept open when the file is closed. This does not work when a file name is
- given and must be True in that case.
+ closedfd is a bool. If closefd is False, the underlying file descriptor
+ will be kept open when the file is closed. This does not work when
+ a file name is given and must be True in that case.
The newly created file is non-inheritable.
A custom opener can be used by passing a callable as *opener*. The
- underlying file descriptor for the file object is then obtained by calling
- *opener* with (*file*, *flags*). *opener* must return an open file
- descriptor (passing os.open as *opener* results in functionality similar to
- passing None).
+ underlying file descriptor for the file object is then obtained by
+ calling *opener* with (*file*, *flags*). *opener* must return an open
+ file descriptor (passing os.open as *opener* results in functionality
+ similar to passing None).
open() returns a file object whose type depends on the mode, and
through which the standard file operations such as reading and writing
@@ -357,10 +358,12 @@ class IOBase(metaclass=abc.ABCMeta):
interpreted relative to the position indicated by whence. Values
for whence are ints:
- * 0 -- start of stream (the default); offset should be zero or positive
+ * 0 -- start of stream (the default); offset should be zero or
+ positive
* 1 -- current stream position; offset may be negative
* 2 -- end of stream; offset is usually negative
- Some operating systems / file systems could provide additional values.
+ Some operating systems / file systems could provide additional
+ values.
Return an int indicating the new absolute position.
"""
@@ -373,8 +376,8 @@ class IOBase(metaclass=abc.ABCMeta):
def truncate(self, pos=None):
"""Truncate file to size bytes.
- Size defaults to the current IO position as reported by tell(). Return
- the new size.
+ Size defaults to the current IO position as reported by tell().
+ Return the new size.
"""
self._unsupported("truncate")
@@ -498,7 +501,8 @@ class IOBase(metaclass=abc.ABCMeta):
def fileno(self):
"""Returns underlying file descriptor (an int) if one exists.
- An OSError is raised if the IO object does not use a file descriptor.
+ An OSError is raised if the IO object does not use a file
+ descriptor.
"""
self._unsupported("fileno")
@@ -1482,17 +1486,22 @@ class FileIO(RawIOBase):
_closefd = True
def __init__(self, file, mode='r', closefd=True, opener=None):
- """Open a file. The mode can be 'r' (default), 'w', 'x' or 'a' for reading,
- writing, exclusive creation or appending. The file will be created if it
- doesn't exist when opened for writing or appending; it will be truncated
- when opened for writing. A FileExistsError will be raised if it already
- exists when opened for creating. Opening a file for creating implies
- writing so this mode behaves in a similar way to 'w'. Add a '+' to the mode
- to allow simultaneous reading and writing. A custom opener can be used by
- passing a callable as *opener*. The underlying file descriptor for the file
- object is then obtained by calling opener with (*name*, *flags*).
- *opener* must return an open file descriptor (passing os.open as *opener*
- results in functionality similar to passing None).
+ """Open a file.
+
+ The mode can be 'r' (default), 'w', 'x' or 'a' for reading,
+ writing, exclusive creation or appending. The file will be created
+ if it doesn't exist when opened for writing or appending; it will be
+ truncated when opened for writing. A FileExistsError will be raised
+ if it already exists when opened for creating. Opening a file for
+ creating implies writing so this mode behaves in a similar way to
+ 'w'. Add a '+' to the mode to allow simultaneous reading and
+ writing.
+
+ A custom opener can be used by passing a callable as *opener*.
+ The underlying file descriptor for the file object is then obtained
+ by calling opener with (*name*, *flags*). *opener* must return
+ an open file descriptor (passing os.open as *opener* results in
+ functionality similar to passing None).
"""
if self._fd >= 0:
# Have to close the existing file first.
@@ -1702,8 +1711,8 @@ class FileIO(RawIOBase):
"""Write bytes b to file, return number written.
Only makes one system call, so not all of the data may be written.
- The number of bytes actually written is returned. In non-blocking mode,
- returns None if the write would block.
+ The number of bytes actually written is returned. In non-blocking
+ mode, returns None if the write would block.
"""
self._checkClosed()
self._checkWritable()
@@ -1715,11 +1724,12 @@ class FileIO(RawIOBase):
def seek(self, pos, whence=SEEK_SET):
"""Move to new file position.
- Argument offset is a byte count. Optional argument whence defaults to
- SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values
- are SEEK_CUR or 1 (move relative to current position, positive or negative),
- and SEEK_END or 2 (move relative to end of file, usually negative, although
- many platforms allow seeking beyond the end of a file).
+ Argument offset is a byte count. Optional argument whence defaults
+ to SEEK_SET or 0 (offset from start of file, offset should be >= 0);
+ other values are SEEK_CUR or 1 (move relative to current position,
+ positive or negative), and SEEK_END or 2 (move relative to end of
+ file, usually negative, although many platforms allow seeking beyond
+ the end of a file).
Note that not all file objects are seekable.
"""
@@ -1751,8 +1761,8 @@ class FileIO(RawIOBase):
def close(self):
"""Close the file.
- A closed file cannot be used for further I/O operations. close() may be
- called more than once without error.
+ A closed file cannot be used for further I/O operations.
+ close() may be called more than once without error.
"""
if not self.closed:
try:
@@ -1831,8 +1841,8 @@ class TextIOBase(IOBase):
def read(self, size=-1):
"""Read at most size characters from stream, where size is an int.
- Read from underlying buffer until we have size characters or we hit EOF.
- If size is negative or omitted, read until EOF.
+ Read from underlying buffer until we have size characters or we hit
+ EOF. If size is negative or omitted, read until EOF.
Returns a string.
"""
diff --git a/contrib/tools/python3/Lib/argparse.py b/contrib/tools/python3/Lib/argparse.py
index a0faa3f41e2..7d845175644 100644
--- a/contrib/tools/python3/Lib/argparse.py
+++ b/contrib/tools/python3/Lib/argparse.py
@@ -2601,7 +2601,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
choices = iter(choices)
if value not in choices:
args = {'value': str(value),
- 'choices': ', '.join(map(str, action.choices))}
+ 'choices': ', '.join(repr(str(choice)) for choice in action.choices)}
msg = _('invalid choice: %(value)r (choose from %(choices)s)')
raise ArgumentError(action, msg % args)
diff --git a/contrib/tools/python3/Lib/asyncio/__main__.py b/contrib/tools/python3/Lib/asyncio/__main__.py
index 42bfcdbf50f..2effdbc38da 100644
--- a/contrib/tools/python3/Lib/asyncio/__main__.py
+++ b/contrib/tools/python3/Lib/asyncio/__main__.py
@@ -96,11 +96,15 @@ class REPLThread(threading.Thread):
if not sys.flags.isolated and (startup_path := os.getenv("PYTHONSTARTUP")):
sys.audit("cpython.run_startup", startup_path)
-
- import tokenize
- with tokenize.open(startup_path) as f:
- startup_code = compile(f.read(), startup_path, "exec")
+ try:
+ import tokenize
+ with tokenize.open(startup_path) as f:
+ startup_code = compile(f.read(), startup_path, "exec")
exec(startup_code, console.locals)
+ except SystemExit:
+ raise
+ except BaseException:
+ console.showtraceback()
ps1 = getattr(sys, "ps1", ">>> ")
if can_colorize() and CAN_USE_PYREPL:
diff --git a/contrib/tools/python3/Lib/asyncio/base_events.py b/contrib/tools/python3/Lib/asyncio/base_events.py
index 84cad10636f..ec8e3b6f79f 100644
--- a/contrib/tools/python3/Lib/asyncio/base_events.py
+++ b/contrib/tools/python3/Lib/asyncio/base_events.py
@@ -489,10 +489,10 @@ class BaseEventLoop(events.AbstractEventLoop):
If factory is None the default task factory will be set.
If factory is a callable, it should have a signature matching
- '(loop, coro, **kwargs)', where 'loop' will be a reference to the active
- event loop, 'coro' will be a coroutine object, and **kwargs will be
- arbitrary keyword arguments that should be passed on to Task.
- The callable must return a Task.
+ '(loop, coro, **kwargs)', where 'loop' will be a reference to the
+ active event loop, 'coro' will be a coroutine object, and **kwargs
+ will be arbitrary keyword arguments that should be passed on to
+ Task. The callable must return a Task.
"""
if factory is not None and not callable(factory):
raise TypeError('task factory must be a callable or None')
@@ -727,8 +727,8 @@ class BaseEventLoop(events.AbstractEventLoop):
def stop(self):
"""Stop running the event loop.
- Every callback already scheduled will still run. This simply informs
- run_forever to stop looping after a complete iteration.
+ Every callback already scheduled will still run. This simply
+ informs run_forever to stop looping after a complete iteration.
"""
self._stopping = True
@@ -966,7 +966,7 @@ class BaseEventLoop(events.AbstractEventLoop):
f"and file {file!r} combination")
async def _sock_sendfile_fallback(self, sock, file, offset, count):
- if offset:
+ if hasattr(file, 'seek'):
file.seek(offset)
blocksize = (
min(count, constants.SENDFILE_FALLBACK_READBUFFER_SIZE)
@@ -1073,12 +1073,12 @@ class BaseEventLoop(events.AbstractEventLoop):
Create a streaming transport connection to a given internet host and
port: socket family AF_INET or socket.AF_INET6 depending on host (or
- family if specified), socket type SOCK_STREAM. protocol_factory must be
- a callable returning a protocol instance.
+ family if specified), socket type SOCK_STREAM. protocol_factory must
+ be a callable returning a protocol instance.
- This method is a coroutine which will try to establish the connection
- in the background. When successful, the coroutine returns a
- (transport, protocol) pair.
+ This method is a coroutine which will try to establish the
+ connection in the background. When successful, the coroutine
+ returns a (transport, protocol) pair.
"""
if server_hostname is not None and not ssl:
raise ValueError('server_hostname is only meaningful with ssl')
@@ -1281,7 +1281,6 @@ class BaseEventLoop(events.AbstractEventLoop):
raise RuntimeError(
f"fallback is disabled and native sendfile is not "
f"supported for transport {transport!r}")
-
return await self._sendfile_fallback(transport, file,
offset, count)
@@ -1290,7 +1289,7 @@ class BaseEventLoop(events.AbstractEventLoop):
"sendfile syscall is not supported")
async def _sendfile_fallback(self, transp, file, offset, count):
- if offset:
+ if hasattr(file, 'seek'):
file.seek(offset)
blocksize = min(count, 16384) if count else 16384
buf = bytearray(blocksize)
@@ -1546,11 +1545,11 @@ class BaseEventLoop(events.AbstractEventLoop):
The host parameter can be a string, in that case the TCP server is
bound to host and port.
- The host parameter can also be a sequence of strings and in that case
- the TCP server is bound to all hosts of the sequence. If a host
- appears multiple times (possibly indirectly e.g. when hostnames
- resolve to the same IP address), the server is only bound once to that
- host.
+ The host parameter can also be a sequence of strings and in that
+ case the TCP server is bound to all hosts of the sequence. If
+ a host appears multiple times (possibly indirectly e.g. when
+ hostnames resolve to the same IP address), the server is only bound
+ once to that host.
Return a Server object which can be used to stop the service.
diff --git a/contrib/tools/python3/Lib/asyncio/events.py b/contrib/tools/python3/Lib/asyncio/events.py
index 3b740b9b905..24e49d561e6 100644
--- a/contrib/tools/python3/Lib/asyncio/events.py
+++ b/contrib/tools/python3/Lib/asyncio/events.py
@@ -341,8 +341,8 @@ class AbstractEventLoop:
If host is an empty string or None all interfaces are assumed
and a list of multiple sockets will be returned (most likely
- one for IPv4 and another one for IPv6). The host parameter can also be
- a sequence (e.g. list) of hosts to bind to.
+ one for IPv4 and another one for IPv6). The host parameter can also
+ be a sequence (e.g. list) of hosts to bind to.
family can be set to either AF_INET or AF_INET6 to force the
socket to use IPv4 or IPv6. If not set it will be determined
@@ -382,8 +382,9 @@ class AbstractEventLoop:
start_serving set to True (default) causes the created server
to start accepting connections immediately. When set to False,
- the user should await Server.start_serving() or Server.serve_forever()
- to make the server to start accepting connections.
+ the user should await Server.start_serving() or
+ Server.serve_forever() to make the server to start accepting
+ connections.
"""
raise NotImplementedError
@@ -446,8 +447,9 @@ class AbstractEventLoop:
start_serving set to True (default) causes the created server
to start accepting connections immediately. When set to False,
- the user should await Server.start_serving() or Server.serve_forever()
- to make the server to start accepting connections.
+ the user should await Server.start_serving() or
+ Server.serve_forever() to make the server to start accepting
+ connections.
"""
raise NotImplementedError
@@ -478,8 +480,8 @@ class AbstractEventLoop:
protocol_factory must be a callable returning a protocol instance.
- socket family AF_INET, socket.AF_INET6 or socket.AF_UNIX depending on
- host (or family if specified), socket type SOCK_DGRAM.
+ socket family AF_INET, socket.AF_INET6 or socket.AF_UNIX depending
+ on host (or family if specified), socket type SOCK_DGRAM.
reuse_address tells the kernel to reuse a local socket in
TIME_WAIT state, without waiting for its natural timeout to
@@ -519,7 +521,8 @@ class AbstractEventLoop:
async def connect_write_pipe(self, protocol_factory, pipe):
"""Register write pipe in event loop.
- protocol_factory should instantiate object with BaseProtocol interface.
+ protocol_factory should instantiate object with BaseProtocol
+ interface.
Pipe is file-like object already switched to nonblocking.
Return pair (transport, protocol), where transport support
WriteTransport interface."""
diff --git a/contrib/tools/python3/Lib/asyncio/locks.py b/contrib/tools/python3/Lib/asyncio/locks.py
index 3df4c693a91..22af506d497 100644
--- a/contrib/tools/python3/Lib/asyncio/locks.py
+++ b/contrib/tools/python3/Lib/asyncio/locks.py
@@ -158,10 +158,10 @@ class Lock(_ContextManagerMixin, mixins._LoopBoundMixin):
class Event(mixins._LoopBoundMixin):
"""Asynchronous equivalent to threading.Event.
- Class implementing event objects. An event manages a flag that can be set
- to true with the set() method and reset to false with the clear() method.
- The wait() method blocks until the flag is true. The flag is initially
- false.
+ Class implementing event objects. An event manages a flag that can be
+ set to true with the set() method and reset to false with the clear()
+ method. The wait() method blocks until the flag is true. The flag is
+ initially false.
"""
def __init__(self):
@@ -353,9 +353,9 @@ class Semaphore(_ContextManagerMixin, mixins._LoopBoundMixin):
"""A Semaphore implementation.
A semaphore manages an internal counter which is decremented by each
- acquire() call and incremented by each release() call. The counter
- can never go below zero; when acquire() finds that it is zero, it blocks,
- waiting until some other thread calls release().
+ acquire() call and incremented by each release() call. The counter
+ can never go below zero; when acquire() finds that it is zero, it
+ blocks, waiting until some other thread calls release().
Semaphores also support the context management protocol.
@@ -511,8 +511,8 @@ class Barrier(mixins._LoopBoundMixin):
async def wait(self):
"""Wait for the barrier.
- When the specified number of tasks have started waiting, they are all
- simultaneously awoken.
+ When the specified number of tasks have started waiting, they are
+ all simultaneously awoken.
Returns an unique and individual index number from 0 to 'parties-1'.
"""
async with self._cond:
diff --git a/contrib/tools/python3/Lib/asyncio/proactor_events.py b/contrib/tools/python3/Lib/asyncio/proactor_events.py
index f404273c3ae..6b94975d004 100644
--- a/contrib/tools/python3/Lib/asyncio/proactor_events.py
+++ b/contrib/tools/python3/Lib/asyncio/proactor_events.py
@@ -756,8 +756,7 @@ class BaseProactorEventLoop(base_events.BaseEventLoop):
offset += blocksize
total_sent += blocksize
finally:
- if total_sent > 0:
- file.seek(offset)
+ file.seek(offset)
async def _sendfile_native(self, transp, file, offset, count):
resume_reading = transp.is_reading()
diff --git a/contrib/tools/python3/Lib/asyncio/queues.py b/contrib/tools/python3/Lib/asyncio/queues.py
index 756216fac80..30004f2bc9b 100644
--- a/contrib/tools/python3/Lib/asyncio/queues.py
+++ b/contrib/tools/python3/Lib/asyncio/queues.py
@@ -33,9 +33,9 @@ class QueueShutDown(Exception):
class Queue(mixins._LoopBoundMixin):
"""A queue, useful for coordinating producer and consumer coroutines.
- If maxsize is less than or equal to zero, the queue size is infinite. If it
- is an integer greater than 0, then "await put()" will block when the
- queue reaches maxsize, until an item is removed by get().
+ If maxsize is less than or equal to zero, the queue size is infinite.
+ If it is an integer greater than 0, then "await put()" will block when
+ the queue reaches maxsize, until an item is removed by get().
Unlike queue.Queue, you can reliably know this Queue's size
with qsize(), since your single-threaded asyncio application won't be
@@ -174,8 +174,8 @@ class Queue(mixins._LoopBoundMixin):
If queue is empty, wait until an item is available.
- Raises QueueShutDown if the queue has been shut down and is empty, or
- if the queue has been shut down immediately.
+ Raises QueueShutDown if the queue has been shut down and is empty,
+ or if the queue has been shut down immediately.
"""
while self.empty():
if self._is_shutdown and self.empty():
@@ -203,10 +203,11 @@ class Queue(mixins._LoopBoundMixin):
def get_nowait(self):
"""Remove and return an item from the queue.
- Return an item if one is immediately available, else raise QueueEmpty.
+ Return an item if one is immediately available, else raise
+ QueueEmpty.
- Raises QueueShutDown if the queue has been shut down and is empty, or
- if the queue has been shut down immediately.
+ Raises QueueShutDown if the queue has been shut down and is empty,
+ or if the queue has been shut down immediately.
"""
if self.empty():
if self._is_shutdown:
@@ -223,12 +224,12 @@ class Queue(mixins._LoopBoundMixin):
a subsequent call to task_done() tells the queue that the processing
on the task is complete.
- If a join() is currently blocking, it will resume when all items have
- been processed (meaning that a task_done() call was received for every
- item that had been put() into the queue).
+ If a join() is currently blocking, it will resume when all items
+ have been processed (meaning that a task_done() call was received
+ for every item that had been put() into the queue).
- Raises ValueError if called more times than there were items placed in
- the queue.
+ Raises ValueError if called more times than there were items placed
+ in the queue.
"""
if self._unfinished_tasks <= 0:
raise ValueError('task_done() called too many times')
@@ -239,10 +240,11 @@ class Queue(mixins._LoopBoundMixin):
async def join(self):
"""Block until all items in the queue have been gotten and processed.
- The count of unfinished tasks goes up whenever an item is added to the
- queue. The count goes down whenever a consumer calls task_done() to
- indicate that the item was retrieved and all work on it is complete.
- When the count of unfinished tasks drops to zero, join() unblocks.
+ The count of unfinished tasks goes up whenever an item is added to
+ the queue. The count goes down whenever a consumer calls
+ task_done() to indicate that the item was retrieved and all work on
+ it is complete. When the count of unfinished tasks drops to zero,
+ join() unblocks.
"""
if self._unfinished_tasks > 0:
await self._finished.wait()
diff --git a/contrib/tools/python3/Lib/asyncio/runners.py b/contrib/tools/python3/Lib/asyncio/runners.py
index 102ae78021b..c7bfdad319f 100644
--- a/contrib/tools/python3/Lib/asyncio/runners.py
+++ b/contrib/tools/python3/Lib/asyncio/runners.py
@@ -34,7 +34,8 @@ class Runner:
with asyncio.Runner(debug=True) as runner:
runner.run(main())
- The run() method can be called multiple times within the runner's context.
+ The run() method can be called multiple times within the runner's
+ context.
This can be useful for interactive console (e.g. IPython),
unittest runners, console tools, -- everywhere when async code
diff --git a/contrib/tools/python3/Lib/asyncio/selector_events.py b/contrib/tools/python3/Lib/asyncio/selector_events.py
index ff7e16df3c6..7c2062e3dd5 100644
--- a/contrib/tools/python3/Lib/asyncio/selector_events.py
+++ b/contrib/tools/python3/Lib/asyncio/selector_events.py
@@ -530,11 +530,12 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
async def sock_sendall(self, sock, data):
"""Send data to the socket.
- The socket must be connected to a remote socket. This method continues
- to send data from data until either all data has been sent or an
- error occurs. None is returned on success. On error, an exception is
- raised, and there is no way to determine how much data, if any, was
- successfully processed by the receiving end of the connection.
+ The socket must be connected to a remote socket. This method
+ continues to send data from data until either all data has been
+ sent or an error occurs. None is returned on success. On error,
+ an exception is raised, and there is no way to determine how much
+ data, if any, was successfully processed by the receiving end of
+ the connection.
"""
base_events._check_ssl_socket(sock)
if self._debug and sock.gettimeout() != 0:
@@ -583,11 +584,12 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
async def sock_sendto(self, sock, data, address):
"""Send data to the socket.
- The socket must be connected to a remote socket. This method continues
- to send data from data until either all data has been sent or an
- error occurs. None is returned on success. On error, an exception is
- raised, and there is no way to determine how much data, if any, was
- successfully processed by the receiving end of the connection.
+ The socket must be connected to a remote socket. This method
+ continues to send data from data until either all data has been
+ sent or an error occurs. None is returned on success. On error,
+ an exception is raised, and there is no way to determine how much
+ data, if any, was successfully processed by the receiving end of
+ the connection.
"""
base_events._check_ssl_socket(sock)
if self._debug and sock.gettimeout() != 0:
@@ -698,10 +700,11 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
async def sock_accept(self, sock):
"""Accept a connection.
- The socket must be bound to an address and listening for connections.
- The return value is a pair (conn, address) where conn is a new socket
- object usable to send and receive data on the connection, and address
- is the address bound to the socket on the other end of the connection.
+ The socket must be bound to an address and listening for
+ connections. The return value is a pair (conn, address) where
+ conn is a new socket object usable to send and receive data on the
+ connection, and address is the address bound to the socket on the
+ other end of the connection.
"""
base_events._check_ssl_socket(sock)
if self._debug and sock.gettimeout() != 0:
diff --git a/contrib/tools/python3/Lib/asyncio/streams.py b/contrib/tools/python3/Lib/asyncio/streams.py
index 64aac4cc50d..dd8f6618623 100644
--- a/contrib/tools/python3/Lib/asyncio/streams.py
+++ b/contrib/tools/python3/Lib/asyncio/streams.py
@@ -541,17 +541,17 @@ class StreamReader:
self._waiter = None
async def readline(self):
- """Read chunk of data from the stream until newline (b'\n') is found.
+ r"""Read chunk of data from the stream until newline (b'\n') is found.
- On success, return chunk that ends with newline. If only partial
+ On success, return chunk that ends with newline. If only partial
line can be read due to EOF, return incomplete line without
- terminating newline. When EOF was reached while no bytes read, empty
- bytes object is returned.
+ terminating newline. When EOF was reached while no bytes read,
+ empty bytes object is returned.
- If limit is reached, ValueError will be raised. In that case, if
+ If limit is reached, ValueError will be raised. In that case, if
newline was found, complete line including newline will be removed
- from internal buffer. Else, internal buffer will be cleared. Limit is
- compared against part of the line without newline.
+ from internal buffer. Else, internal buffer will be cleared.
+ Limit is compared against part of the line without newline.
If stream was paused, this function will automatically resume it if
needed.
diff --git a/contrib/tools/python3/Lib/asyncio/tasks.py b/contrib/tools/python3/Lib/asyncio/tasks.py
index dadcb5b5f36..e5e7d3e4aa9 100644
--- a/contrib/tools/python3/Lib/asyncio/tasks.py
+++ b/contrib/tools/python3/Lib/asyncio/tasks.py
@@ -640,10 +640,11 @@ def as_completed(fs, *, timeout=None):
Run the supplied awaitables concurrently. The returned object can be
iterated to obtain the results of the awaitables as they finish.
- The object returned can be iterated as an asynchronous iterator or a plain
- iterator. When asynchronous iteration is used, the originally-supplied
- awaitables are yielded if they are tasks or futures. This makes it easy to
- correlate previously-scheduled tasks with their results:
+ The object returned can be iterated as an asynchronous iterator or
+ a plain iterator. When asynchronous iteration is used, the
+ originally-supplied awaitables are yielded if they are tasks or
+ futures. This makes it easy to correlate previously-scheduled tasks
+ with their results:
ipv4_connect = create_task(open_connection("127.0.0.1", 80))
ipv6_connect = create_task(open_connection("::1", 80))
@@ -659,26 +660,27 @@ def as_completed(fs, *, timeout=None):
else:
print("IPv4 connection established.")
- During asynchronous iteration, implicitly-created tasks will be yielded for
- supplied awaitables that aren't tasks or futures.
+ During asynchronous iteration, implicitly-created tasks will be
+ yielded for supplied awaitables that aren't tasks or futures.
- When used as a plain iterator, each iteration yields a new coroutine that
- returns the result or raises the exception of the next completed awaitable.
- This pattern is compatible with Python versions older than 3.13:
+ When used as a plain iterator, each iteration yields a new coroutine
+ that returns the result or raises the exception of the next completed
+ awaitable. This pattern is compatible with Python versions older than
+ 3.13:
ipv4_connect = create_task(open_connection("127.0.0.1", 80))
ipv6_connect = create_task(open_connection("::1", 80))
tasks = [ipv4_connect, ipv6_connect]
for next_connect in as_completed(tasks):
- # next_connect is not one of the original task objects. It must be
- # awaited to obtain the result value or raise the exception of the
- # awaitable that finishes next.
+ # next_connect is not one of the original task objects. It must
+ # be awaited to obtain the result value or raise the exception
+ # of the awaitable that finishes next.
reader, writer = await next_connect
- A TimeoutError is raised if the timeout occurs before all awaitables are
- done. This is raised by the async for loop during asynchronous iteration or
- by the coroutines yielded during plain iteration.
+ A TimeoutError is raised if the timeout occurs before all awaitables
+ are done. This is raised by the async for loop during asynchronous
+ iteration or by the coroutines yielded during plain iteration.
"""
if inspect.isawaitable(fs):
raise TypeError(
@@ -1007,21 +1009,22 @@ def run_coroutine_threadsafe(coro, loop):
def create_eager_task_factory(custom_task_constructor):
"""Create a function suitable for use as a task factory on an event-loop.
- Example usage:
+ Example usage:
- loop.set_task_factory(
- asyncio.create_eager_task_factory(my_task_constructor))
+ loop.set_task_factory(
+ asyncio.create_eager_task_factory(my_task_constructor))
- Now, tasks created will be started immediately (rather than being first
- scheduled to an event loop). The constructor argument can be any callable
- that returns a Task-compatible object and has a signature compatible
- with `Task.__init__`; it must have the `eager_start` keyword argument.
+ Now, tasks created will be started immediately (rather than being first
+ scheduled to an event loop). The constructor argument can be any
+ callable that returns a Task-compatible object and has a signature
+ compatible with `Task.__init__`; it must have the `eager_start`
+ keyword argument.
- Most applications will use `Task` for `custom_task_constructor` and in
- this case there's no need to call `create_eager_task_factory()`
- directly. Instead the global `eager_task_factory` instance can be
- used. E.g. `loop.set_task_factory(asyncio.eager_task_factory)`.
- """
+ Most applications will use `Task` for `custom_task_constructor` and in
+ this case there's no need to call `create_eager_task_factory()`
+ directly. Instead the global `eager_task_factory` instance can be
+ used. E.g. `loop.set_task_factory(asyncio.eager_task_factory)`.
+ """
def factory(loop, coro, *, name=None, context=None):
return custom_task_constructor(
diff --git a/contrib/tools/python3/Lib/asyncio/threads.py b/contrib/tools/python3/Lib/asyncio/threads.py
index db048a8231d..5001351b097 100644
--- a/contrib/tools/python3/Lib/asyncio/threads.py
+++ b/contrib/tools/python3/Lib/asyncio/threads.py
@@ -17,7 +17,8 @@ async def to_thread(func, /, *args, **kwargs):
allowing context variables from the main thread to be accessed in the
separate thread.
- Return a coroutine that can be awaited to get the eventual result of *func*.
+ Return a coroutine that can be awaited to get the eventual result of
+ *func*.
"""
loop = events.get_running_loop()
ctx = contextvars.copy_context()
diff --git a/contrib/tools/python3/Lib/asyncio/timeouts.py b/contrib/tools/python3/Lib/asyncio/timeouts.py
index e6f5100691d..7ac664be47c 100644
--- a/contrib/tools/python3/Lib/asyncio/timeouts.py
+++ b/contrib/tools/python3/Lib/asyncio/timeouts.py
@@ -27,7 +27,8 @@ class _State(enum.Enum):
class Timeout:
"""Asynchronous context manager for cancelling overdue coroutines.
- Use `timeout()` or `timeout_at()` rather than instantiating this class directly.
+ Use `timeout()` or `timeout_at()` rather than instantiating this class
+ directly.
"""
def __init__(self, when: Optional[float]) -> None:
diff --git a/contrib/tools/python3/Lib/asyncio/unix_events.py b/contrib/tools/python3/Lib/asyncio/unix_events.py
index 41ccf1b78fb..9222a8769e9 100644
--- a/contrib/tools/python3/Lib/asyncio/unix_events.py
+++ b/contrib/tools/python3/Lib/asyncio/unix_events.py
@@ -58,7 +58,8 @@ def waitstatus_to_exitcode(status):
class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
"""Unix event loop.
- Adds signal handling and UNIX Domain Socket support to SelectorEventLoop.
+ Adds signal handling and UNIX Domain Socket support to
+ SelectorEventLoop.
"""
def __init__(self, selector=None):
@@ -395,12 +396,12 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
# order to simplify the common case.
self.remove_writer(registered_fd)
if fut.cancelled():
- self._sock_sendfile_update_filepos(fileno, offset, total_sent)
+ self._sock_sendfile_update_filepos(fileno, offset)
return
if count:
blocksize = count - total_sent
if blocksize <= 0:
- self._sock_sendfile_update_filepos(fileno, offset, total_sent)
+ self._sock_sendfile_update_filepos(fileno, offset)
fut.set_result(total_sent)
return
@@ -434,20 +435,20 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
# plain send().
err = exceptions.SendfileNotAvailableError(
"os.sendfile call failed")
- self._sock_sendfile_update_filepos(fileno, offset, total_sent)
+ self._sock_sendfile_update_filepos(fileno, offset)
fut.set_exception(err)
else:
- self._sock_sendfile_update_filepos(fileno, offset, total_sent)
+ self._sock_sendfile_update_filepos(fileno, offset)
fut.set_exception(exc)
except (SystemExit, KeyboardInterrupt):
raise
except BaseException as exc:
- self._sock_sendfile_update_filepos(fileno, offset, total_sent)
+ self._sock_sendfile_update_filepos(fileno, offset)
fut.set_exception(exc)
else:
if sent == 0:
# EOF
- self._sock_sendfile_update_filepos(fileno, offset, total_sent)
+ self._sock_sendfile_update_filepos(fileno, offset)
fut.set_result(total_sent)
else:
offset += sent
@@ -458,9 +459,9 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
fd, sock, fileno,
offset, count, blocksize, total_sent)
- def _sock_sendfile_update_filepos(self, fileno, offset, total_sent):
- if total_sent > 0:
- os.lseek(fileno, offset, os.SEEK_SET)
+ def _sock_sendfile_update_filepos(self, fileno, offset):
+ # After this helper runs, the source fd's lseek pointer is at offset."
+ os.lseek(fileno, offset, os.SEEK_SET)
def _sock_add_cancellation_callback(self, fut, sock):
def cb(fut):
diff --git a/contrib/tools/python3/Lib/asyncio/windows_events.py b/contrib/tools/python3/Lib/asyncio/windows_events.py
index bf99bc271c7..a36832f7f9f 100644
--- a/contrib/tools/python3/Lib/asyncio/windows_events.py
+++ b/contrib/tools/python3/Lib/asyncio/windows_events.py
@@ -610,6 +610,9 @@ class IocpProactor:
ov = _overlapped.Overlapped(NULL)
offset_low = offset & 0xffff_ffff
offset_high = (offset >> 32) & 0xffff_ffff
+ # TransmitFile ignores OVERLAPPED.Offset for handles not opened with
+ # FILE_FLAG_OVERLAPPED, so seek the CRT file pointer to match.
+ file.seek(offset)
ov.TransmitFile(sock.fileno(),
msvcrt.get_osfhandle(file.fileno()),
offset_low, offset_high,
diff --git a/contrib/tools/python3/Lib/asyncio/windows_utils.py b/contrib/tools/python3/Lib/asyncio/windows_utils.py
index acd49441131..d6393f0b1ff 100644
--- a/contrib/tools/python3/Lib/asyncio/windows_utils.py
+++ b/contrib/tools/python3/Lib/asyncio/windows_utils.py
@@ -111,8 +111,9 @@ class PipeHandle:
def close(self, *, CloseHandle=_winapi.CloseHandle):
if self._handle is not None:
- CloseHandle(self._handle)
+ handle = self._handle
self._handle = None
+ CloseHandle(handle)
def __del__(self, _warn=warnings.warn):
if self._handle is not None:
diff --git a/contrib/tools/python3/Lib/base64.py b/contrib/tools/python3/Lib/base64.py
index 6636e06382f..888443c472c 100755
--- a/contrib/tools/python3/Lib/base64.py
+++ b/contrib/tools/python3/Lib/base64.py
@@ -328,17 +328,20 @@ def a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False):
foldspaces is an optional flag that uses the special short sequence 'y'
instead of 4 consecutive spaces (ASCII 0x20) as supported by 'btoa'. This
- feature is not supported by the "standard" Adobe encoding.
+ feature is not supported by the standard encoding used in PDF.
- wrapcol controls whether the output should have newline (b'\\n') characters
- added to it. If this is non-zero, each output line will be at most this
- many characters long, excluding the trailing newline.
+ If wrapcol is non-zero, insert a newline (b'\\n') character after at most
+ every wrapcol characters.
- pad controls whether the input is padded to a multiple of 4 before
- encoding. Note that the btoa implementation always pads.
+ pad controls whether zero-padding applied to the end of the input
+ is fully retained in the output encoding, as done by btoa,
+ producing an exact multiple of 5 bytes of output.
+
+ adobe controls whether the encoded byte sequence is framed with <~
+ and ~>, as in a PostScript base-85 string literal. Note that
+ while ASCII85Decode streams in PDF documents must be terminated
+ with ~>, they must not use a leading <~.
- adobe controls whether the encoded byte sequence is framed with <~ and ~>,
- which is used by the Adobe implementation.
"""
global _a85chars, _a85chars2
# Delay the initialization of tables to not waste memory
@@ -367,12 +370,14 @@ def a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False):
def a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v'):
"""Decode the Ascii85 encoded bytes-like object or ASCII string b.
- foldspaces is a flag that specifies whether the 'y' short sequence should be
- accepted as shorthand for 4 consecutive spaces (ASCII 0x20). This feature is
- not supported by the "standard" Adobe encoding.
+ foldspaces is a flag that specifies whether the 'y' short sequence
+ should be accepted as shorthand for 4 consecutive spaces (ASCII
+ 0x20). This feature is not supported by the standard Ascii85
+ encoding used in PDF and PostScript.
- adobe controls whether the input sequence is in Adobe Ascii85 format (i.e.
- is framed with <~ and ~>).
+ adobe controls whether the <~ and ~> markers are present. While
+ the leading <~ is not required, the input must end with ~>, or a
+ ValueError is raised.
ignorechars should be a byte string containing characters to ignore from the
input. This should only contain whitespace characters, and by default
@@ -445,8 +450,10 @@ _b85dec = None
def b85encode(b, pad=False):
"""Encode bytes-like object b in base85 format and return a bytes object.
- If pad is true, the input is padded with b'\\0' so its length is a multiple of
- 4 bytes before encoding.
+ The input is padded with b'\0' so its length is a multiple of 4
+ bytes before encoding. If pad is true, all the resulting
+ characters are retained in the output, which will always be a
+ multiple of 5 bytes.
"""
global _b85chars, _b85chars2
# Delay the initialization of tables to not waste memory
diff --git a/contrib/tools/python3/Lib/concurrent/futures/_base.py b/contrib/tools/python3/Lib/concurrent/futures/_base.py
index 7d69a5baead..d4819f19e5e 100644
--- a/contrib/tools/python3/Lib/concurrent/futures/_base.py
+++ b/contrib/tools/python3/Lib/concurrent/futures/_base.py
@@ -200,15 +200,15 @@ def as_completed(fs, timeout=None):
"""An iterator over the given futures that yields each as it completes.
Args:
- fs: The sequence of Futures (possibly created by different Executors) to
- iterate over.
- timeout: The maximum number of seconds to wait. If None, then there
- is no limit on the wait time.
+ fs: The sequence of Futures (possibly created by different
+ Executors) to iterate over.
+ timeout: The maximum number of seconds to wait. If None, then
+ there is no limit on the wait time.
Returns:
- An iterator that yields the given Futures as they complete (finished or
- cancelled). If any given Futures are duplicated, they will be returned
- once.
+ An iterator that yields the given Futures as they complete
+ (finished or cancelled). If any given Futures are duplicated,
+ they will be returned once.
Raises:
TimeoutError: If the entire result iterator could not be generated
@@ -264,19 +264,20 @@ def wait(fs, timeout=None, return_when=ALL_COMPLETED):
"""Wait for the futures in the given sequence to complete.
Args:
- fs: The sequence of Futures (possibly created by different Executors) to
- wait upon.
- timeout: The maximum number of seconds to wait. If None, then there
- is no limit on the wait time.
- return_when: Indicates when this function should return. The options
- are:
+ fs: The sequence of Futures (possibly created by different
+ Executors) to wait upon.
+ timeout: The maximum number of seconds to wait. If None, then
+ there is no limit on the wait time.
+ return_when: Indicates when this function should return.
+ The options are:
FIRST_COMPLETED - Return when any future finishes or is
cancelled.
FIRST_EXCEPTION - Return when any future finishes by raising an
- exception. If no future raises an exception
+ exception. If no future raises an exception
then it is equivalent to ALL_COMPLETED.
- ALL_COMPLETED - Return when all futures finish or are cancelled.
+ ALL_COMPLETED - Return when all futures finish or are
+ cancelled.
Returns:
A named 2-tuple of sets. The first set, named 'done', contains the
@@ -410,11 +411,12 @@ class Future(object):
Args:
fn: A callable that will be called with this future as its only
- argument when the future completes or is cancelled. The callable
- will always be called by a thread in the same process in which
- it was added. If the future has already completed or been
- cancelled then the callable will be called immediately. These
- callables are called in the order that they were added.
+ argument when the future completes or is cancelled. The
+ callable will always be called by a thread in the same
+ process in which it was added. If the future has already
+ completed or been cancelled then the callable will be
+ called immediately. These callables are called in the
+ order that they were added.
"""
with self._condition:
if self._state not in [CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED]:
@@ -429,17 +431,19 @@ class Future(object):
"""Return the result of the call that the future represents.
Args:
- timeout: The number of seconds to wait for the result if the future
- isn't done. If None, then there is no limit on the wait time.
+ timeout: The number of seconds to wait for the result if the
+ future isn't done. If None, then there is no limit on the
+ wait time.
Returns:
The result of the call that the future represents.
Raises:
CancelledError: If the future was cancelled.
- TimeoutError: If the future didn't finish executing before the given
- timeout.
- Exception: If the call raised then that exception will be raised.
+ TimeoutError: If the future didn't finish executing before the
+ given timeout.
+ Exception: If the call raised then that exception will be
+ raised.
"""
try:
with self._condition:
@@ -465,17 +469,17 @@ class Future(object):
Args:
timeout: The number of seconds to wait for the exception if the
- future isn't done. If None, then there is no limit on the wait
- time.
+ future isn't done. If None, then there is no limit on the
+ wait time.
Returns:
- The exception raised by the call that the future represents or None
- if the call completed without raising.
+ The exception raised by the call that the future represents or
+ None if the call completed without raising.
Raises:
CancelledError: If the future was cancelled.
- TimeoutError: If the future didn't finish executing before the given
- timeout.
+ TimeoutError: If the future didn't finish executing before the
+ given timeout.
"""
with self._condition:
@@ -500,22 +504,23 @@ class Future(object):
Should only be used by Executor implementations and unit tests.
If the future has been cancelled (cancel() was called and returned
- True) then any threads waiting on the future completing (though calls
- to as_completed() or wait()) are notified and False is returned.
+ True) then any threads waiting on the future completing (though
+ calls to as_completed() or wait()) are notified and False is
+ returned.
If the future was not cancelled then it is put in the running state
(future calls to running() will return True) and True is returned.
This method should be called by Executor implementations before
- executing the work associated with this future. If this method returns
- False then the work should not be executed.
+ executing the work associated with this future. If this method
+ returns False then the work should not be executed.
Returns:
False if the Future was cancelled, True otherwise.
Raises:
- RuntimeError: if this method was already called or if set_result()
- or set_exception() was called.
+ RuntimeError: if this method was already called or if
+ set_result() or set_exception() was called.
"""
with self._condition:
if self._state == CANCELLED:
@@ -572,8 +577,9 @@ class Executor(object):
def submit(self, fn, /, *args, **kwargs):
"""Submits a callable to be executed with the given arguments.
- Schedules the callable to be executed as fn(*args, **kwargs) and returns
- a Future instance representing the execution of the callable.
+ Schedules the callable to be executed as fn(*args, **kwargs) and
+ returns a Future instance representing the execution of the
+ callable.
Returns:
A Future representing the given call.
@@ -586,20 +592,20 @@ class Executor(object):
Args:
fn: A callable that will take as many arguments as there are
passed iterables.
- timeout: The maximum number of seconds to wait. If None, then there
- is no limit on the wait time.
- chunksize: The size of the chunks the iterable will be broken into
- before being passed to a child process. This argument is only
- used by ProcessPoolExecutor; it is ignored by
+ timeout: The maximum number of seconds to wait. If None, then
+ there is no limit on the wait time.
+ chunksize: The size of the chunks the iterable will be broken
+ into before being passed to a child process. This argument
+ is only used by ProcessPoolExecutor; it is ignored by
ThreadPoolExecutor.
Returns:
- An iterator equivalent to: map(func, *iterables) but the calls may
- be evaluated out-of-order.
+ An iterator equivalent to: map(func, *iterables) but the calls
+ may be evaluated out-of-order.
Raises:
- TimeoutError: If the entire result iterator could not be generated
- before the given timeout.
+ TimeoutError: If the entire result iterator could not be
+ generated before the given timeout.
Exception: If fn(*args) raises for any values.
"""
if timeout is not None:
@@ -632,8 +638,8 @@ class Executor(object):
Args:
wait: If True then shutdown will not return until all running
- futures have finished executing and the resources used by the
- executor have been reclaimed.
+ futures have finished executing and the resources used by
+ the executor have been reclaimed.
cancel_futures: If True then shutdown will cancel all pending
futures. Futures that are completed or running will not be
cancelled.
diff --git a/contrib/tools/python3/Lib/concurrent/futures/process.py b/contrib/tools/python3/Lib/concurrent/futures/process.py
index 0dee8303ba2..8ff717f5e00 100644
--- a/contrib/tools/python3/Lib/concurrent/futures/process.py
+++ b/contrib/tools/python3/Lib/concurrent/futures/process.py
@@ -634,19 +634,21 @@ class ProcessPoolExecutor(_base.Executor):
Args:
max_workers: The maximum number of processes that can be used to
- execute the given calls. If None or not given then as many
- worker processes will be created as the machine has processors.
- mp_context: A multiprocessing context to launch the workers created
- using the multiprocessing.get_context('start method') API. This
- object should provide SimpleQueue, Queue and Process.
+ execute the given calls. If None or not given then as many
+ worker processes will be created as the machine has
+ processors.
+ mp_context: A multiprocessing context to launch the workers
+ created using the multiprocessing.get_context('start method')
+ API. This object should provide SimpleQueue, Queue and
+ Process.
initializer: A callable used to initialize worker processes.
initargs: A tuple of arguments to pass to the initializer.
- max_tasks_per_child: The maximum number of tasks a worker process
- can complete before it will exit and be replaced with a fresh
- worker process. The default of None means worker process will
- live as long as the executor. Requires a non-'fork' mp_context
- start method. When given, we default to using 'spawn' if no
- mp_context is supplied.
+ max_tasks_per_child: The maximum number of tasks a worker
+ process can complete before it will exit and be replaced
+ with a fresh worker process. The default of None means
+ worker process will live as long as the executor. Requires
+ a non-'fork' mp_context start method. When given, we
+ default to using 'spawn' if no mp_context is supplied.
"""
_check_system_limits()
@@ -816,19 +818,20 @@ class ProcessPoolExecutor(_base.Executor):
Args:
fn: A callable that will take as many arguments as there are
passed iterables.
- timeout: The maximum number of seconds to wait. If None, then there
- is no limit on the wait time.
- chunksize: If greater than one, the iterables will be chopped into
- chunks of size chunksize and submitted to the process pool.
- If set to one, the items in the list will be sent one at a time.
+ timeout: The maximum number of seconds to wait. If None, then
+ there is no limit on the wait time.
+ chunksize: If greater than one, the iterables will be chopped
+ into chunks of size chunksize and submitted to the process
+ pool. If set to one, the items in the list will be sent
+ one at a time.
Returns:
- An iterator equivalent to: map(func, *iterables) but the calls may
- be evaluated out-of-order.
+ An iterator equivalent to: map(func, *iterables) but the calls
+ may be evaluated out-of-order.
Raises:
- TimeoutError: If the entire result iterator could not be generated
- before the given timeout.
+ TimeoutError: If the entire result iterator could not be
+ generated before the given timeout.
Exception: If fn(*args) raises for any values.
"""
if chunksize < 1:
diff --git a/contrib/tools/python3/Lib/configparser.py b/contrib/tools/python3/Lib/configparser.py
index 05b86acb919..3968ac45eed 100644
--- a/contrib/tools/python3/Lib/configparser.py
+++ b/contrib/tools/python3/Lib/configparser.py
@@ -316,12 +316,15 @@ class ParsingError(Error):
def append(self, lineno, line):
self.errors.append((lineno, line))
- self.message += '\n\t[line %2d]: %s' % (lineno, repr(line))
+ self.message += f'\n\t[line {lineno:2d}]: {line!r}'
def combine(self, others):
+ messages = [self.message]
for other in others:
- for error in other.errors:
- self.append(*error)
+ for lineno, line in other.errors:
+ self.errors.append((lineno, line))
+ messages.append(f'\n\t[line {lineno:2d}]: {line!r}')
+ self.message = "".join(messages)
return self
@staticmethod
@@ -597,7 +600,9 @@ class RawConfigParser(MutableMapping):
\] # ]
"""
_OPT_TMPL = r"""
- (?P<option>.*?) # very permissive!
+ (?P<option> # very permissive!
+ (?:(?!{delim})\S)* # non-delimiter non-whitespace
+ (?:\s+(?:(?!{delim})\S)+)*) # optionally more words
\s*(?P<vi>{delim})\s* # any number of space/tab,
# followed by any of the
# allowed delimiters,
@@ -605,7 +610,9 @@ class RawConfigParser(MutableMapping):
(?P<value>.*)$ # everything up to eol
"""
_OPT_NV_TMPL = r"""
- (?P<option>.*?) # very permissive!
+ (?P<option> # very permissive!
+ (?:(?!{delim})\S)* # non-delimiter non-whitespace
+ (?:\s+(?:(?!{delim})\S)+)*) # optionally more words
\s*(?: # any number of space/tab,
(?P<vi>{delim})\s* # optionally followed by
# any of the allowed
diff --git a/contrib/tools/python3/Lib/curses/textpad.py b/contrib/tools/python3/Lib/curses/textpad.py
index aa87061b8d7..3a98fd6043a 100644
--- a/contrib/tools/python3/Lib/curses/textpad.py
+++ b/contrib/tools/python3/Lib/curses/textpad.py
@@ -23,7 +23,8 @@ class Textbox:
Ctrl-A Go to left edge of window.
Ctrl-B Cursor left, wrapping to previous line if appropriate.
Ctrl-D Delete character under cursor.
- Ctrl-E Go to right edge (stripspaces off) or end of line (stripspaces on).
+ Ctrl-E Go to right edge (stripspaces off) or end of line
+ (stripspaces on).
Ctrl-F Cursor right, wrapping to next line when appropriate.
Ctrl-G Terminate, returning the window contents.
Ctrl-H Delete character backward.
@@ -34,11 +35,12 @@ class Textbox:
Ctrl-O Insert a blank line at cursor location.
Ctrl-P Cursor up; move up one line.
- Move operations do nothing if the cursor is at an edge where the movement
- is not possible. The following synonyms are supported where possible:
+ Move operations do nothing if the cursor is at an edge where the
+ movement is not possible. The following synonyms are supported where
+ possible:
- KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P, KEY_DOWN = Ctrl-N
- KEY_BACKSPACE = Ctrl-h
+ KEY_LEFT = Ctrl-B, KEY_RIGHT = Ctrl-F, KEY_UP = Ctrl-P,
+ KEY_DOWN = Ctrl-N, KEY_BACKSPACE = Ctrl-h
"""
def __init__(self, win, insert_mode=False):
self.win = win
diff --git a/contrib/tools/python3/Lib/dataclasses.py b/contrib/tools/python3/Lib/dataclasses.py
index 7883ce78e57..8703e076389 100644
--- a/contrib/tools/python3/Lib/dataclasses.py
+++ b/contrib/tools/python3/Lib/dataclasses.py
@@ -665,10 +665,10 @@ def _init_fn(fields, std_fields, kw_only_fields, frozen, has_post_init,
return_type=None)
-def _frozen_get_del_attr(cls, fields, func_builder):
- locals = {'cls': cls,
+def _frozen_set_del_attr(cls, fields, func_builder):
+ locals = {'__class__': cls,
'FrozenInstanceError': FrozenInstanceError}
- condition = 'type(self) is cls'
+ condition = 'type(self) is __class__'
if fields:
condition += ' or name in {' + ', '.join(repr(f.name) for f in fields) + '}'
@@ -676,14 +676,14 @@ def _frozen_get_del_attr(cls, fields, func_builder):
('self', 'name', 'value'),
(f' if {condition}:',
' raise FrozenInstanceError(f"cannot assign to field {name!r}")',
- f' super(cls, self).__setattr__(name, value)'),
+ f' super(__class__, self).__setattr__(name, value)'),
locals=locals,
overwrite_error=True)
func_builder.add_fn('__delattr__',
('self', 'name'),
(f' if {condition}:',
' raise FrozenInstanceError(f"cannot delete field {name!r}")',
- f' super(cls, self).__delattr__(name)'),
+ f' super(__class__, self).__delattr__(name)'),
locals=locals,
overwrite_error=True)
@@ -1141,7 +1141,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen,
overwrite_error='Consider using functools.total_ordering')
if frozen:
- _frozen_get_del_attr(cls, field_list, func_builder)
+ _frozen_set_del_attr(cls, field_list, func_builder)
# Decide if/how we're going to create a hash function.
hash_action = _hash_action[bool(unsafe_hash),
@@ -1219,6 +1219,35 @@ def _get_slots(cls):
raise TypeError(f"Slots of '{cls.__name__}' cannot be determined")
+def _update_func_cell_for__class__(f, oldcls, newcls):
+ # Returns True if we update a cell, else False.
+ if f is None:
+ # f will be None in the case of a property where not all of
+ # fget, fset, and fdel are used. Nothing to do in that case.
+ return False
+ try:
+ idx = f.__code__.co_freevars.index("__class__")
+ except ValueError:
+ # This function doesn't reference __class__, so nothing to do.
+ return False
+ # Fix the cell to point to the new class, if it's already pointing
+ # at the old class.
+ closure = f.__closure__[idx]
+
+ try:
+ contents = closure.cell_contents
+ except ValueError:
+ # Cell is empty
+ return False
+
+ # This check makes it so we avoid updating an incorrect cell if the
+ # class body contains a function that was defined in a different class.
+ if contents is oldcls:
+ closure.cell_contents = newcls
+ return True
+ return False
+
+
def _add_slots(cls, is_frozen, weakref_slot):
# Need to create a new class, since we can't set __slots__
# after a class has been created.
@@ -1260,18 +1289,37 @@ def _add_slots(cls, is_frozen, weakref_slot):
# And finally create the class.
qualname = getattr(cls, '__qualname__', None)
- cls = type(cls)(cls.__name__, cls.__bases__, cls_dict)
+ newcls = type(cls)(cls.__name__, cls.__bases__, cls_dict)
if qualname is not None:
- cls.__qualname__ = qualname
+ newcls.__qualname__ = qualname
if is_frozen:
# Need this for pickling frozen classes with slots.
if '__getstate__' not in cls_dict:
- cls.__getstate__ = _dataclass_getstate
+ newcls.__getstate__ = _dataclass_getstate
if '__setstate__' not in cls_dict:
- cls.__setstate__ = _dataclass_setstate
+ newcls.__setstate__ = _dataclass_setstate
- return cls
+ # Fix up any closures which reference __class__. This is used to
+ # fix zero argument super so that it points to the correct class
+ # (the newly created one, which we're returning) and not the
+ # original class. We can break out of this loop as soon as we
+ # make an update, since all closures for a class will share a
+ # given cell.
+ for member in newcls.__dict__.values():
+ # If this is a wrapped function, unwrap it.
+ member = inspect.unwrap(member)
+
+ if isinstance(member, types.FunctionType):
+ if _update_func_cell_for__class__(member, cls, newcls):
+ break
+ elif isinstance(member, property):
+ if (_update_func_cell_for__class__(member.fget, cls, newcls)
+ or _update_func_cell_for__class__(member.fset, cls, newcls)
+ or _update_func_cell_for__class__(member.fdel, cls, newcls)):
+ break
+
+ return newcls
def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False,
diff --git a/contrib/tools/python3/Lib/email/_header_value_parser.py b/contrib/tools/python3/Lib/email/_header_value_parser.py
index 03fedd99539..c02175e24e0 100644
--- a/contrib/tools/python3/Lib/email/_header_value_parser.py
+++ b/contrib/tools/python3/Lib/email/_header_value_parser.py
@@ -639,11 +639,11 @@ class LocalPart(TokenList):
for tok in self[0] + [DOT]:
if tok.token_type == 'cfws':
continue
- if (last_is_tl and tok.token_type == 'dot' and
+ if (last_is_tl and tok.token_type == 'dot' and last and
last[-1].token_type == 'cfws'):
res[-1] = TokenList(last[:-1])
is_tl = isinstance(tok, TokenList)
- if (is_tl and last.token_type == 'dot' and
+ if (is_tl and last.token_type == 'dot' and tok and
tok[0].token_type == 'cfws'):
res.append(TokenList(tok[1:]))
else:
@@ -1245,8 +1245,7 @@ def get_bare_quoted_string(value):
bare_quoted_string = BareQuotedString()
value = value[1:]
if value and value[0] == '"':
- token, value = get_qcontent(value)
- bare_quoted_string.append(token)
+ return bare_quoted_string, value[1:]
while value and value[0] != '"':
if value[0] in WSP:
token, value = get_fws(value)
@@ -1464,6 +1463,16 @@ def get_phrase(value):
else:
try:
token, value = get_word(value)
+ if (token[0].token_type == 'encoded-word'
+ and phrase
+ and phrase[-1].token_type == 'atom'
+ and len(phrase[-1]) > 1
+ and phrase[-1][-2].token_type == 'encoded-word'
+ and phrase[-1][-1].token_type == 'cfws'
+ and not phrase[-1][-1].comments
+ ):
+ # linear ws between ews needs special handing...
+ phrase[-1][-1] = EWWhiteSpaceTerminal(phrase[-1], 'fws')
except errors.HeaderParseError:
if value[0] in CFWS_LEADER:
token, value = get_cfws(value)
@@ -2059,12 +2068,10 @@ def get_address_list(value):
address_list.defects.append(errors.InvalidHeaderDefect(
"invalid address in address-list"))
if value and value[0] != ',':
- # Crap after address; treat it as an invalid mailbox.
- # The mailbox info will still be available.
- mailbox = address_list[-1][0]
- mailbox.token_type = 'invalid-mailbox'
+ # Crap after address: add it to the address list
+ # as an invalid mailbox
token, value = get_invalid_mailbox(value, ',')
- mailbox.extend(token)
+ address_list.append(Address([token]))
address_list.defects.append(errors.InvalidHeaderDefect(
"invalid address in address-list"))
if value: # Must be a , at this point.
diff --git a/contrib/tools/python3/Lib/email/_parseaddr.py b/contrib/tools/python3/Lib/email/_parseaddr.py
index 565af0cf361..fe63c7ee0c7 100644
--- a/contrib/tools/python3/Lib/email/_parseaddr.py
+++ b/contrib/tools/python3/Lib/email/_parseaddr.py
@@ -59,7 +59,7 @@ def _parsedate_tz(data):
The last (additional) element is the time zone offset in seconds, except if
the timezone was specified as -0000. In that case the last element is
- None. This indicates a UTC timestamp that explicitly declaims knowledge of
+ None. This indicates a UTC timestamp that explicitly disclaims knowledge of
the source timezone, as opposed to a +0000 timestamp that indicates the
source timezone really was UTC.
diff --git a/contrib/tools/python3/Lib/email/charset.py b/contrib/tools/python3/Lib/email/charset.py
index 043801107b6..db5d40e0288 100644
--- a/contrib/tools/python3/Lib/email/charset.py
+++ b/contrib/tools/python3/Lib/email/charset.py
@@ -93,8 +93,6 @@ ALIASES = {
# Map charsets to their Unicode codec strings.
CODEC_MAP = {
- 'gb2312': 'eucgb2312_cn',
- 'big5': 'big5_tw',
# Hack: We don't want *any* conversion for stuff marked us-ascii, as all
# sorts of garbage might be sent to us in the guise of 7-bit us-ascii.
# Let that stuff pass through without conversion to/from Unicode.
diff --git a/contrib/tools/python3/Lib/email/generator.py b/contrib/tools/python3/Lib/email/generator.py
index a03eb1fbbc9..444d7b0fae4 100644
--- a/contrib/tools/python3/Lib/email/generator.py
+++ b/contrib/tools/python3/Lib/email/generator.py
@@ -392,7 +392,7 @@ class Generator:
b = boundary
counter = 0
while True:
- cre = cls._compile_re('^--' + re.escape(b) + '(--)?$', re.MULTILINE)
+ cre = cls._compile_re('^--' + re.escape(b) + '(--)?\r?$', re.MULTILINE)
if not cre.search(text):
break
b = boundary + '.' + str(counter)
diff --git a/contrib/tools/python3/Lib/email/quoprimime.py b/contrib/tools/python3/Lib/email/quoprimime.py
index 27fcbb5a26e..a5a6eef0b6d 100644
--- a/contrib/tools/python3/Lib/email/quoprimime.py
+++ b/contrib/tools/python3/Lib/email/quoprimime.py
@@ -272,7 +272,7 @@ def decode(encoded, eol=NL):
decoded += eol
# Special case if original string did not end with eol
if encoded[-1] not in '\r\n' and decoded.endswith(eol):
- decoded = decoded[:-1]
+ decoded = decoded[:-len(eol)]
return decoded
diff --git a/contrib/tools/python3/Lib/encodings/aliases.py b/contrib/tools/python3/Lib/encodings/aliases.py
index 6a5ca046b5e..03645b8f5fa 100644
--- a/contrib/tools/python3/Lib/encodings/aliases.py
+++ b/contrib/tools/python3/Lib/encodings/aliases.py
@@ -71,6 +71,10 @@ aliases = {
# cp1140 codec
'1140' : 'cp1140',
+ 'cp01140' : 'cp1140',
+ 'csibm01140' : 'cp1140',
+ 'ebcdic_us_37_euro' : 'cp1140',
+ 'ibm01140' : 'cp1140',
'ibm1140' : 'cp1140',
# cp1250 codec
@@ -159,8 +163,12 @@ aliases = {
# cp858 codec
'858' : 'cp858',
+ 'cp00858' : 'cp858',
+ 'csibm00858' : 'cp858',
'csibm858' : 'cp858',
+ 'ibm00858' : 'cp858',
'ibm858' : 'cp858',
+ 'pc_multilingual_850_euro' : 'cp858',
# cp860 codec
'860' : 'cp860',
diff --git a/contrib/tools/python3/Lib/ensurepip/__init__.py b/contrib/tools/python3/Lib/ensurepip/__init__.py
index 9f4e64bc78b..d2f310a7c9f 100644
--- a/contrib/tools/python3/Lib/ensurepip/__init__.py
+++ b/contrib/tools/python3/Lib/ensurepip/__init__.py
@@ -10,7 +10,7 @@ from shutil import copy2
__all__ = ["version", "bootstrap"]
-_PIP_VERSION = "26.0.1"
+_PIP_VERSION = "26.1.2"
# Directory of system wheel packages. Some Linux distribution packaging
# policies recommend against bundling dependencies. For example, Fedora
diff --git a/contrib/tools/python3/Lib/enum.py b/contrib/tools/python3/Lib/enum.py
index 5e7b00654dd..dbf7bd343ab 100644
--- a/contrib/tools/python3/Lib/enum.py
+++ b/contrib/tools/python3/Lib/enum.py
@@ -697,9 +697,9 @@ class EnumType(type):
"""
Either returns an existing member, or creates a new enum class.
- This method is used both when an enum class is given a value to match
- to an enumeration member (i.e. Color(3)) and for the functional API
- (i.e. Color = Enum('Color', names='RED GREEN BLUE')).
+ This method is used both when an enum class is given a value to
+ match to an enumeration member (i.e. Color(3)) and for the
+ functional API (i.e. Color = Enum('Color', names='RED GREEN BLUE')).
The value lookup branch is chosen if the enum is final.
@@ -707,16 +707,17 @@ class EnumType(type):
`value` will be the name of the new class.
- `names` should be either a string of white-space/comma delimited names
- (values will start at `start`), or an iterator/mapping of name, value pairs.
+ `names` should be either a string of white-space/comma delimited
+ names (values will start at `start`), or an iterator/mapping of
+ name, value pairs.
`module` should be set to the module this class is being created in;
- if it is not set, an attempt to find that module will be made, but if
- it fails the class will not be picklable.
+ if it is not set, an attempt to find that module will be made, but
+ if it fails the class will not be picklable.
- `qualname` should be set to the actual location this class can be found
- at in its module; by default it is set to the global scope. If this is
- not correct, unpickling will fail in some circumstances.
+ `qualname` should be set to the actual location this class can be
+ found at in its module; by default it is set to the global scope.
+ If this is not correct, unpickling will fail in some circumstances.
`type`, if set, will be mixed in as the first base class.
"""
@@ -810,8 +811,8 @@ class EnumType(type):
"""
Returns a mapping of member name->value.
- This mapping lists all enum members, including aliases. Note that this
- is a read-only view of the internal mapping.
+ This mapping lists all enum members, including aliases. Note that
+ this is a read-only view of the internal mapping.
"""
return MappingProxyType(cls._member_map_)
diff --git a/contrib/tools/python3/Lib/ftplib.py b/contrib/tools/python3/Lib/ftplib.py
index 10c5d1ea08a..463da58de85 100644
--- a/contrib/tools/python3/Lib/ftplib.py
+++ b/contrib/tools/python3/Lib/ftplib.py
@@ -883,7 +883,16 @@ def ftpcp(source, sourcename, target, targetname = '', type = 'I'):
type = 'TYPE ' + type
source.voidcmd(type)
target.voidcmd(type)
- sourcehost, sourceport = parse227(source.sendcmd('PASV'))
+ # Don't trust the IPv4 address the source server advertises in its PASV
+ # reply: a malicious source could otherwise point the target's data
+ # connection at an arbitrary host (SSRF). A caller that needs the old
+ # behavior can set trust_server_pasv_ipv4_address on the source FTP
+ # object. See FTP.makepasv(), which applies the same rule.
+ untrusted_host, sourceport = parse227(source.sendcmd('PASV'))
+ if source.trust_server_pasv_ipv4_address:
+ sourcehost = untrusted_host
+ else:
+ sourcehost = source.sock.getpeername()[0]
target.sendport(sourcehost, sourceport)
# RFC 959: the user must "listen" [...] BEFORE sending the
# transfer request.
diff --git a/contrib/tools/python3/Lib/functools.py b/contrib/tools/python3/Lib/functools.py
index 0dee17e5bcd..9338df33a4f 100644
--- a/contrib/tools/python3/Lib/functools.py
+++ b/contrib/tools/python3/Lib/functools.py
@@ -507,16 +507,16 @@ def lru_cache(maxsize=128, typed=False):
If *maxsize* is set to None, the LRU features are disabled and the cache
can grow without bound.
- If *typed* is True, arguments of different types will be cached separately.
- For example, f(decimal.Decimal("3.0")) and f(3.0) will be treated as
- distinct calls with distinct results. Some types such as str and int may
- be cached separately even when typed is false.
+ If *typed* is True, arguments of different types will be cached
+ separately. For example, f(decimal.Decimal("3.0")) and f(3.0) will be
+ treated as distinct calls with distinct results. Some types such as
+ str and int may be cached separately even when typed is false.
Arguments to the cached function must be hashable.
View the cache statistics named tuple (hits, misses, maxsize, currsize)
- with f.cache_info(). Clear the cache and statistics with f.cache_clear().
- Access the underlying function with f.__wrapped__.
+ with f.cache_info(). Clear the cache and statistics with
+ f.cache_clear(). Access the underlying function with f.__wrapped__.
See: https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)
diff --git a/contrib/tools/python3/Lib/glob.py b/contrib/tools/python3/Lib/glob.py
index 3fec2aa97e6..64ac0ca94b2 100644
--- a/contrib/tools/python3/Lib/glob.py
+++ b/contrib/tools/python3/Lib/glob.py
@@ -25,17 +25,17 @@ def glob(pathname, *, root_dir=None, dir_fd=None, recursive=False,
The order of the returned list is undefined. Sort it if you need a
particular order.
- If `root_dir` is not None, it should be a path-like object specifying the
- root directory for searching. It has the same effect as changing the
- current directory before calling it (without actually
- changing it). If pathname is relative, the result will contain
- paths relative to `root_dir`.
+ If `root_dir` is not None, it should be a path-like object specifying
+ the root directory for searching. It has the same effect as changing
+ the current directory before calling it (without actually changing it).
+ If pathname is relative, the result will contain paths relative to
+ `root_dir`.
If `dir_fd` is not None, it should be a file descriptor referring to a
directory, and paths will then be relative to that directory.
- If `include_hidden` is true, the patterns '*', '?', '**' will match hidden
- directories.
+ If `include_hidden` is true, the patterns '*', '?', '**' will match
+ hidden directories.
If `recursive` is true, the pattern '**' will match any files and
zero or more directories and subdirectories.
@@ -56,16 +56,16 @@ def iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False,
particular order.
If `root_dir` is not None, it should be a path-like object specifying
- the root directory for searching. It has the same effect as changing
- the current directory before calling it (without actually
- changing it). If pathname is relative, the result will contain
- paths relative to `root_dir`.
+ the root directory for searching. It has the same effect as changing
+ the current directory before calling it (without actually changing it).
+ If pathname is relative, the result will contain paths relative to
+ `root_dir`.
If `dir_fd` is not None, it should be a file descriptor referring to a
directory, and paths will then be relative to that directory.
- If `include_hidden` is true, the patterns '*', '?', '**' will match hidden
- directories.
+ If `include_hidden` is true, the patterns '*', '?', '**' will match
+ hidden directories.
If `recursive` is true, the pattern '**' will match any files and
zero or more directories and subdirectories.
@@ -294,15 +294,15 @@ _no_recurse_symlinks = object()
def translate(pat, *, recursive=False, include_hidden=False, seps=None):
"""Translate a pathname with shell wildcards to a regular expression.
- If `recursive` is true, the pattern segment '**' will match any number of
- path segments.
+ If `recursive` is true, the pattern segment '**' will match any number
+ of path segments.
If `include_hidden` is true, wildcards can match path segments beginning
with a dot ('.').
If a sequence of separator characters is given to `seps`, they will be
- used to split the pattern into segments and match path separators. If not
- given, os.path.sep and os.path.altsep (where available) are used.
+ used to split the pattern into segments and match path separators. If
+ not given, os.path.sep and os.path.altsep (where available) are used.
"""
if not seps:
if os.path.altsep:
diff --git a/contrib/tools/python3/Lib/gzip.py b/contrib/tools/python3/Lib/gzip.py
index a550c20a7a0..cb13095da43 100644
--- a/contrib/tools/python3/Lib/gzip.py
+++ b/contrib/tools/python3/Lib/gzip.py
@@ -34,16 +34,16 @@ def open(filename, mode="rb", compresslevel=_COMPRESS_LEVEL_BEST,
encoding=None, errors=None, newline=None):
"""Open a gzip-compressed file in binary or text mode.
- The filename argument can be an actual filename (a str or bytes object), or
- an existing file object to read from or write to.
+ The filename argument can be an actual filename (a str or bytes object),
+ or an existing file object to read from or write to.
- The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or "ab" for
- binary mode, or "rt", "wt", "xt" or "at" for text mode. The default mode is
- "rb", and the default compresslevel is 9.
+ The mode argument can be "r", "rb", "w", "wb", "x", "xb", "a" or "ab"
+ for binary mode, or "rt", "wt", "xt" or "at" for text mode. The default
+ mode is "rb", and the default compresslevel is 9.
- For binary mode, this function is equivalent to the GzipFile constructor:
- GzipFile(filename, mode, compresslevel). In this case, the encoding, errors
- and newline arguments must not be provided.
+ For binary mode, this function is equivalent to the GzipFile
+ constructor: GzipFile(filename, mode, compresslevel). In this case,
+ the encoding, errors and newline arguments must not be provided.
For text mode, a GzipFile object is created, and wrapped in an
io.TextIOWrapper instance with the specified encoding, error handling
@@ -148,8 +148,8 @@ class GzipFile(_compression.BaseStream):
"""The GzipFile class simulates most of the methods of a file object with
the exception of the truncate() method.
- This class only supports opening files in binary mode. If you need to open a
- compressed file in text mode, use the gzip.open() function.
+ This class only supports opening files in binary mode. If you need to
+ open a compressed file in text mode, use the gzip.open() function.
"""
@@ -165,31 +165,33 @@ class GzipFile(_compression.BaseStream):
non-trivial value.
The new class instance is based on fileobj, which can be a regular
- file, an io.BytesIO object, or any other object which simulates a file.
- It defaults to None, in which case filename is opened to provide
- a file object.
+ file, an io.BytesIO object, or any other object which simulates
+ a file. It defaults to None, in which case filename is opened to
+ provide a file object.
When fileobj is not None, the filename argument is only used to be
included in the gzip file header, which may include the original
filename of the uncompressed file. It defaults to the filename of
fileobj, if discernible; otherwise, it defaults to the empty string,
- and in this case the original filename is not included in the header.
+ and in this case the original filename is not included in the
+ header.
- The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', or
- 'xb' depending on whether the file will be read or written. The default
- is the mode of fileobj if discernible; otherwise, the default is 'rb'.
- A mode of 'r' is equivalent to one of 'rb', and similarly for 'w' and
- 'wb', 'a' and 'ab', and 'x' and 'xb'.
+ The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', 'wb',
+ 'x', or 'xb' depending on whether the file will be read or written.
+ The default is the mode of fileobj if discernible; otherwise, the
+ default is 'rb'. A mode of 'r' is equivalent to one of 'rb', and
+ similarly for 'w' and 'wb', 'a' and 'ab', and 'x' and 'xb'.
- The compresslevel argument is an integer from 0 to 9 controlling the
- level of compression; 1 is fastest and produces the least compression,
- and 9 is slowest and produces the most compression. 0 is no compression
- at all. The default is 9.
+ The compresslevel argument is an integer from 0 to 9 controlling
+ the level of compression; 1 is fastest and produces the least
+ compression, and 9 is slowest and produces the most compression.
+ 0 is no compression at all. The default is 9.
- The optional mtime argument is the timestamp requested by gzip. The time
- is in Unix format, i.e., seconds since 00:00:00 UTC, January 1, 1970.
- If mtime is omitted or None, the current time is used. Use mtime = 0
- to generate a compressed stream that does not depend on creation time.
+ The optional mtime argument is the timestamp requested by gzip.
+ The time is in Unix format, i.e., seconds since 00:00:00 UTC,
+ January 1, 1970. If mtime is omitted or None, the current time
+ is used. Use mtime = 0 to generate a compressed stream that does
+ not depend on creation time.
"""
@@ -551,10 +553,10 @@ class _GzipReader(_compression.DecompressReader):
# Read a chunk of data from the file
if self._decompressor.needs_input:
buf = self._fp.read(READ_BUFFER_SIZE)
- uncompress = self._decompressor.decompress(buf, size)
else:
- uncompress = self._decompressor.decompress(b"", size)
+ buf = b""
+ uncompress = self._decompressor.decompress(buf, size)
if self._decompressor.unused_data != b"":
# Prepend the already read bytes to the fileobj so they can
# be seen by _read_eof() and _read_gzip_header()
diff --git a/contrib/tools/python3/Lib/http/client.py b/contrib/tools/python3/Lib/http/client.py
index dd5f4136e9e..c1ff4cef02f 100644
--- a/contrib/tools/python3/Lib/http/client.py
+++ b/contrib/tools/python3/Lib/http/client.py
@@ -972,13 +972,22 @@ class HTTPConnection:
return ip
def _tunnel(self):
+ if _contains_disallowed_url_pchar_re.search(self._tunnel_host):
+ raise ValueError('Tunnel host can\'t contain control characters %r'
+ % (self._tunnel_host,))
connect = b"CONNECT %s:%d %s\r\n" % (
self._wrap_ipv6(self._tunnel_host.encode("idna")),
self._tunnel_port,
self._http_vsn_str.encode("ascii"))
headers = [connect]
for header, value in self._tunnel_headers.items():
- headers.append(f"{header}: {value}\r\n".encode("latin-1"))
+ header_bytes = header.encode("latin-1")
+ value_bytes = value.encode("latin-1")
+ if not _is_legal_header_name(header_bytes):
+ raise ValueError('Invalid header name %r' % (header_bytes,))
+ if _is_illegal_header_value(value_bytes):
+ raise ValueError('Invalid header value %r' % (value_bytes,))
+ headers.append(b"%s: %s\r\n" % (header_bytes, value_bytes))
headers.append(b"\r\n")
# Making a single send() call instead of one per line encourages
# the host OS to use a more optimal packet size instead of
diff --git a/contrib/tools/python3/Lib/http/cookies.py b/contrib/tools/python3/Lib/http/cookies.py
index 63d119ad46c..2cffa2a9ad6 100644
--- a/contrib/tools/python3/Lib/http/cookies.py
+++ b/contrib/tools/python3/Lib/http/cookies.py
@@ -389,17 +389,21 @@ class Morsel(dict):
return '<%s: %s>' % (self.__class__.__name__, self.OutputString())
def js_output(self, attrs=None):
+ import urllib.parse
# Print javascript
output_string = self.OutputString(attrs)
if _has_control_character(output_string):
raise CookieError("Control characters are not allowed in cookies")
+ # Base64-encode value to avoid template
+ # injection in cookie values.
+ output_encoded = urllib.parse.quote(output_string, safe='', encoding='utf-8')
return """
<script type="text/javascript">
<!-- begin hiding
- document.cookie = \"%s\";
+ document.cookie = decodeURIComponent(\"%s\");
// end hiding -->
</script>
- """ % (output_string.replace('"', r'\"'))
+ """ % (output_encoded,)
def OutputString(self, attrs=None):
# Build up our result
diff --git a/contrib/tools/python3/Lib/imaplib.py b/contrib/tools/python3/Lib/imaplib.py
index 141e6398944..db16f3c802c 100644
--- a/contrib/tools/python3/Lib/imaplib.py
+++ b/contrib/tools/python3/Lib/imaplib.py
@@ -616,7 +616,7 @@ class IMAP4:
"""
typ, dat = self._simple_command('LOGIN', user, self._quote(password))
if typ != 'OK':
- raise self.error(dat[-1])
+ raise self.error(dat[-1].decode('UTF-8', 'replace'))
self.state = 'AUTH'
return typ, dat
diff --git a/contrib/tools/python3/Lib/inspect.py b/contrib/tools/python3/Lib/inspect.py
index 48f89e8171c..a10a5fd7001 100644
--- a/contrib/tools/python3/Lib/inspect.py
+++ b/contrib/tools/python3/Lib/inspect.py
@@ -1,7 +1,7 @@
"""Get useful information from live Python objects.
This module encapsulates the interface provided by the internal special
-attributes (co_*, im_*, tb_*, etc.) in a friendlier fashion.
+attributes (co_*, tb_*, etc.) in a friendlier fashion.
It also provides some help for examining source code and class layout.
Here are some of the useful functions provided by this module:
diff --git a/contrib/tools/python3/Lib/json/__init__.py b/contrib/tools/python3/Lib/json/__init__.py
index c7a6dcdf77e..a29e6bb58b4 100644
--- a/contrib/tools/python3/Lib/json/__init__.py
+++ b/contrib/tools/python3/Lib/json/__init__.py
@@ -143,8 +143,8 @@ def dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True,
If ``indent`` is a non-negative integer, then JSON array elements and
object members will be pretty-printed with that indent level. An indent
- level of 0 will only insert newlines. ``None`` is the most compact
- representation.
+ level of 0 will only insert newlines. ``None`` is the default and gives
+ a representation with no newlines inserted.
If specified, ``separators`` should be an ``(item_separator,
key_separator)`` tuple. The default is ``(', ', ': ')`` if *indent* is
@@ -207,8 +207,8 @@ def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
If ``indent`` is a non-negative integer, then JSON array elements and
object members will be pretty-printed with that indent level. An indent
- level of 0 will only insert newlines. ``None`` is the most compact
- representation.
+ level of 0 will only insert newlines. ``None`` is the default and gives
+ a representation with no newlines inserted.
If specified, ``separators`` should be an ``(item_separator,
key_separator)`` tuple. The default is ``(', ', ': ')`` if *indent* is
diff --git a/contrib/tools/python3/Lib/json/tool.py b/contrib/tools/python3/Lib/json/tool.py
index fdfc3372bcc..e132fc58900 100644
--- a/contrib/tools/python3/Lib/json/tool.py
+++ b/contrib/tools/python3/Lib/json/tool.py
@@ -63,7 +63,8 @@ def main():
infile = open(options.infile, encoding='utf-8')
try:
if options.json_lines:
- objs = (json.loads(line) for line in infile)
+ lines = infile.readlines()
+ objs = (json.loads(line) for line in lines)
else:
objs = (json.load(infile),)
finally:
diff --git a/contrib/tools/python3/Lib/locale.py b/contrib/tools/python3/Lib/locale.py
index db6d0abb26b..bcb6ac0f49a 100644
--- a/contrib/tools/python3/Lib/locale.py
+++ b/contrib/tools/python3/Lib/locale.py
@@ -1491,8 +1491,8 @@ locale_alias = {
# This maps Windows language identifiers to locale strings.
#
# This list has been updated from
-# http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_238z.asp
-# to include every locale up to Windows Vista.
+# https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/70feba9f-294e-491e-b6eb-56532684c37f
+# to include every locale up to protocol revision 16.0 (2024-04-23).
#
# NOTE: this mapping is incomplete. If your language is missing, please
# submit a bug report as detailed in the Python devguide at:
@@ -1502,10 +1502,15 @@ locale_alias = {
#
windows_locale = {
- 0x0436: "af_ZA", # Afrikaans
- 0x041c: "sq_AL", # Albanian
- 0x0484: "gsw_FR",# Alsatian - France
+ 0x0036: "af", # Afrikaans
+ 0x0436: "af_ZA", # Afrikaans - South Africa
+ 0x001c: "sq", # Albanian
+ 0x041c: "sq_AL", # Albanian - Albania
+ 0x0084: "gsw", # Alsatian
+ 0x0484: "gsw_FR", # Alsatian - France
+ 0x005e: "am", # Amharic
0x045e: "am_ET", # Amharic - Ethiopia
+ 0x0001: "ar", # Arabic
0x0401: "ar_SA", # Arabic - Saudi Arabia
0x0801: "ar_IQ", # Arabic - Iraq
0x0c01: "ar_EG", # Arabic - Egypt
@@ -1519,39 +1524,72 @@ windows_locale = {
0x2c01: "ar_JO", # Arabic - Jordan
0x3001: "ar_LB", # Arabic - Lebanon
0x3401: "ar_KW", # Arabic - Kuwait
- 0x3801: "ar_AE", # Arabic - United Arab Emirates
+ 0x3801: "ar_AE", # Arabic - U.A.E.
0x3c01: "ar_BH", # Arabic - Bahrain
0x4001: "ar_QA", # Arabic - Qatar
- 0x042b: "hy_AM", # Armenian
+ 0x002b: "hy", # Armenian
+ 0x042b: "hy_AM", # Armenian - Armenia
+ 0x004d: "as", # Assamese
0x044d: "as_IN", # Assamese - India
- 0x042c: "az_AZ", # Azeri - Latin
- 0x082c: "az_AZ", # Azeri - Cyrillic
- 0x046d: "ba_RU", # Bashkir
- 0x042d: "eu_ES", # Basque - Russia
- 0x0423: "be_BY", # Belarusian
- 0x0445: "bn_IN", # Begali
- 0x201a: "bs_BA", # Bosnian - Cyrillic
- 0x141a: "bs_BA", # Bosnian - Latin
+ 0x002c: "az", # Azerbaijani (Latin)
+ 0x742c: "az", # Azerbaijani (Cyrillic)
+ 0x782c: "az", # Azerbaijani (Latin)
+ 0x042c: "az_AZ", # Azerbaijani (Latin) - Azerbaijan
+ 0x0045: "bn", # Bangla
+ 0x0445: "bn_IN", # Bangla - India
+ 0x0845: "bn_BD", # Bangla - Bangladesh
+ 0x006d: "ba", # Bashkir
+ 0x046d: "ba_RU", # Bashkir - Russia
+ 0x002d: "eu", # Basque
+ 0x042d: "eu_ES", # Basque - Spain
+ 0x0023: "be", # Belarusian
+ 0x0423: "be_BY", # Belarusian - Belarus
+ 0x641a: "bs", # Bosnian (Cyrillic)
+ 0x681a: "bs", # Bosnian (Latin)
+ 0x141a: "bs_BA", # Bosnian (Latin) - Bosnia and Herzegovina
+ 0x201a: "bs_BA", # Bosnian (Cyrillic) - Bosnia and Herzegovina
+ 0x781a: "bs", # Bosnian (Latin)
+ 0x007e: "br", # Breton
0x047e: "br_FR", # Breton - France
- 0x0402: "bg_BG", # Bulgarian
-# 0x0455: "my_MM", # Burmese - Not supported
- 0x0403: "ca_ES", # Catalan
- 0x0004: "zh_CHS",# Chinese - Simplified
- 0x0404: "zh_TW", # Chinese - Taiwan
- 0x0804: "zh_CN", # Chinese - PRC
- 0x0c04: "zh_HK", # Chinese - Hong Kong S.A.R.
- 0x1004: "zh_SG", # Chinese - Singapore
- 0x1404: "zh_MO", # Chinese - Macao S.A.R.
- 0x7c04: "zh_CHT",# Chinese - Traditional
+ 0x0002: "bg", # Bulgarian
+ 0x0402: "bg_BG", # Bulgarian - Bulgaria
+ 0x0055: "my", # Burmese
+ 0x0455: "my_MM", # Burmese - Myanmar
+ 0x0003: "ca", # Catalan
+ 0x0403: "ca_ES", # Catalan - Spain
+ 0x0803: "ca_ES", # Valencian - Spain
+ 0x0092: "ku", # Central Kurdish
+ 0x7c92: "ku", # Central Kurdish
+ 0x0492: "ku_IQ", # Central Kurdish - Iraq
+ 0x005c: "chr", # Cherokee
+ 0x7c5c: "chr", # Cherokee
+ 0x045c: "chr_US", # Cherokee - United States
+ 0x0004: "zh", # Chinese (Simplified)
+ 0x7804: "zh", # Chinese (Simplified)
+ 0x7c04: "zh", # Chinese (Traditional)
+ 0x0404: "zh_TW", # Chinese (Traditional) - Taiwan
+ 0x0804: "zh_CN", # Chinese (Simplified) - People's Republic of China
+ 0x0c04: "zh_HK", # Chinese (Traditional) - Hong Kong S.A.R.
+ 0x1004: "zh_SG", # Chinese (Simplified) - Singapore
+ 0x1404: "zh_MO", # Chinese (Traditional) - Macao S.A.R.
+ 0x0083: "co", # Corsican
0x0483: "co_FR", # Corsican - France
- 0x041a: "hr_HR", # Croatian
- 0x101a: "hr_BA", # Croatian - Bosnia
- 0x0405: "cs_CZ", # Czech
- 0x0406: "da_DK", # Danish
- 0x048c: "gbz_AF",# Dari - Afghanistan
- 0x0465: "div_MV",# Divehi - Maldives
- 0x0413: "nl_NL", # Dutch - The Netherlands
+ 0x001a: "hr", # Croatian
+ 0x041a: "hr_HR", # Croatian - Croatia
+ 0x101a: "hr_BA", # Croatian (Latin) - Bosnia and Herzegovina
+ 0x0005: "cs", # Czech
+ 0x0405: "cs_CZ", # Czech - Czech Republic
+ 0x0006: "da", # Danish
+ 0x0406: "da_DK", # Danish - Denmark
+ 0x008c: "prs", # Dari
+ 0x048c: "prs_AF", # Dari - Afghanistan
+ 0x0065: "dv", # Divehi
+ 0x0465: "dv_MV", # Divehi - Maldives
+ 0x0013: "nl", # Dutch
+ 0x0413: "nl_NL", # Dutch - Netherlands
0x0813: "nl_BE", # Dutch - Belgium
+ 0x0c51: "dz_BT", # Dzongkha - Bhutan
+ 0x0009: "en", # English
0x0409: "en_US", # English - United States
0x0809: "en_GB", # English - United Kingdom
0x0c09: "en_AU", # English - Australia
@@ -1559,122 +1597,248 @@ windows_locale = {
0x1409: "en_NZ", # English - New Zealand
0x1809: "en_IE", # English - Ireland
0x1c09: "en_ZA", # English - South Africa
- 0x2009: "en_JA", # English - Jamaica
- 0x2409: "en_CB", # English - Caribbean
+ 0x2009: "en_JM", # English - Jamaica
0x2809: "en_BZ", # English - Belize
- 0x2c09: "en_TT", # English - Trinidad
+ 0x2c09: "en_TT", # English - Trinidad and Tobago
0x3009: "en_ZW", # English - Zimbabwe
- 0x3409: "en_PH", # English - Philippines
+ 0x3409: "en_PH", # English - Republic of the Philippines
+ 0x3c09: "en_HK", # English - Hong Kong
0x4009: "en_IN", # English - India
0x4409: "en_MY", # English - Malaysia
- 0x4809: "en_IN", # English - Singapore
- 0x0425: "et_EE", # Estonian
- 0x0438: "fo_FO", # Faroese
- 0x0464: "fil_PH",# Filipino
- 0x040b: "fi_FI", # Finnish
+ 0x4809: "en_SG", # English - Singapore
+ 0x4c09: "en_AE", # English - United Arab Emirates
+ 0x0025: "et", # Estonian
+ 0x0425: "et_EE", # Estonian - Estonia
+ 0x0038: "fo", # Faroese
+ 0x0438: "fo_FO", # Faroese - Faroe Islands
+ 0x0064: "fil", # Filipino
+ 0x0464: "fil_PH", # Filipino - Philippines
+ 0x000b: "fi", # Finnish
+ 0x040b: "fi_FI", # Finnish - Finland
+ 0x000c: "fr", # French
0x040c: "fr_FR", # French - France
0x080c: "fr_BE", # French - Belgium
0x0c0c: "fr_CA", # French - Canada
0x100c: "fr_CH", # French - Switzerland
0x140c: "fr_LU", # French - Luxembourg
- 0x180c: "fr_MC", # French - Monaco
+ 0x180c: "fr_MC", # French - Principality of Monaco
+ 0x1c0c: "fr_029", # French - Caribbean
+ 0x200c: "fr_RE", # French - Reunion
+ 0x240c: "fr_CD", # French - Congo, DRC
+ 0x280c: "fr_SN", # French - Senegal
+ 0x2c0c: "fr_CM", # French - Cameroon
+ 0x300c: "fr_CI", # French - Côte d'Ivoire
+ 0x340c: "fr_ML", # French - Mali
+ 0x380c: "fr_MA", # French - Morocco
+ 0x3c0c: "fr_HT", # French - Haiti
+ 0x0062: "fy", # Frisian
0x0462: "fy_NL", # Frisian - Netherlands
- 0x0456: "gl_ES", # Galician
- 0x0437: "ka_GE", # Georgian
+ 0x0067: "ff", # Fulah
+ 0x7c67: "ff", # Fulah (Latin)
+ 0x0467: "ff_NG",
+ 0x0867: "ff_SN", # Fulah - Senegal
+ 0x0056: "gl", # Galician
+ 0x0456: "gl_ES", # Galician - Spain
+ 0x0037: "ka", # Georgian
+ 0x0437: "ka_GE", # Georgian - Georgia
+ 0x0007: "de", # German
0x0407: "de_DE", # German - Germany
0x0807: "de_CH", # German - Switzerland
0x0c07: "de_AT", # German - Austria
0x1007: "de_LU", # German - Luxembourg
0x1407: "de_LI", # German - Liechtenstein
- 0x0408: "el_GR", # Greek
+ 0x0008: "el", # Greek
+ 0x0408: "el_GR", # Greek - Greece
+ 0x006f: "kl", # Greenlandic
0x046f: "kl_GL", # Greenlandic - Greenland
- 0x0447: "gu_IN", # Gujarati
- 0x0468: "ha_NG", # Hausa - Latin
- 0x040d: "he_IL", # Hebrew
- 0x0439: "hi_IN", # Hindi
- 0x040e: "hu_HU", # Hungarian
- 0x040f: "is_IS", # Icelandic
- 0x0421: "id_ID", # Indonesian
- 0x045d: "iu_CA", # Inuktitut - Syllabics
- 0x085d: "iu_CA", # Inuktitut - Latin
+ 0x0074: "gn", # Guarani
+ 0x0474: "gn_PY", # Guarani - Paraguay
+ 0x0047: "gu", # Gujarati
+ 0x0447: "gu_IN", # Gujarati - India
+ 0x0068: "ha", # Hausa (Latin)
+ 0x7c68: "ha", # Hausa (Latin)
+ 0x0468: "ha_NG", # Hausa (Latin) - Nigeria
+ 0x0075: "haw", # Hawaiian
+ 0x0475: "haw_US", # Hawaiian - United States
+ 0x000d: "he", # Hebrew
+ 0x040d: "he_IL", # Hebrew - Israel
+ 0x0039: "hi", # Hindi
+ 0x0439: "hi_IN", # Hindi - India
+ 0x000e: "hu", # Hungarian
+ 0x040e: "hu_HU", # Hungarian - Hungary
+ 0x000f: "is", # Icelandic
+ 0x040f: "is_IS", # Icelandic - Iceland
+ 0x0070: "ig", # Igbo
+ 0x0470: "ig_NG", # Igbo - Nigeria
+ 0x0021: "id", # Indonesian
+ 0x0421: "id_ID", # Indonesian - Indonesia
+ 0x005d: "iu", # Inuktitut (Latin)
+ 0x785d: "iu", # Inuktitut (Syllabics)
+ 0x7c5d: "iu", # Inuktitut (Latin)
+ 0x045d: "iu_CA", # Inuktitut (Syllabics) - Canada
+ 0x085d: "iu_CA", # Inuktitut (Latin) - Canada
+ 0x003c: "ga", # Irish
0x083c: "ga_IE", # Irish - Ireland
+ 0x0010: "it", # Italian
0x0410: "it_IT", # Italian - Italy
0x0810: "it_CH", # Italian - Switzerland
- 0x0411: "ja_JP", # Japanese
+ 0x0011: "ja", # Japanese
+ 0x0411: "ja_JP", # Japanese - Japan
+ 0x004b: "kn", # Kannada
0x044b: "kn_IN", # Kannada - India
- 0x043f: "kk_KZ", # Kazakh
- 0x0453: "kh_KH", # Khmer - Cambodia
- 0x0486: "qut_GT",# K'iche - Guatemala
+ 0x0471: "kr_NG", # Kanuri (Latin) - Nigeria
+ 0x0060: "ks", # Kashmiri
+ 0x0460: "ks", # Kashmiri - Perso_Arabic
+ 0x0860: "ks_IN", # Kashmiri (Devanagari) - India
+ 0x003f: "kk", # Kazakh
+ 0x043f: "kk_KZ", # Kazakh - Kazakhstan
+ 0x0053: "km", # Khmer
+ 0x0453: "km_KH", # Khmer - Cambodia
+ 0x0087: "rw", # Kinyarwanda
0x0487: "rw_RW", # Kinyarwanda - Rwanda
- 0x0457: "kok_IN",# Konkani
- 0x0412: "ko_KR", # Korean
- 0x0440: "ky_KG", # Kyrgyz
- 0x0454: "lo_LA", # Lao - Lao PDR
- 0x0426: "lv_LV", # Latvian
- 0x0427: "lt_LT", # Lithuanian
- 0x082e: "dsb_DE",# Lower Sorbian - Germany
- 0x046e: "lb_LU", # Luxembourgish
- 0x042f: "mk_MK", # FYROM Macedonian
+ 0x0041: "sw", # Kiswahili
+ 0x0441: "sw_KE", # Kiswahili - Kenya
+ 0x0057: "kok", # Konkani
+ 0x0457: "kok_IN", # Konkani - India
+ 0x0012: "ko", # Korean
+ 0x0412: "ko_KR", # Korean - Korea
+ 0x0040: "ky", # Kyrgyz
+ 0x0440: "ky_KG", # Kyrgyz - Kyrgyzstan
+ 0x0054: "lo", # Lao
+ 0x0454: "lo_LA", # Lao - Lao P.D.R.
+ 0x0476: "la_VA", # Latin - Vatican City
+ 0x0026: "lv", # Latvian
+ 0x0426: "lv_LV", # Latvian - Latvia
+ 0x0027: "lt", # Lithuanian
+ 0x0427: "lt_LT", # Lithuanian - Lithuania
+ 0x7c2e: "dsb", # Lower Sorbian
+ 0x082e: "dsb_DE", # Lower Sorbian - Germany
+ 0x006e: "lb", # Luxembourgish
+ 0x046e: "lb_LU", # Luxembourgish - Luxembourg
+ 0x002f: "mk", # Macedonian
+ 0x042f: "mk_MK", # Macedonian - North Macedonia
+ 0x003e: "ms", # Malay
0x043e: "ms_MY", # Malay - Malaysia
0x083e: "ms_BN", # Malay - Brunei Darussalam
+ 0x004c: "ml", # Malayalam
0x044c: "ml_IN", # Malayalam - India
- 0x043a: "mt_MT", # Maltese
- 0x0481: "mi_NZ", # Maori
- 0x047a: "arn_CL",# Mapudungun
- 0x044e: "mr_IN", # Marathi
- 0x047c: "moh_CA",# Mohawk - Canada
- 0x0450: "mn_MN", # Mongolian - Cyrillic
- 0x0850: "mn_CN", # Mongolian - PRC
- 0x0461: "ne_NP", # Nepali
- 0x0414: "nb_NO", # Norwegian - Bokmal
- 0x0814: "nn_NO", # Norwegian - Nynorsk
+ 0x003a: "mt", # Maltese
+ 0x043a: "mt_MT", # Maltese - Malta
+ 0x0081: "mi", # Maori
+ 0x0481: "mi_NZ", # Maori - New Zealand
+ 0x007a: "arn", # Mapudungun
+ 0x047a: "arn_CL", # Mapudungun - Chile
+ 0x004e: "mr", # Marathi
+ 0x044e: "mr_IN", # Marathi - India
+ 0x007c: "moh", # Mohawk
+ 0x047c: "moh_CA", # Mohawk - Canada
+ 0x0050: "mn", # Mongolian (Cyrillic)
+ 0x7850: "mn", # Mongolian (Cyrillic)
+ 0x7c50: "mn", # Mongolian (Traditional Mongolian)
+ 0x0450: "mn_MN", # Mongolian (Cyrillic) - Mongolia
+ 0x0c50: "mn_MN", # Mongolian (Traditional Mongolian) - Mongolia
+ 0x0061: "ne", # Nepali
+ 0x0461: "ne_NP", # Nepali - Nepal
+ 0x0861: "ne_IN", # Nepali - India
+ 0x0014: "no", # Norwegian (Bokmal)
+ 0x0414: "nb_NO", # Norwegian (Bokmal) - Norway
+ 0x0814: "nn_NO", # Norwegian (Nynorsk) - Norway
+ 0x7814: "nn", # Norwegian (Nynorsk)
+ 0x7c14: "nb", # Norwegian (Bokmal)
+ 0x0082: "oc", # Occitan
0x0482: "oc_FR", # Occitan - France
- 0x0448: "or_IN", # Oriya - India
+ 0x0048: "or", # Odia
+ 0x0448: "or_IN", # Odia - India
+ 0x0072: "om", # Oromo
+ 0x0472: "om_ET", # Oromo - Ethiopia
+ 0x0063: "ps", # Pashto
0x0463: "ps_AF", # Pashto - Afghanistan
- 0x0429: "fa_IR", # Persian
- 0x0415: "pl_PL", # Polish
+ 0x0029: "fa", # Persian
+ 0x0429: "fa_IR", # Persian - Iran
+ 0x0015: "pl", # Polish
+ 0x0415: "pl_PL", # Polish - Poland
+ 0x0016: "pt", # Portuguese
0x0416: "pt_BR", # Portuguese - Brazil
0x0816: "pt_PT", # Portuguese - Portugal
- 0x0446: "pa_IN", # Punjabi
- 0x046b: "quz_BO",# Quechua (Bolivia)
- 0x086b: "quz_EC",# Quechua (Ecuador)
- 0x0c6b: "quz_PE",# Quechua (Peru)
+ 0x0046: "pa", # Punjabi
+ 0x7c46: "pa", # Punjabi
+ 0x0446: "pa_IN", # Punjabi - India
+ 0x0846: "pa_PK", # Punjabi - Islamic Republic of Pakistan
+ 0x006b: "quz", # Quechua
+ 0x046b: "quz_BO", # Quechua - Bolivia
+ 0x086b: "quz_EC", # Quechua - Ecuador
+ 0x0c6b: "quz_PE", # Quechua - Peru
+ 0x0018: "ro", # Romanian
0x0418: "ro_RO", # Romanian - Romania
- 0x0417: "rm_CH", # Romansh
- 0x0419: "ru_RU", # Russian
- 0x243b: "smn_FI",# Sami Finland
- 0x103b: "smj_NO",# Sami Norway
- 0x143b: "smj_SE",# Sami Sweden
- 0x043b: "se_NO", # Sami Northern Norway
- 0x083b: "se_SE", # Sami Northern Sweden
- 0x0c3b: "se_FI", # Sami Northern Finland
- 0x203b: "sms_FI",# Sami Skolt
- 0x183b: "sma_NO",# Sami Southern Norway
- 0x1c3b: "sma_SE",# Sami Southern Sweden
- 0x044f: "sa_IN", # Sanskrit
- 0x0c1a: "sr_SP", # Serbian - Cyrillic
- 0x1c1a: "sr_BA", # Serbian - Bosnia Cyrillic
- 0x081a: "sr_SP", # Serbian - Latin
- 0x181a: "sr_BA", # Serbian - Bosnia Latin
+ 0x0818: "ro_MD", # Romanian - Moldova
+ 0x0017: "rm", # Romansh
+ 0x0417: "rm_CH", # Romansh - Switzerland
+ 0x0019: "ru", # Russian
+ 0x0419: "ru_RU", # Russian - Russia
+ 0x0819: "ru_MD", # Russian - Moldova
+ 0x0085: "sah", # Sakha
+ 0x0485: "sah_RU", # Sakha - Russia
+ 0x003b: "se", # Sami (Northern)
+ 0x043b: "se_NO", # Sami (Northern) - Norway
+ 0x083b: "se_SE", # Sami (Northern) - Sweden
+ 0x0c3b: "se_FI", # Sami (Northern) - Finland
+ 0x7c3b: "smj", # Sami (Lule)
+ 0x103b: "smj_NO", # Sami (Lule) - Norway
+ 0x143b: "smj_SE", # Sami (Lule) - Sweden
+ 0x783b: "sma", # Sami (Southern)
+ 0x183b: "sma_NO", # Sami (Southern) - Norway
+ 0x1c3b: "sma_SE", # Sami (Southern) - Sweden
+ 0x743b: "sms", # Sami (Skolt)
+ 0x203b: "sms_FI", # Sami (Skolt) - Finland
+ 0x703b: "smn", # Sami (Inari)
+ 0x243b: "smn_FI", # Sami (Inari) - Finland
+ 0x004f: "sa", # Sanskrit
+ 0x044f: "sa_IN", # Sanskrit - India
+ 0x0091: "gd", # Scottish Gaelic
+ 0x0491: "gd_GB", # Scottish Gaelic - United Kingdom
+ 0x6c1a: "sr", # Serbian (Cyrillic)
+ 0x701a: "sr", # Serbian (Latin)
+ 0x7c1a: "sr", # Serbian (Latin)
+ 0x081a: "sr_CS", # Serbian (Latin) - Serbia and Montenegro (Former)
+ 0x0c1a: "sr_CS", # Serbian (Cyrillic) - Serbia and Montenegro (Former)
+ 0x181a: "sr_BA", # Serbian (Latin) - Bosnia and Herzegovina
+ 0x1c1a: "sr_BA", # Serbian (Cyrillic) - Bosnia and Herzegovina
+ 0x241a: "sr_RS", # Serbian (Latin) - Serbia
+ 0x281a: "sr_RS", # Serbian (Cyrillic) - Serbia
+ 0x2c1a: "sr_ME", # Serbian (Latin) - Montenegro
+ 0x301a: "sr_ME", # Serbian (Cyrillic) - Montenegro
+ 0x006c: "nso", # Sesotho sa Leboa
+ 0x046c: "nso_ZA", # Sesotho sa Leboa - South Africa
+ 0x0032: "tn", # Setswana
+ 0x0432: "tn_ZA", # Setswana - South Africa
+ 0x0832: "tn_BW", # Setswana - Botswana
+ 0x0059: "sd", # Sindhi
+ 0x7c59: "sd", # Sindhi
+ 0x0859: "sd_PK", # Sindhi - Islamic Republic of Pakistan
+ 0x005b: "si", # Sinhala
0x045b: "si_LK", # Sinhala - Sri Lanka
- 0x046c: "ns_ZA", # Northern Sotho
- 0x0432: "tn_ZA", # Setswana - Southern Africa
- 0x041b: "sk_SK", # Slovak
- 0x0424: "sl_SI", # Slovenian
+ 0x001b: "sk", # Slovak
+ 0x041b: "sk_SK", # Slovak - Slovakia
+ 0x0024: "sl", # Slovenian
+ 0x0424: "sl_SI", # Slovenian - Slovenia
+ 0x0477: "so_SO", # Somali - Somalia
+ 0x0030: "st", # Sotho
+ 0x0430: "st_ZA", # Sotho - South Africa
+ 0x000a: "es", # Spanish
0x040a: "es_ES", # Spanish - Spain
0x080a: "es_MX", # Spanish - Mexico
- 0x0c0a: "es_ES", # Spanish - Spain (Modern)
+ 0x0c0a: "es_ES", # Spanish - Spain
0x100a: "es_GT", # Spanish - Guatemala
0x140a: "es_CR", # Spanish - Costa Rica
0x180a: "es_PA", # Spanish - Panama
0x1c0a: "es_DO", # Spanish - Dominican Republic
- 0x200a: "es_VE", # Spanish - Venezuela
+ 0x200a: "es_VE", # Spanish - Bolivarian Republic of Venezuela
0x240a: "es_CO", # Spanish - Colombia
0x280a: "es_PE", # Spanish - Peru
0x2c0a: "es_AR", # Spanish - Argentina
0x300a: "es_EC", # Spanish - Ecuador
0x340a: "es_CL", # Spanish - Chile
- 0x380a: "es_UR", # Spanish - Uruguay
+ 0x380a: "es_UY", # Spanish - Uruguay
0x3c0a: "es_PY", # Spanish - Paraguay
0x400a: "es_BO", # Spanish - Bolivia
0x440a: "es_SV", # Spanish - El Salvador
@@ -1682,36 +1846,87 @@ windows_locale = {
0x4c0a: "es_NI", # Spanish - Nicaragua
0x500a: "es_PR", # Spanish - Puerto Rico
0x540a: "es_US", # Spanish - United States
-# 0x0430: "", # Sutu - Not supported
- 0x0441: "sw_KE", # Swahili
+ 0x5c0a: "es_CU", # Spanish - Cuba
+ 0x001d: "sv", # Swedish
0x041d: "sv_SE", # Swedish - Sweden
0x081d: "sv_FI", # Swedish - Finland
- 0x045a: "syr_SY",# Syriac
- 0x0428: "tg_TJ", # Tajik - Cyrillic
- 0x085f: "tmz_DZ",# Tamazight - Latin
- 0x0449: "ta_IN", # Tamil
- 0x0444: "tt_RU", # Tatar
- 0x044a: "te_IN", # Telugu
- 0x041e: "th_TH", # Thai
- 0x0851: "bo_BT", # Tibetan - Bhutan
- 0x0451: "bo_CN", # Tibetan - PRC
- 0x041f: "tr_TR", # Turkish
- 0x0442: "tk_TM", # Turkmen - Cyrillic
- 0x0480: "ug_CN", # Uighur - Arabic
- 0x0422: "uk_UA", # Ukrainian
- 0x042e: "wen_DE",# Upper Sorbian - Germany
- 0x0420: "ur_PK", # Urdu
+ 0x005a: "syr", # Syriac
+ 0x045a: "syr_SY", # Syriac - Syria
+ 0x0028: "tg", # Tajik (Cyrillic)
+ 0x7c28: "tg", # Tajik (Cyrillic)
+ 0x0428: "tg_TJ", # Tajik (Cyrillic) - Tajikistan
+ 0x005f: "tzm", # Tamazight (Latin)
+ 0x785f: "tzm",
+ 0x7c5f: "tzm", # Tamazight (Latin)
+ 0x085f: "tzm_DZ", # Tamazight (Latin) - Algeria
+ 0x045f: "tzm_MA", # Central Atlas Tamazight (Arabic) - Morocco
+ 0x105f: "tzm_MA",
+ 0x0049: "ta", # Tamil
+ 0x0449: "ta_IN", # Tamil - India
+ 0x0849: "ta_LK", # Tamil - Sri Lanka
+ 0x0044: "tt", # Tatar
+ 0x0444: "tt_RU", # Tatar - Russia
+ 0x004a: "te", # Telugu
+ 0x044a: "te_IN", # Telugu - India
+ 0x001e: "th", # Thai
+ 0x041e: "th_TH", # Thai - Thailand
+ 0x0051: "bo", # Tibetan
+ 0x0451: "bo_CN", # Tibetan - People's Republic of China
+ 0x0073: "ti", # Tigrinya
+ 0x0473: "ti_ET", # Tigrinya - Ethiopia
+ 0x0873: "ti_ER", # Tigrinya - Eritrea
+ 0x0031: "ts", # Tsonga
+ 0x0431: "ts_ZA", # Tsonga - South Africa
+ 0x001f: "tr", # Turkish
+ 0x041f: "tr_TR", # Turkish - Turkey
+ 0x0042: "tk", # Turkmen
+ 0x0442: "tk_TM", # Turkmen - Turkmenistan
+ 0x0022: "uk", # Ukrainian
+ 0x0422: "uk_UA", # Ukrainian - Ukraine
+ 0x002e: "hsb", # Upper Sorbian
+ 0x042e: "hsb_DE", # Upper Sorbian - Germany
+ 0x0020: "ur", # Urdu
+ 0x0420: "ur_PK", # Urdu - Islamic Republic of Pakistan
0x0820: "ur_IN", # Urdu - India
- 0x0443: "uz_UZ", # Uzbek - Latin
- 0x0843: "uz_UZ", # Uzbek - Cyrillic
- 0x042a: "vi_VN", # Vietnamese
- 0x0452: "cy_GB", # Welsh
+ 0x0080: "ug", # Uyghur
+ 0x0480: "ug_CN", # Uyghur - People's Republic of China
+ 0x0043: "uz", # Uzbek (Latin)
+ 0x7843: "uz", # Uzbek (Cyrillic)
+ 0x7c43: "uz", # Uzbek (Latin)
+ 0x0443: "uz_UZ", # Uzbek (Latin) - Uzbekistan
+ 0x0033: "ve", # Venda
+ 0x0433: "ve_ZA", # Venda - South Africa
+ 0x002a: "vi", # Vietnamese
+ 0x042a: "vi_VN", # Vietnamese - Vietnam
+ 0x0052: "cy", # Welsh
+ 0x0452: "cy_GB", # Welsh - United Kingdom
+ 0x0088: "wo", # Wolof
0x0488: "wo_SN", # Wolof - Senegal
+ 0x0034: "xh", # Xhosa
0x0434: "xh_ZA", # Xhosa - South Africa
- 0x0485: "sah_RU",# Yakut - Cyrillic
- 0x0478: "ii_CN", # Yi - PRC
+ 0x0078: "ii", # Yi
+ 0x0478: "ii_CN", # Yi - People's Republic of China
+ 0x043d: "yi_001", # Yiddish - World
+ 0x006a: "yo", # Yoruba
0x046a: "yo_NG", # Yoruba - Nigeria
- 0x0435: "zu_ZA", # Zulu
+ 0x0035: "zu", # Zulu
+ 0x0435: "zu_ZA", # Zulu - South Africa
+ 0x0086: "qut",
+
+# 0x0001007f: "x-IV-mathan", # math alphanumeric sorting
+ 0x00010407: "de_DE",
+ 0x0001040e: "hu_HU",
+ 0x00010437: "ka_GE",
+ 0x00020804: "zh_CN",
+ 0x00021004: "zh_SG",
+ 0x00021404: "zh_MO",
+ 0x00030404: "zh_TW",
+ 0x00040404: "zh_TW",
+ 0x00040411: "ja_JP",
+ 0x00040c04: "zh_HK",
+ 0x00041404: "zh_MO",
+ 0x00050804: "zh_CN",
+ 0x00051004: "zh_SG",
}
def _print_locale():
diff --git a/contrib/tools/python3/Lib/multiprocessing/connection.py b/contrib/tools/python3/Lib/multiprocessing/connection.py
index efb9ea95ab4..2a0151dab80 100644
--- a/contrib/tools/python3/Lib/multiprocessing/connection.py
+++ b/contrib/tools/python3/Lib/multiprocessing/connection.py
@@ -75,7 +75,11 @@ def arbitrary_address(family):
if family == 'AF_INET':
return ('localhost', 0)
elif family == 'AF_UNIX':
- return tempfile.mktemp(prefix='sock-', dir=util.get_temp_dir())
+ # NOTE: util.get_temp_dir() is a 0o700 per-process directory. A
+ # mktemp-style ToC vs ToU concern is not important; bind() surfaces
+ # the extremely unlikely collision as EADDRINUSE.
+ return os.path.join(util.get_temp_dir(),
+ f'sock-{os.urandom(6).hex()}')
elif family == 'AF_PIPE':
return (r'\\.\pipe\pyc-%d-%d-%s' %
(os.getpid(), next(_mmap_counter), os.urandom(8).hex()))
diff --git a/contrib/tools/python3/Lib/multiprocessing/popen_fork.py b/contrib/tools/python3/Lib/multiprocessing/popen_fork.py
index a57ef6bdad5..05593737dbb 100644
--- a/contrib/tools/python3/Lib/multiprocessing/popen_fork.py
+++ b/contrib/tools/python3/Lib/multiprocessing/popen_fork.py
@@ -64,7 +64,17 @@ class Popen(object):
code = 1
parent_r, child_w = os.pipe()
child_r, parent_w = os.pipe()
- self.pid = os.fork()
+ # gh-146313: Tell the resource tracker's at-fork handler to keep
+ # the inherited pipe fd so this child reuses the parent's tracker
+ # (gh-80849) rather than closing it and launching its own.
+ from .resource_tracker import _fork_intent
+ _fork_intent.preserve_fd = True
+ try:
+ self.pid = os.fork()
+ finally:
+ # Reset in both parent and child so the flag does not leak
+ # into a subsequent raw os.fork() or nested Process launch.
+ _fork_intent.preserve_fd = False
if self.pid == 0:
try:
atexit._clear()
diff --git a/contrib/tools/python3/Lib/multiprocessing/resource_tracker.py b/contrib/tools/python3/Lib/multiprocessing/resource_tracker.py
index 22e3bbcf21b..028c1f60e59 100644
--- a/contrib/tools/python3/Lib/multiprocessing/resource_tracker.py
+++ b/contrib/tools/python3/Lib/multiprocessing/resource_tracker.py
@@ -20,6 +20,7 @@ import os
import signal
import sys
import threading
+import time
import warnings
from collections import deque
@@ -79,6 +80,10 @@ class ResourceTracker(object):
# The reader should understand all formats.
self._use_simple_format = True
+ # Set to True by _stop_locked() if the waitpid polling loop ran to
+ # its timeout without reaping the tracker. Exposed for tests.
+ self._waitpid_timed_out = False
+
def _reentrant_call_error(self):
# gh-109629: this happens if an explicit call to the ResourceTracker
# gets interrupted by a garbage collection, invoking a finalizer (*)
@@ -91,16 +96,51 @@ class ResourceTracker(object):
# making sure child processess are cleaned before ResourceTracker
# gets destructed.
# see https://github.com/python/cpython/issues/88887
- self._stop(use_blocking_lock=False)
+ # gh-146313: use a timeout to avoid deadlocking if a forked child
+ # still holds the pipe's write end open.
+ self._stop(use_blocking_lock=False, wait_timeout=1.0)
+
+ def _after_fork_in_child(self):
+ # gh-146313: Called in the child right after os.fork().
+ #
+ # The tracker process is a child of the *parent*, not of us, so we
+ # could never waitpid() it anyway. Clearing _pid means our __del__
+ # becomes a no-op (the early return for _pid is None).
+ #
+ # Whether we keep the inherited _fd depends on who forked us:
+ #
+ # - multiprocessing.Process with the 'fork' start method sets
+ # _fork_intent.preserve_fd before forking. The child keeps the
+ # fd and reuses the parent's tracker (gh-80849). This is safe
+ # because multiprocessing's atexit handler joins all children
+ # before the parent's __del__ runs, so by then the fd copies
+ # are gone and the parent can reap the tracker promptly.
+ #
+ # - A raw os.fork() leaves the flag unset. We close the fd in the child after forking so
+ # the parent's __del__ can reap the tracker without waiting
+ # for the child to exit. If we later need a tracker, ensure_running()
+ # will launch a fresh one.
+ self._lock._at_fork_reinit()
+ self._reentrant_messages.clear()
+ self._pid = None
+ self._exitcode = None
+ if (self._fd is not None and
+ not getattr(_fork_intent, 'preserve_fd', False)):
+ fd = self._fd
+ self._fd = None
+ try:
+ os.close(fd)
+ except OSError:
+ pass
- def _stop(self, use_blocking_lock=True):
+ def _stop(self, use_blocking_lock=True, wait_timeout=None):
if use_blocking_lock:
with self._lock:
- self._stop_locked()
+ self._stop_locked(wait_timeout=wait_timeout)
else:
acquired = self._lock.acquire(blocking=False)
try:
- self._stop_locked()
+ self._stop_locked(wait_timeout=wait_timeout)
finally:
if acquired:
self._lock.release()
@@ -110,6 +150,10 @@ class ResourceTracker(object):
close=os.close,
waitpid=os.waitpid,
waitstatus_to_exitcode=os.waitstatus_to_exitcode,
+ monotonic=time.monotonic,
+ sleep=time.sleep,
+ WNOHANG=getattr(os, 'WNOHANG', None),
+ wait_timeout=None,
):
# This shouldn't happen (it might when called by a finalizer)
# so we check for it anyway.
@@ -126,7 +170,30 @@ class ResourceTracker(object):
self._fd = None
try:
- _, status = waitpid(self._pid, 0)
+ if wait_timeout is None:
+ _, status = waitpid(self._pid, 0)
+ else:
+ # gh-146313: A forked child may still hold the pipe's write
+ # end open, preventing the tracker from seeing EOF and
+ # exiting. Poll with WNOHANG to avoid blocking forever.
+ deadline = monotonic() + wait_timeout
+ delay = 0.001
+ while True:
+ result_pid, status = waitpid(self._pid, WNOHANG)
+ if result_pid != 0:
+ break
+ remaining = deadline - monotonic()
+ if remaining <= 0:
+ # The tracker is still running; it will be
+ # reparented to PID 1 (or the nearest subreaper)
+ # when we exit, and reaped there once all pipe
+ # holders release their fd.
+ self._pid = None
+ self._exitcode = None
+ self._waitpid_timed_out = True
+ return
+ delay = min(delay * 2, remaining, 0.1)
+ sleep(delay)
except ChildProcessError:
self._pid = None
self._exitcode = None
@@ -312,12 +379,24 @@ class ResourceTracker(object):
self._ensure_running_and_write(msg)
+# gh-146313: Per-thread flag set by .popen_fork.Popen._launch() just before
+# os.fork(), telling _after_fork_in_child() to keep the inherited pipe fd so
+# the child can reuse this tracker (gh-80849). Unset for raw os.fork() calls,
+# where the child instead closes the fd so the parent's __del__ can reap the
+# tracker. Using threading.local() keeps multiple threads calling
+# popen_fork.Popen._launch() at once from clobbering eachothers intent.
+_fork_intent = threading.local()
+
_resource_tracker = ResourceTracker()
ensure_running = _resource_tracker.ensure_running
register = _resource_tracker.register
unregister = _resource_tracker.unregister
getfd = _resource_tracker.getfd
+# gh-146313: See _after_fork_in_child docstring.
+if hasattr(os, 'register_at_fork'):
+ os.register_at_fork(after_in_child=_resource_tracker._after_fork_in_child)
+
def _decode_message(line):
if line.startswith(b'{'):
diff --git a/contrib/tools/python3/Lib/ntpath.py b/contrib/tools/python3/Lib/ntpath.py
index 01f060e70be..eb127ec2632 100644
--- a/contrib/tools/python3/Lib/ntpath.py
+++ b/contrib/tools/python3/Lib/ntpath.py
@@ -152,12 +152,14 @@ def splitdrive(p):
It is always true that:
result[0] + result[1] == p
- If the path contained a drive letter, drive_or_unc will contain everything
- up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir")
+ If the path contained a drive letter, drive_or_unc will contain
+ everything up to and including the colon. e.g. splitdrive("c:/dir")
+ returns ("c:", "/dir")
- If the path contained a UNC path, the drive_or_unc will contain the host name
- and share up to but not including the fourth directory separator character.
- e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir")
+ If the path contained a UNC path, the drive_or_unc will contain the
+ host name and share up to but not including the fourth directory
+ separator character. e.g. splitdrive("//host/computer/dir") returns
+ ("//host/computer", "/dir")
Paths cannot contain both a drive letter and a UNC path.
@@ -222,8 +224,8 @@ except ImportError:
def split(p):
"""Split a pathname.
- Return tuple (head, tail) where tail is everything after the final slash.
- Either part may be empty."""
+ Return tuple (head, tail) where tail is everything after the final
+ slash. Either part may be empty."""
p = os.fspath(p)
seps = _get_bothseps(p)
d, r, p = splitroot(p)
diff --git a/contrib/tools/python3/Lib/pickle.py b/contrib/tools/python3/Lib/pickle.py
index 550f8675f2c..12da440b9f8 100644
--- a/contrib/tools/python3/Lib/pickle.py
+++ b/contrib/tools/python3/Lib/pickle.py
@@ -847,17 +847,11 @@ class _Pickler:
# Write data in-band
# XXX The C implementation avoids a copy here
buf = m.tobytes()
- in_memo = id(buf) in self.memo
if m.readonly:
- if in_memo:
- self._save_bytes_no_memo(buf)
- else:
- self.save_bytes(buf)
+ self._save_bytes_no_memo(buf)
else:
- if in_memo:
- self._save_bytearray_no_memo(buf)
- else:
- self.save_bytearray(buf)
+ self._save_bytearray_no_memo(buf)
+ self.memoize(obj)
else:
# Write data out-of-band
self.write(NEXT_BUFFER)
diff --git a/contrib/tools/python3/Lib/pydoc_data/module_docs.py b/contrib/tools/python3/Lib/pydoc_data/module_docs.py
index 8c4013606ca..9e456490967 100644
--- a/contrib/tools/python3/Lib/pydoc_data/module_docs.py
+++ b/contrib/tools/python3/Lib/pydoc_data/module_docs.py
@@ -1,4 +1,4 @@
-# Autogenerated by Sphinx on Tue Apr 7 20:18:56 2026
+# Autogenerated by Sphinx on Wed Jun 10 14:23:59 2026
# as part of the release process.
module_docs = {
diff --git a/contrib/tools/python3/Lib/pydoc_data/topics.py b/contrib/tools/python3/Lib/pydoc_data/topics.py
index bbbd6a3effd..31d582a90ab 100644
--- a/contrib/tools/python3/Lib/pydoc_data/topics.py
+++ b/contrib/tools/python3/Lib/pydoc_data/topics.py
@@ -1,4 +1,4 @@
-# Autogenerated by Sphinx on Tue Apr 7 20:18:56 2026
+# Autogenerated by Sphinx on Wed Jun 10 14:23:59 2026
# as part of the release process.
topics = {
@@ -2122,9 +2122,9 @@ Added in version 3.10.
The match statement is used for pattern matching. Syntax:
match_stmt ::= 'match' subject_expr ":" NEWLINE INDENT case_block+ DEDENT
- subject_expr ::= `!star_named_expression` "," `!star_named_expressions`?
- | `!named_expression`
- case_block ::= 'case' patterns [guard] ":" `!block`
+ subject_expr ::= flexible_expression "," [flexible_expression_list [',']]
+ | assignment_expression
+ case_block ::= 'case' patterns [guard] ":" suite
Note:
@@ -2215,7 +2215,7 @@ section.
Guards
------
- guard ::= "if" `!named_expression`
+ guard ::= "if" assignment_expression
A "guard" (which is part of the "case") must succeed for code inside
the "case" block to execute. It takes the form: "if" followed by an
@@ -4625,11 +4625,6 @@ Note:
See also the description of the "try" statement in section The try
statement and "raise" statement in section The raise statement.
-
--[ Footnotes ]-
-
-[1] This limitation occurs because the code that is executed by these
- operations is not available at the time the module is compiled.
''',
'execmodel': r'''Execution model
***************
@@ -4976,6 +4971,180 @@ Note:
See also the description of the "try" statement in section The try
statement and "raise" statement in section The raise statement.
+
+Runtime Components
+==================
+
+
+General Computing Model
+-----------------------
+
+Python’s execution model does not operate in a vacuum. It runs on a
+host machine and through that host’s runtime environment, including
+its operating system (OS), if there is one. When a program runs, the
+conceptual layers of how it runs on the host look something like this:
+
+ **host machine**
+ **process** (global resources)
+ **thread** (runs machine code)
+
+Each process represents a program running on the host. Think of each
+process itself as the data part of its program. Think of the process’
+threads as the execution part of the program. This distinction will
+be important to understand the conceptual Python runtime.
+
+The process, as the data part, is the execution context in which the
+program runs. It mostly consists of the set of resources assigned to
+the program by the host, including memory, signals, file handles,
+sockets, and environment variables.
+
+Processes are isolated and independent from one another. (The same is
+true for hosts.) The host manages the process’ access to its assigned
+resources, in addition to coordinating between processes.
+
+Each thread represents the actual execution of the program’s machine
+code, running relative to the resources assigned to the program’s
+process. It’s strictly up to the host how and when that execution
+takes place.
+
+From the point of view of Python, a program always starts with exactly
+one thread. However, the program may grow to run in multiple
+simultaneous threads. Not all hosts support multiple threads per
+process, but most do. Unlike processes, threads in a process are not
+isolated and independent from one another. Specifically, all threads
+in a process share all of the process’ resources.
+
+The fundamental point of threads is that each one does *run*
+independently, at the same time as the others. That may be only
+conceptually at the same time (“concurrently”) or physically (“in
+parallel”). Either way, the threads effectively run at a non-
+synchronized rate.
+
+Note:
+
+ That non-synchronized rate means none of the process’ memory is
+ guaranteed to stay consistent for the code running in any given
+ thread. Thus multi-threaded programs must take care to coordinate
+ access to intentionally shared resources. Likewise, they must take
+ care to be absolutely diligent about not accessing any *other*
+ resources in multiple threads; otherwise two threads running at the
+ same time might accidentally interfere with each other’s use of some
+ shared data. All this is true for both Python programs and the
+ Python runtime.The cost of this broad, unstructured requirement is
+ the tradeoff for the kind of raw concurrency that threads provide.
+ The alternative to the required discipline generally means dealing
+ with non-deterministic bugs and data corruption.
+
+
+Python Runtime Model
+--------------------
+
+The same conceptual layers apply to each Python program, with some
+extra data layers specific to Python:
+
+ **host machine**
+ **process** (global resources)
+ Python global runtime (*state*)
+ Python interpreter (*state*)
+ **thread** (runs Python bytecode and “C-API”)
+ Python thread *state*
+
+At the conceptual level: when a Python program starts, it looks
+exactly like that diagram, with one of each. The runtime may grow to
+include multiple interpreters, and each interpreter may grow to
+include multiple thread states.
+
+Note:
+
+ A Python implementation won’t necessarily implement the runtime
+ layers distinctly or even concretely. The only exception is places
+ where distinct layers are directly specified or exposed to users,
+ like through the "threading" module.
+
+Note:
+
+ The initial interpreter is typically called the “main” interpreter.
+ Some Python implementations, like CPython, assign special roles to
+ the main interpreter.Likewise, the host thread where the runtime was
+ initialized is known as the “main” thread. It may be different from
+ the process’ initial thread, though they are often the same. In
+ some cases “main thread” may be even more specific and refer to the
+ initial thread state. A Python runtime might assign specific
+ responsibilities to the main thread, such as handling signals.
+
+As a whole, the Python runtime consists of the global runtime state,
+interpreters, and thread states. The runtime ensures all that state
+stays consistent over its lifetime, particularly when used with
+multiple host threads.
+
+The global runtime, at the conceptual level, is just a set of
+interpreters. While those interpreters are otherwise isolated and
+independent from one another, they may share some data or other
+resources. The runtime is responsible for managing these global
+resources safely. The actual nature and management of these resources
+is implementation-specific. Ultimately, the external utility of the
+global runtime is limited to managing interpreters.
+
+In contrast, an “interpreter” is conceptually what we would normally
+think of as the (full-featured) “Python runtime”. When machine code
+executing in a host thread interacts with the Python runtime, it calls
+into Python in the context of a specific interpreter.
+
+Note:
+
+ The term “interpreter” here is not the same as the “bytecode
+ interpreter”, which is what regularly runs in threads, executing
+ compiled Python code.In an ideal world, “Python runtime” would refer
+ to what we currently call “interpreter”. However, it’s been called
+ “interpreter” at least since introduced in 1997 (CPython:a027efa5b).
+
+Each interpreter completely encapsulates all of the non-process-
+global, non-thread-specific state needed for the Python runtime to
+work. Notably, the interpreter’s state persists between uses. It
+includes fundamental data like "sys.modules". The runtime ensures
+multiple threads using the same interpreter will safely share it
+between them.
+
+A Python implementation may support using multiple interpreters at the
+same time in the same process. They are independent and isolated from
+one another. For example, each interpreter has its own "sys.modules".
+
+For thread-specific runtime state, each interpreter has a set of
+thread states, which it manages, in the same way the global runtime
+contains a set of interpreters. It can have thread states for as many
+host threads as it needs. It may even have multiple thread states for
+the same host thread, though that isn’t as common.
+
+Each thread state, conceptually, has all the thread-specific runtime
+data an interpreter needs to operate in one host thread. The thread
+state includes the current raised exception and the thread’s Python
+call stack. It may include other thread-specific resources.
+
+Note:
+
+ The term “Python thread” can sometimes refer to a thread state, but
+ normally it means a thread created using the "threading" module.
+
+Each thread state, over its lifetime, is always tied to exactly one
+interpreter and exactly one host thread. It will only ever be used in
+that thread and with that interpreter.
+
+Multiple thread states may be tied to the same host thread, whether
+for different interpreters or even the same interpreter. However, for
+any given host thread, only one of the thread states tied to it can be
+used by the thread at a time.
+
+Thread states are isolated and independent from one another and don’t
+share any data, except for possibly sharing an interpreter and objects
+or other resources belonging to that interpreter.
+
+Once a program is running, new Python threads can be created using the
+"threading" module (on platforms and Python implementations that
+support threads). Additional processes can be created using the "os",
+"subprocess", and "multiprocessing" modules. Coroutines (async) can be
+run using "asyncio" in each interpreter, typically only in a single
+thread (often the main thread).
+
-[ Footnotes ]-
[1] This limitation occurs because the code that is executed by these
@@ -5317,7 +5486,8 @@ following:
| | is not supported. |
+-----------+------------------------------------------------------------+
-For a locale aware separator, use the "'n'" presentation type instead.
+For a locale-aware separator, use the "'n'" float presentation type or
+integer presentation type instead.
Changed in version 3.1: Added the "','" option (see also **PEP 378**).
@@ -5368,7 +5538,10 @@ The available integer presentation types are:
+-----------+------------------------------------------------------------+
| "'n'" | Number. This is the same as "'d'", except that it uses the |
| | current locale setting to insert the appropriate digit |
- | | group separators. |
+ | | group separators. Note that the default locale is not the |
+ | | system locale. Depending on your use case, you may wish to |
+ | | set "LC_NUMERIC" with "locale.setlocale()" before using |
+ | | "'n'". |
+-----------+------------------------------------------------------------+
| None | The same as "'d'". |
+-----------+------------------------------------------------------------+
@@ -5442,7 +5615,10 @@ The available presentation types for "float" and "Decimal" values are:
+-----------+------------------------------------------------------------+
| "'n'" | Number. This is the same as "'g'", except that it uses the |
| | current locale setting to insert the appropriate digit |
- | | group separators for the integral part of a number. |
+ | | group separators for the integral part of a number. Note |
+ | | that the default locale is not the system locale. |
+ | | Depending on your use case, you may wish to set |
+ | | "LC_NUMERIC" with "locale.setlocale()" before using "'n'". |
+-----------+------------------------------------------------------------+
| "'%'" | Percentage. Multiplies the number by 100 and displays in |
| | fixed ("'f'") format, followed by a percent sign. |
@@ -6039,8 +6215,9 @@ steps:
1. find a module, loading and initializing it if necessary
-2. define a name or names in the local namespace for the scope where
- the "import" statement occurs.
+2. define a name or names in the current namespace for the scope where
+ the "import" statement occurs, just as an assignment statement
+ would (including "global" and "nonlocal" semantics).
When the statement contains multiple clauses (separated by commas) the
two steps are carried out separately for each clause, just as though
@@ -6085,7 +6262,7 @@ The "from" form uses a slightly more complex process:
3. if the attribute is not found, "ImportError" is raised.
- 4. otherwise, a reference to that value is stored in the local
+ 4. otherwise, a reference to that value is stored in the current
namespace, using the name in the "as" clause if it is present,
otherwise using the attribute name
@@ -9342,9 +9519,22 @@ str.isdigit()
decimal characters and digits that need special handling, such as
the compatibility superscript digits. This covers digits which
cannot be used to form numbers in base 10, like the Kharosthi
- numbers. Formally, a digit is a character that has the property
+ numbers. Formally, a digit is a character that has the property
value Numeric_Type=Digit or Numeric_Type=Decimal.
+ For example:
+
+ >>> '0123456789'.isdigit()
+ True
+ >>> '٠١٢٣٤٥٦٧٨٩'.isdigit() # Arabic-Indic digits zero to nine
+ True
+ >>> '⅕'.isdigit() # Vulgar fraction one fifth
+ False
+ >>> '²'.isdecimal(), '²'.isdigit(), '²'.isnumeric()
+ (False, True, True)
+
+ See also "isdecimal()" and "isnumeric()".
+
str.isidentifier()
Return "True" if the string is a valid identifier according to the
@@ -9380,15 +9570,14 @@ str.isnumeric()
>>> '0123456789'.isnumeric()
True
- >>> '٠١٢٣٤٥٦٧٨٩'.isnumeric() # Arabic-indic digit zero to nine
+ >>> '٠١٢٣٤٥٦٧٨٩'.isnumeric() # Arabic-Indic digits zero to nine
True
>>> '⅕'.isnumeric() # Vulgar fraction one fifth
True
>>> '²'.isdecimal(), '²'.isdigit(), '²'.isnumeric()
(False, True, True)
- See also "isdecimal()" and "isdigit()". Numeric characters are a
- superset of decimal numbers.
+ See also "isdecimal()" and "isdigit()".
str.isprintable()
@@ -9770,7 +9959,7 @@ str.split(sep=None, maxsplit=-1)
>>> " foo ".split(maxsplit=0)
['foo ']
- See also "join()".
+ See also "join()" and "rsplit()".
str.splitlines(keepends=False)
@@ -9860,6 +10049,8 @@ str.strip(chars=None, /)
not a prefix or suffix; rather, all combinations of its values are
stripped.
+ Whitespace characters are defined by "str.isspace()".
+
For example:
>>> ' spacious '.strip()
@@ -9884,8 +10075,18 @@ str.strip(chars=None, /)
str.swapcase()
Return a copy of the string with uppercase characters converted to
- lowercase and vice versa. Note that it is not necessarily true that
- "s.swapcase().swapcase() == s".
+ lowercase and vice versa. For example:
+
+ >>> 'Hello World'.swapcase()
+ 'hELLO wORLD'
+
+ Note that it is not necessarily true that "s.swapcase().swapcase()
+ == s". For example:
+
+ >>> 'straße'.swapcase().swapcase()
+ 'strasse'
+
+ See also "str.lower()" and "str.upper()".
str.title()
@@ -11899,6 +12100,9 @@ class dict(iterable, /, **kwargs)
insertion order. This behavior was an implementation detail of
CPython from 3.6.
+ Dictionaries are generic over two types, signifying (respectively)
+ the types of the dictionary’s keys and values.
+
These are the operations that dictionaries support (and therefore,
custom mapping types should support too):
@@ -12598,6 +12802,8 @@ class list(iterable=(), /)
Many other operations also produce lists, including the "sorted()"
built-in.
+ Lists are generic over the types of their items.
+
Lists implement all of the common and mutable sequence operations.
Lists also provide the following additional method:
@@ -12683,6 +12889,10 @@ class tuple(iterable=(), /)
Tuples implement all of the common sequence operations.
+ Tuples are generic over the types of their contents. For more
+ information, refer to the typing documentation on annotating
+ tuples.
+
For heterogeneous collections of data where access by name is clearer
than access by index, "collections.namedtuple()" may be a more
appropriate choice than a simple tuple object.
diff --git a/contrib/tools/python3/Lib/rlcompleter.py b/contrib/tools/python3/Lib/rlcompleter.py
index 23eb0020f42..e75dd0a9e3d 100644
--- a/contrib/tools/python3/Lib/rlcompleter.py
+++ b/contrib/tools/python3/Lib/rlcompleter.py
@@ -34,6 +34,7 @@ import builtins
import inspect
import keyword
import re
+import types
import __main__
import warnings
@@ -178,14 +179,14 @@ class Completer:
if (word[:n] == attr and
not (noprefix and word[:n+1] == noprefix)):
match = "%s.%s" % (expr, word)
- if isinstance(getattr(type(thisobject), word, None),
- property):
- # bpo-44752: thisobject.word is a method decorated by
- # `@property`. What follows applies a postfix if
- # thisobject.word is callable, but know we know that
- # this is not callable (because it is a property).
- # Also, getattr(thisobject, word) will evaluate the
- # property method, which is not desirable.
+
+ class_attr = getattr(type(thisobject), word, None)
+ if isinstance(
+ class_attr,
+ (property, types.GetSetDescriptorType, types.MemberDescriptorType)
+ ) or (hasattr(class_attr, '__get__') and not callable(class_attr)):
+ # Avoid evaluating descriptors, which could run
+ # arbitrary code or raise exceptions.
matches.append(match)
continue
if (value := getattr(thisobject, word, None)) is not None:
diff --git a/contrib/tools/python3/Lib/runpy.py b/contrib/tools/python3/Lib/runpy.py
index ef54d3282ee..1d5ecf0cf15 100644
--- a/contrib/tools/python3/Lib/runpy.py
+++ b/contrib/tools/python3/Lib/runpy.py
@@ -103,8 +103,10 @@ def _run_module_code(code, init_globals=None,
# Helper to get the full name, spec and code for a module
def _get_module_details(mod_name, error=ImportError):
+ # name= is only accepted by ImportError and its subclasses.
+ kwargs = {"name": mod_name} if issubclass(error, ImportError) else {}
if mod_name.startswith("."):
- raise error("Relative module names not supported")
+ raise error("Relative module names not supported", **kwargs)
pkg_name, _, _ = mod_name.rpartition(".")
if pkg_name:
# Try importing the parent to avoid catching initialization errors
@@ -137,12 +139,13 @@ def _get_module_details(mod_name, error=ImportError):
if mod_name.endswith(".py"):
msg += (f". Try using '{mod_name[:-3]}' instead of "
f"'{mod_name}' as the module name.")
- raise error(msg.format(mod_name, type(ex).__name__, ex)) from ex
+ raise error(msg.format(mod_name, type(ex).__name__, ex),
+ **kwargs) from ex
if spec is None:
- raise error("No module named %s" % mod_name)
+ raise error("No module named %s" % mod_name, **kwargs)
if spec.submodule_search_locations is not None:
if mod_name == "__main__" or mod_name.endswith(".__main__"):
- raise error("Cannot use package as __main__ module")
+ raise error("Cannot use package as __main__ module", **kwargs)
try:
pkg_main_name = mod_name + ".__main__"
return _get_module_details(pkg_main_name, error)
@@ -150,17 +153,19 @@ def _get_module_details(mod_name, error=ImportError):
if mod_name not in sys.modules:
raise # No module loaded; being a package is irrelevant
raise error(("%s; %r is a package and cannot " +
- "be directly executed") %(e, mod_name))
+ "be directly executed") %(e, mod_name),
+ **kwargs)
loader = spec.loader
if loader is None:
raise error("%r is a namespace package and cannot be executed"
- % mod_name)
+ % mod_name,
+ **kwargs)
try:
code = loader.get_code(mod_name)
except ImportError as e:
- raise error(format(e)) from e
+ raise error(format(e), **kwargs) from e
if code is None:
- raise error("No code object available for %s" % mod_name)
+ raise error("No code object available for %s" % mod_name, **kwargs)
return mod_name, spec, code
class _Error(Exception):
@@ -234,6 +239,7 @@ def _get_main_module_details(error=ImportError):
# Also moves the standard __main__ out of the way so that the
# preexisting __loader__ entry doesn't cause issues
main_name = "__main__"
+ kwargs = {"name": main_name} if issubclass(error, ImportError) else {}
saved_main = sys.modules[main_name]
del sys.modules[main_name]
try:
@@ -241,7 +247,8 @@ def _get_main_module_details(error=ImportError):
except ImportError as exc:
if main_name in str(exc):
raise error("can't find %r module in %r" %
- (main_name, sys.path[0])) from exc
+ (main_name, sys.path[0]),
+ **kwargs) from exc
raise
finally:
sys.modules[main_name] = saved_main
diff --git a/contrib/tools/python3/Lib/shutil.py b/contrib/tools/python3/Lib/shutil.py
index 7df972012c7..86322f05444 100644
--- a/contrib/tools/python3/Lib/shutil.py
+++ b/contrib/tools/python3/Lib/shutil.py
@@ -823,10 +823,14 @@ def move(src, dst, copy_function=copy2):
If dst already exists but is not a directory, it may be overwritten
depending on os.rename() semantics.
- If the destination is on our current filesystem, then rename() is used.
- Otherwise, src is copied to the destination and then removed. Symlinks are
- recreated under the new name if os.rename() fails because of cross
- filesystem renames.
+ os.rename() is preferably used if the source and destination are on the
+ same filesystem. In case os.rename() fails due to OSError (e.g. the user
+ has write permission to *dst* file but not to its parent directory),
+ this method falls back to using *copy_function* silently.
+ Symlinks are also recreated under the new name if os.rename() fails
+ because of cross filesystem renames.
+
+ It's recommended to use os.rename() if atomic move is strictly required.
The optional `copy_function` argument is a callable that will be used
to copy the source or it will be delegated to `copytree`.
@@ -878,8 +882,8 @@ def move(src, dst, copy_function=copy2):
return real_dst
def _destinsrc(src, dst):
- src = os.path.abspath(src)
- dst = os.path.abspath(dst)
+ src = os.path.realpath(src)
+ dst = os.path.realpath(dst)
if not src.endswith(os.path.sep):
src += os.path.sep
if not dst.endswith(os.path.sep):
@@ -1246,27 +1250,9 @@ def _unpack_zipfile(filename, extract_dir):
if not zipfile.is_zipfile(filename):
raise ReadError("%s is not a zip file" % filename)
- zip = zipfile.ZipFile(filename)
- try:
- for info in zip.infolist():
- name = info.filename
-
- # don't extract absolute paths or ones with .. in them
- if name.startswith('/') or '..' in name:
- continue
-
- targetpath = os.path.join(extract_dir, *name.split('/'))
- if not targetpath:
- continue
-
- _ensure_directory(targetpath)
- if not name.endswith('/'):
- # file
- with zip.open(name, 'r') as source, \
- open(targetpath, 'wb') as target:
- copyfileobj(source, target)
- finally:
- zip.close()
+ with zipfile.ZipFile(filename) as zip:
+ zip._ignore_invalid_names = True
+ zip.extractall(extract_dir)
def _unpack_tarfile(filename, extract_dir, *, filter=None):
"""Unpack tar/tar.gz/tar.bz2/tar.xz `filename` to `extract_dir`
diff --git a/contrib/tools/python3/Lib/smtplib.py b/contrib/tools/python3/Lib/smtplib.py
index 9bedcc5ff6c..95ad966c393 100755
--- a/contrib/tools/python3/Lib/smtplib.py
+++ b/contrib/tools/python3/Lib/smtplib.py
@@ -253,7 +253,6 @@ class SMTP:
will be used.
"""
- self._host = host
self.timeout = timeout
self.esmtp_features = {}
self.command_encoding = 'ascii'
@@ -344,6 +343,7 @@ class SMTP:
port = int(port)
except ValueError:
raise OSError("nonnumeric port")
+ self._host = host
if not port:
port = self.default_port
sys.audit("smtplib.connect", self, host, port)
diff --git a/contrib/tools/python3/Lib/socket.py b/contrib/tools/python3/Lib/socket.py
index 35d87eff34d..55644bd4c17 100644
--- a/contrib/tools/python3/Lib/socket.py
+++ b/contrib/tools/python3/Lib/socket.py
@@ -634,18 +634,22 @@ def _fallback_socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
# Authenticating avoids using a connection from something else
# able to connect to {host}:{port} instead of us.
# We expect only AF_INET and AF_INET6 families.
- try:
- if (
- ssock.getsockname() != csock.getpeername()
- or csock.getsockname() != ssock.getpeername()
- ):
- raise ConnectionError("Unexpected peer connection")
- except:
- # getsockname() and getpeername() can fail
- # if either socket isn't connected.
- ssock.close()
- csock.close()
- raise
+ #
+ # Note that we skip this on WASI because on that platorm the client socket
+ # may not have finished connecting by the time we've reached this point (gh-146139).
+ if sys.platform != "wasi":
+ try:
+ if (
+ ssock.getsockname() != csock.getpeername()
+ or csock.getsockname() != ssock.getpeername()
+ ):
+ raise ConnectionError("Unexpected peer connection")
+ except:
+ # getsockname() and getpeername() can fail
+ # if either socket isn't connected.
+ ssock.close()
+ csock.close()
+ raise
return (ssock, csock)
diff --git a/contrib/tools/python3/Lib/tarfile.py b/contrib/tools/python3/Lib/tarfile.py
index 533c0cc8736..b22b2b38abb 100755
--- a/contrib/tools/python3/Lib/tarfile.py
+++ b/contrib/tools/python3/Lib/tarfile.py
@@ -489,7 +489,7 @@ class _Stream:
if flag & 4:
xlen = ord(self.__read(1)) + 256 * ord(self.__read(1))
- self.read(xlen)
+ self.__read(xlen)
if flag & 8:
while True:
s = self.__read(1)
@@ -819,16 +819,22 @@ def _get_filtered_attrs(member, dest_path, for_data=True):
if member.islnk() or member.issym():
if os.path.isabs(member.linkname):
raise AbsoluteLinkError(member)
+ # A link member that resolves to the destination directory itself
+ # would replace it with a (sym)link, redirecting the destination
+ # for all subsequent members.
+ if target_path == dest_path:
+ raise OutsideDestinationError(member, target_path)
normalized = os.path.normpath(member.linkname)
if normalized != member.linkname:
new_attrs['linkname'] = normalized
if member.issym():
- target_path = os.path.join(dest_path,
- os.path.dirname(name),
- member.linkname)
+ # The symlink is created at `name` with trailing separators
+ # stripped, so its target is relative to the directory
+ # containing that path.
+ link_dir = os.path.dirname(name.rstrip('/' + os.sep))
+ target_path = os.path.join(dest_path, link_dir, normalized)
else:
- target_path = os.path.join(dest_path,
- member.linkname)
+ target_path = os.path.join(dest_path, normalized)
target_path = os.path.realpath(target_path,
strict=os.path.ALLOW_MISSING)
if os.path.commonpath([target_path, dest_path]) != dest_path:
@@ -882,11 +888,14 @@ class TarInfo(object):
size = 'Size in bytes.',
mtime = 'Time of last modification.',
chksum = 'Header checksum.',
- type = ('File type. type is usually one of these constants: '
- 'REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, '
- 'CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.'),
+ type = ('File type. type is usually one of these constants: '
+ 'REGTYPE,\n'
+ 'AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, '
+ 'CONTTYPE, CHRTYPE,\n'
+ 'BLKTYPE, GNUTYPE_SPARSE.'),
linkname = ('Name of the target file name, which is only present '
- 'in TarInfo objects of type LNKTYPE and SYMTYPE.'),
+ 'in TarInfo\n'
+ 'objects of type LNKTYPE and SYMTYPE.'),
uname = 'User name.',
gname = 'Group name.',
devmajor = 'Device major number.',
@@ -894,7 +903,8 @@ class TarInfo(object):
offset = 'The tar header starts here.',
offset_data = "The file's data starts here.",
pax_headers = ('A dictionary containing key-value pairs of an '
- 'associated pax extended header.'),
+ 'associated pax\n'
+ 'extended header.'),
sparse = 'Sparse member information.',
_tarfile = None,
_sparse_structs = None,
@@ -2198,10 +2208,11 @@ class TarFile(object):
return tarinfo
def list(self, verbose=True, *, members=None):
- """Print a table of contents to sys.stdout. If `verbose' is False, only
- the names of the members are printed. If it is True, an `ls -l'-like
- output is produced. `members' is optional and must be a subset of the
- list returned by getmembers().
+ """Print a table of contents to sys.stdout.
+
+ If `verbose' is False, only the names of the members are printed.
+ If it is True, an `ls -l'-like output is produced. `members' is
+ optional and must be a subset of the list returned by getmembers().
"""
# Convert tarinfo type to stat type.
type2mode = {REGTYPE: stat.S_IFREG, SYMTYPE: stat.S_IFLNK,
@@ -2292,10 +2303,12 @@ class TarFile(object):
self.addfile(tarinfo)
def addfile(self, tarinfo, fileobj=None):
- """Add the TarInfo object `tarinfo' to the archive. If `tarinfo' represents
- a non zero-size regular file, the `fileobj' argument should be a binary file,
- and tarinfo.size bytes are read from it and added to the archive.
- You can create TarInfo objects directly, or by using gettarinfo().
+ """Add the TarInfo object `tarinfo' to the archive.
+
+ If `tarinfo' represents a non zero-size regular file, the `fileobj'
+ argument should be a binary file, and tarinfo.size bytes are read
+ from it and added to the archive. You can create TarInfo objects
+ directly, or by using gettarinfo().
"""
self._check("awx")
diff --git a/contrib/tools/python3/Lib/timeit.py b/contrib/tools/python3/Lib/timeit.py
index 02cfafaf36e..f5f75048be1 100755
--- a/contrib/tools/python3/Lib/timeit.py
+++ b/contrib/tools/python3/Lib/timeit.py
@@ -322,7 +322,7 @@ def main(args=None, *, _wrap_timer=None):
callback = None
if verbose:
def callback(number, time_taken):
- msg = "{num} loop{s} -> {secs:.{prec}g} secs"
+ msg = "{num} loop{s} -> {secs:.{prec}g} sec"
plural = (number != 1)
print(msg.format(num=number, s='s' if plural else '',
secs=time_taken, prec=precision))
diff --git a/contrib/tools/python3/Lib/tomllib/_parser.py b/contrib/tools/python3/Lib/tomllib/_parser.py
index 9c80a6a547d..a1f7ffd6d24 100644
--- a/contrib/tools/python3/Lib/tomllib/_parser.py
+++ b/contrib/tools/python3/Lib/tomllib/_parser.py
@@ -6,8 +6,9 @@ from __future__ import annotations
from collections.abc import Iterable
import string
+import sys
from types import MappingProxyType
-from typing import Any, BinaryIO, NamedTuple
+from typing import Any, BinaryIO, NamedTuple, Final
from ._re import (
RE_DATETIME,
@@ -19,6 +20,13 @@ from ._re import (
)
from ._types import Key, ParseFloat, Pos
+# Pathologically excessive number of parts in a key runs into quadratic
+# behavior (e.g. in Flags.is_).
+# Even if keys aren't currently parsed using recursion, they name a
+# recursive structure, so it makes sense to limit it using getrecursionlimit()
+# and RecursionError.
+MAX_KEY_PARTS: Final = sys.getrecursionlimit()
+
ASCII_CTRL = frozenset(chr(i) for i in range(32)) | frozenset(chr(127))
# Neither of these sets include quotation mark or backslash. They are
@@ -385,6 +393,10 @@ def parse_key(src: str, pos: Pos) -> tuple[Pos, Key]:
pos = skip_chars(src, pos, TOML_WS)
pos, key_part = parse_key_part(src, pos)
key += (key_part,)
+ if len(key) > MAX_KEY_PARTS:
+ raise RecursionError(
+ f"TOML key has more than the allowed {MAX_KEY_PARTS} parts"
+ )
pos = skip_chars(src, pos, TOML_WS)
diff --git a/contrib/tools/python3/Lib/traceback.py b/contrib/tools/python3/Lib/traceback.py
index b412954bd53..0acb75bbab5 100644
--- a/contrib/tools/python3/Lib/traceback.py
+++ b/contrib/tools/python3/Lib/traceback.py
@@ -70,10 +70,10 @@ def extract_tb(tb, limit=None):
This is useful for alternate formatting of stack traces. If
'limit' is omitted or None, all entries are extracted. A
pre-processed stack trace entry is a FrameSummary object
- containing attributes filename, lineno, name, and line
- representing the information that is usually printed for a stack
- trace. The line is a string with leading and trailing
- whitespace stripped; if the source is not available it is None.
+ representing the information that is usually printed for a
+ stack trace. The line attribute is a string with
+ leading and trailing whitespace stripped; if the source is not
+ available the corresponding attribute is None.
"""
return StackSummary._extract_from_extended_frame_gen(
_walk_tb_with_full_positions(tb), limit=limit)
@@ -251,9 +251,8 @@ def extract_stack(f=None, limit=None):
The return value has the same format as for extract_tb(). The
optional 'f' and 'limit' arguments have the same meaning as for
- print_stack(). Each item in the list is a quadruple (filename,
- line number, function name, text), and the entries are in order
- from oldest to newest stack frame.
+ print_stack(). Each item in the list is a FrameSummary object,
+ and the entries are in order from oldest to newest stack frame.
"""
if f is None:
f = sys._getframe().f_back
@@ -281,7 +280,7 @@ class FrameSummary:
active when the frame was captured.
- :attr:`name` The name of the function or method that was executing
when the frame was captured.
- - :attr:`line` The text from the linecache module for the
+ - :attr:`line` The text from the linecache module for the line
of code that was running when the frame was captured.
- :attr:`locals` Either None if locals were not supplied, or a dict
mapping the name to the repr() of the variable.
@@ -951,7 +950,7 @@ def _extract_caret_anchors_from_line_segment(segment):
_WIDE_CHAR_SPECIFIERS = "WF"
def _display_width(line, offset=None):
- """Calculate the extra amount of width space the given source
+ """Calculate the amount of width space the given source
code segment might take if it were to be displayed on a fixed
width output device. Supports wide unicode characters and emojis."""
@@ -1037,7 +1036,7 @@ class TracebackException:
def __init__(self, exc_type, exc_value, exc_traceback, *, limit=None,
lookup_lines=True, capture_locals=False, compact=False,
max_group_width=15, max_group_depth=10, save_exc_type=True, _seen=None):
- # NB: we need to accept exc_traceback, exc_value, exc_traceback to
+ # NB: we need to accept exc_type, exc_value, exc_traceback to
# permit backwards compat with the existing API, otherwise we
# need stub thunk objects just to glue it together.
# Handle loops in __cause__ or __context__.
diff --git a/contrib/tools/python3/Lib/types.py b/contrib/tools/python3/Lib/types.py
index ff474c14144..84622a5b4df 100644
--- a/contrib/tools/python3/Lib/types.py
+++ b/contrib/tools/python3/Lib/types.py
@@ -176,18 +176,19 @@ def get_original_bases(cls, /):
class DynamicClassAttribute:
"""Route attribute access on a class to __getattr__.
- This is a descriptor, used to define attributes that act differently when
- accessed through an instance and through a class. Instance access remains
- normal, but access to an attribute through a class will be routed to the
- class's __getattr__ method; this is done by raising AttributeError.
+ This is a descriptor, used to define attributes that act differently
+ when accessed through an instance and through a class. Instance access
+ remains normal, but access to an attribute through a class will be
+ routed to the class's __getattr__ method; this is done by raising
+ AttributeError.
- This allows one to have properties active on an instance, and have virtual
- attributes on the class with the same name. (Enum used this between Python
- versions 3.4 - 3.9 .)
+ This allows one to have properties active on an instance, and have
+ virtual attributes on the class with the same name. (Enum used this
+ between Python versions 3.4 - 3.9 .)
- Subclass from this to use a different method of accessing virtual attributes
- and still be treated properly by the inspect module. (Enum uses this since
- Python 3.10 .)
+ Subclass from this to use a different method of accessing virtual
+ attributes and still be treated properly by the inspect module. (Enum
+ uses this since Python 3.10 .)
"""
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
diff --git a/contrib/tools/python3/Lib/typing.py b/contrib/tools/python3/Lib/typing.py
index cbc6d90e13a..381aaf3c7d0 100644
--- a/contrib/tools/python3/Lib/typing.py
+++ b/contrib/tools/python3/Lib/typing.py
@@ -5,7 +5,7 @@ Among other things, the module includes the following:
* Generic, Protocol, and internal machinery to support generic aliases.
All subscripted types like X[int], Union[int, str] are generic aliases.
* Various "special forms" that have unique meanings in type annotations:
- NoReturn, Never, ClassVar, Self, Concatenate, Unpack, and others.
+ Any, Never, ClassVar, Self, Concatenate, Unpack, and others.
* Classes whose instances can be type arguments to generic classes and functions:
TypeVar, ParamSpec, TypeVarTuple.
* Public helper functions: get_type_hints, overload, cast, final, and others.
@@ -598,12 +598,12 @@ class _AnyMeta(type):
class Any(metaclass=_AnyMeta):
"""Special type indicating an unconstrained type.
- - Any is compatible with every type.
- - Any assumed to have all methods.
- - All values assumed to be instances of Any.
+ - Any is assignable to every type.
+ - Any assumed to have all methods and attributes.
+ - All values are assignable to Any.
Note that all the above statements are true from the point of view of
- static type checkers. At runtime, Any should not be used with instance
+ static type checkers. At runtime, Any cannot be used with instance
checks.
"""
@@ -722,7 +722,7 @@ def ClassVar(self, parameters):
ClassVar accepts only types and cannot be further subscribed.
- Note that ClassVar is not a class itself, and should not
+ Note that ClassVar is not a class itself, and cannot
be used with isinstance() or issubclass().
"""
item = _type_check(parameters, f'{self} accepts only single type.', allow_special_forms=True)
@@ -805,7 +805,7 @@ def _make_union(left, right):
@_SpecialForm
def Optional(self, parameters):
- """Optional[X] is equivalent to Union[X, None]."""
+ """Optional[X] is equivalent to X | None."""
arg = _type_check(parameters, f"{self} requires a single type.")
return Union[arg, type(None)]
@@ -848,7 +848,7 @@ def Literal(self, *parameters):
def TypeAlias(self, parameters):
"""Special form for marking type aliases.
- Use TypeAlias to indicate that an assignment should
+ TypeAlias can be used to indicate that an assignment should
be recognized as a proper type alias definition by type
checkers.
@@ -1410,31 +1410,35 @@ class _BaseGenericAlias(_Final, _root=True):
class _GenericAlias(_BaseGenericAlias, _root=True):
- # The type of parameterized generics.
- #
- # That is, for example, `type(List[int])` is `_GenericAlias`.
- #
- # Objects which are instances of this class include:
- # * Parameterized container types, e.g. `Tuple[int]`, `List[int]`.
- # * Note that native container types, e.g. `tuple`, `list`, use
- # `types.GenericAlias` instead.
- # * Parameterized classes:
- # class C[T]: pass
- # # C[int] is a _GenericAlias
- # * `Callable` aliases, generic `Callable` aliases, and
- # parameterized `Callable` aliases:
- # T = TypeVar('T')
- # # _CallableGenericAlias inherits from _GenericAlias.
- # A = Callable[[], None] # _CallableGenericAlias
- # B = Callable[[T], None] # _CallableGenericAlias
- # C = B[int] # _CallableGenericAlias
- # * Parameterized `Final`, `ClassVar`, `TypeGuard`, and `TypeIs`:
- # # All _GenericAlias
- # Final[int]
- # ClassVar[float]
- # TypeGuard[bool]
- # TypeIs[range]
+ """The type of parameterized generics.
+ That is, for example, `type(List[int])` is `_GenericAlias`.
+
+ Objects which are instances of this class include:
+ * Parameterized container types, e.g. `Tuple[int]`, `List[int]`.
+ * Note that native container types, e.g. `tuple`, `list`, use
+ `types.GenericAlias` instead.
+ * Parameterized classes:
+ class C[T]: pass
+ # C[int] is a _GenericAlias
+ * `Callable` aliases, generic `Callable` aliases, and
+ parameterized `Callable` aliases:
+ T = TypeVar('T')
+ # _CallableGenericAlias inherits from _GenericAlias.
+ A = Callable[[], None] # _CallableGenericAlias
+ B = Callable[[T], None] # _CallableGenericAlias
+ C = B[int] # _CallableGenericAlias
+ * Parameterized `Final`, `ClassVar`, `TypeForm`, `TypeGuard`, and `TypeIs`:
+ # All _GenericAlias
+ Final[int]
+ ClassVar[float]
+ TypeForm[bytearray]
+ TypeGuard[bool]
+ TypeIs[range]
+
+ Note that instances of this class are not classes (e.g by `inspect.isclass`),
+ even though they behave like them.
+ """
def __init__(self, origin, args, *, inst=True, name=None):
super().__init__(origin, inst=inst, name=name)
if not isinstance(args, tuple):
@@ -1466,20 +1470,21 @@ class _GenericAlias(_BaseGenericAlias, _root=True):
@_tp_cache
def __getitem__(self, args):
- # Parameterizes an already-parameterized object.
- #
- # For example, we arrive here doing something like:
- # T1 = TypeVar('T1')
- # T2 = TypeVar('T2')
- # T3 = TypeVar('T3')
- # class A(Generic[T1]): pass
- # B = A[T2] # B is a _GenericAlias
- # C = B[T3] # Invokes _GenericAlias.__getitem__
- #
- # We also arrive here when parameterizing a generic `Callable` alias:
- # T = TypeVar('T')
- # C = Callable[[T], None]
- # C[int] # Invokes _GenericAlias.__getitem__
+ """Parameterizes an already-parameterized object.
+
+ For example, we arrive here doing something like:
+ T1 = TypeVar('T1')
+ T2 = TypeVar('T2')
+ T3 = TypeVar('T3')
+ class A(Generic[T1]): pass
+ B = A[T2] # B is a _GenericAlias
+ C = B[T3] # Invokes _GenericAlias.__getitem__
+
+ We also arrive here when parameterizing a generic `Callable` alias:
+ T = TypeVar('T')
+ C = Callable[[T], None]
+ C[int] # Invokes _GenericAlias.__getitem__
+ """
if self.__origin__ in (Generic, Protocol):
# Can't subscript Generic[...] or Protocol[...].
@@ -1496,20 +1501,20 @@ class _GenericAlias(_BaseGenericAlias, _root=True):
return r
def _determine_new_args(self, args):
- # Determines new __args__ for __getitem__.
- #
- # For example, suppose we had:
- # T1 = TypeVar('T1')
- # T2 = TypeVar('T2')
- # class A(Generic[T1, T2]): pass
- # T3 = TypeVar('T3')
- # B = A[int, T3]
- # C = B[str]
- # `B.__args__` is `(int, T3)`, so `C.__args__` should be `(int, str)`.
- # Unfortunately, this is harder than it looks, because if `T3` is
- # anything more exotic than a plain `TypeVar`, we need to consider
- # edge cases.
+ """Determines new __args__ for __getitem__.
+ For example, suppose we had:
+ T1 = TypeVar('T1')
+ T2 = TypeVar('T2')
+ class A(Generic[T1, T2]): pass
+ T3 = TypeVar('T3')
+ B = A[int, T3]
+ C = B[str]
+ `B.__args__` is `(int, T3)`, so `C.__args__` should be `(int, str)`.
+ Unfortunately, this is harder than it looks, because if `T3` is
+ anything more exotic than a plain `TypeVar`, we need to consider
+ edge cases.
+ """
params = self.__parameters__
# In the example above, this would be {T3: str}
for param in params:
@@ -1881,7 +1886,7 @@ def Unpack(self, parameters):
def foo(**kwargs: Unpack[Movie]): ...
Note that there is only some runtime checking of this operator. Not
- everything the runtime allows may be accepted by static type checkers.
+ everything the runtime allows is accepted by static type checkers.
For more information, see PEPs 646 and 692.
"""
@@ -2347,7 +2352,7 @@ def runtime_checkable(cls):
Such protocol can be used with isinstance() and issubclass().
Raise TypeError if applied to a non-protocol class.
This allows a simple-minded structural check very similar to
- one trick ponies in collections.abc such as Iterable.
+ one-trick ponies in collections.abc such as Iterable.
For example::
@@ -2418,8 +2423,8 @@ _allowed_types = (types.FunctionType, types.BuiltinFunctionType,
def get_type_hints(obj, globalns=None, localns=None, include_extras=False):
"""Return type hints for an object.
- This is often the same as obj.__annotations__, but it handles
- forward references encoded as string literals and recursively replaces all
+ This is often the same as inspect.get_annotations(obj) or obj.__annotations__,
+ but it handles forward references encoded as string literals and recursively replaces all
'Annotated[T, ...]' with 'T' (unless 'include_extras=True').
The argument may be a module, class, method, or function. The annotations
@@ -2483,8 +2488,12 @@ def get_type_hints(obj, globalns=None, localns=None, include_extras=False):
else:
nsobj = obj
# Find globalns for the unwrapped object.
+ seen = {id(nsobj)}
while hasattr(nsobj, '__wrapped__'):
nsobj = nsobj.__wrapped__
+ if id(nsobj) in seen:
+ raise ValueError(f'wrapper loop when unwrapping {obj!r}')
+ seen.add(id(nsobj))
globalns = getattr(nsobj, '__globals__', {})
if localns is None:
localns = globalns
@@ -2597,7 +2606,7 @@ def get_args(tp):
def is_typeddict(tp):
- """Check if an annotation is a TypedDict class.
+ """Check if an object is a TypedDict class.
For example::
@@ -2711,10 +2720,10 @@ _overload_registry = defaultdict(functools.partial(defaultdict, dict))
def overload(func):
"""Decorator for overloaded functions/methods.
- In a stub file, place two or more stub definitions for the same
- function in a row, each decorated with @overload.
-
- For example::
+ In a non-stub file, place two or more stub definitions for the same
+ function in a row, each decorated with @overload, followed
+ by an implementation. The implementation should *not*
+ be decorated with @overload::
@overload
def utf8(value: None) -> None: ...
@@ -2722,10 +2731,11 @@ def overload(func):
def utf8(value: bytes) -> bytes: ...
@overload
def utf8(value: str) -> bytes: ...
+ def utf8(value):
+ ... # implementation goes here
- In a non-stub file (i.e. a regular .py file), do the same but
- follow it with an implementation. The implementation should *not*
- be decorated with @overload::
+ In a stub file or in an abstract method (for example, in a Protocol definition),
+ the implementation may be omitted::
@overload
def utf8(value: None) -> None: ...
@@ -2733,8 +2743,6 @@ def overload(func):
def utf8(value: bytes) -> bytes: ...
@overload
def utf8(value: str) -> bytes: ...
- def utf8(value):
- ... # implementation goes here
The overloads for a function can be retrieved at runtime using the
get_overloads() function.
@@ -2770,7 +2778,7 @@ def final(f):
"""Decorator to indicate final methods and final classes.
Use this decorator to indicate to type checkers that the decorated
- method cannot be overridden, and decorated class cannot be subclassed.
+ method cannot be overridden, and the decorated class cannot be subclassed.
For example::
@@ -2812,7 +2820,7 @@ T_co = TypeVar('T_co', covariant=True) # Any type covariant containers.
V_co = TypeVar('V_co', covariant=True) # Any type covariant containers.
VT_co = TypeVar('VT_co', covariant=True) # Value type covariant containers.
T_contra = TypeVar('T_contra', contravariant=True) # Ditto contravariant.
-# Internal type variable used for Type[].
+# Internal type bound to class object types.
CT_co = TypeVar('CT_co', covariant=True, bound=type)
@@ -2903,7 +2911,7 @@ Type.__doc__ = \
And a function that takes a class argument that's a subclass of
User and returns an instance of the corresponding class::
- def new_user[U](user_class: Type[U]) -> U:
+ def new_user[U](user_class: type[U]) -> U:
user = user_class()
# (Here we could write the user object to a database)
return user
@@ -2916,7 +2924,7 @@ Type.__doc__ = \
@runtime_checkable
class SupportsInt(Protocol):
- """An ABC with one abstract method __int__."""
+ """A protocol with one abstract method __int__."""
__slots__ = ()
@@ -2927,7 +2935,7 @@ class SupportsInt(Protocol):
@runtime_checkable
class SupportsFloat(Protocol):
- """An ABC with one abstract method __float__."""
+ """A protocol with one abstract method __float__."""
__slots__ = ()
@@ -2938,7 +2946,7 @@ class SupportsFloat(Protocol):
@runtime_checkable
class SupportsComplex(Protocol):
- """An ABC with one abstract method __complex__."""
+ """A protocol with one abstract method __complex__."""
__slots__ = ()
@@ -2949,7 +2957,7 @@ class SupportsComplex(Protocol):
@runtime_checkable
class SupportsBytes(Protocol):
- """An ABC with one abstract method __bytes__."""
+ """A protocol with one abstract method __bytes__."""
__slots__ = ()
@@ -2960,7 +2968,7 @@ class SupportsBytes(Protocol):
@runtime_checkable
class SupportsIndex(Protocol):
- """An ABC with one abstract method __index__."""
+ """A protocol with one abstract method __index__."""
__slots__ = ()
@@ -2971,7 +2979,7 @@ class SupportsIndex(Protocol):
@runtime_checkable
class SupportsAbs[T](Protocol):
- """An ABC with one abstract method __abs__ that is covariant in its return type."""
+ """A protocol with one abstract method __abs__ that is covariant in its return type."""
__slots__ = ()
@@ -2982,7 +2990,7 @@ class SupportsAbs[T](Protocol):
@runtime_checkable
class SupportsRound[T](Protocol):
- """An ABC with one abstract method __round__ that is covariant in its return type."""
+ """A protocol with one abstract method __round__ that is covariant in its return type."""
__slots__ = ()
@@ -3061,7 +3069,7 @@ class NamedTupleMeta(type):
def NamedTuple(typename, fields=_sentinel, /, **kwargs):
- """Typed version of namedtuple.
+ """Typed version of collections.namedtuple.
Usage::
@@ -3073,8 +3081,8 @@ def NamedTuple(typename, fields=_sentinel, /, **kwargs):
Employee = collections.namedtuple('Employee', ['name', 'id'])
- The resulting class has an extra __annotations__ attribute, giving a
- dict that maps field names to types. (The field names are also in
+ The types for each field name can be retrieved by calling
+ inspect.get_annotations(Employee). (The field names are also in
the _fields attribute, which is part of the namedtuple API.)
An alternative equivalent functional syntax is also accepted::
@@ -3159,7 +3167,7 @@ class _TypedDictMeta(type):
This method is called when TypedDict is subclassed,
or when TypedDict is instantiated. This way
- TypedDict supports all three syntax forms described in its docstring.
+ TypedDict classes can be created through both class-based and functional syntax.
Subclasses and instances of TypedDict return actual dictionaries.
"""
for base in bases:
@@ -3272,14 +3280,22 @@ def TypedDict(typename, fields=_sentinel, /, *, total=True):
>>> Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
True
- The type info can be accessed via the Point2D.__annotations__ dict, and
- the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
+ The type info can be accessed by calling inspect.get_annotations(Point2D), and
+ via the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
TypedDict supports an additional equivalent form::
Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})
By default, all keys must be present in a TypedDict. It is possible
- to override this by specifying totality::
+ to override this by using the NotRequired and Required special forms::
+
+ class Point2D(TypedDict):
+ x: int # the "x" key must always be present (Required is the default)
+ y: NotRequired[int] # the "y" key can be omitted
+
+ This means that a Point2D TypedDict can have the "y" key omitted, but the "x" key must be present.
+ Items are required by default, so the Required special form is not necessary in this example.
+ In addition, the total argument to the TypedDict function can be used to make all items not required::
class Point2D(TypedDict, total=False):
x: int
@@ -3288,16 +3304,8 @@ def TypedDict(typename, fields=_sentinel, /, *, total=True):
This means that a Point2D TypedDict can have any of the keys omitted. A type
checker is only expected to support a literal False or True as the value of
the total argument. True is the default, and makes all items defined in the
- class body be required.
-
- The Required and NotRequired special forms can also be used to mark
- individual keys as being required or not required::
-
- class Point2D(TypedDict):
- x: int # the "x" key must always be present (Required is the default)
- y: NotRequired[int] # the "y" key can be omitted
-
- See PEP 655 for more details on Required and NotRequired.
+ class body be required. The Required special form can be used to mark individual
+ keys as required in a total=False TypedDict.
The ReadOnly special form can be used
to mark individual keys as immutable for type checkers::
@@ -3306,6 +3314,7 @@ def TypedDict(typename, fields=_sentinel, /, *, total=True):
id: ReadOnly[int] # the "id" key must not be modified
username: str # the "username" key can be changed
+ See PEPs 589, 655, and 705 for more information.
"""
if fields is _sentinel or fields is None:
import warnings
@@ -3352,7 +3361,7 @@ def Required(self, parameters):
year: int
m = Movie(
- title='The Matrix', # typechecker error if key is omitted
+ title='The Matrix', # type checker error if key is omitted
year=1999,
)
@@ -3374,7 +3383,7 @@ def NotRequired(self, parameters):
year: NotRequired[int]
m = Movie(
- title='The Matrix', # typechecker error if key is omitted
+ title='The Matrix', # type checker error if key is omitted
year=1999,
)
"""
@@ -3394,7 +3403,7 @@ def ReadOnly(self, parameters):
def mutate_movie(m: Movie) -> None:
m["year"] = 1992 # allowed
- m["title"] = "The Matrix" # typechecker error
+ m["title"] = "The Matrix" # type checker error
There is no runtime checking for this property.
"""
@@ -3481,8 +3490,8 @@ class IO(Generic[AnyStr]):
classes (text vs. binary, read vs. write vs. read/write,
append-only, unbuffered). The TextIO and BinaryIO subclasses
below capture the distinctions between text vs. binary, which is
- pervasive in the interface; however we currently do not offer a
- way to track the other distinctions in the type system.
+ pervasive in the interface. For more precise types, define a custom
+ Protocol.
"""
__slots__ = ()
@@ -3572,7 +3581,7 @@ class IO(Generic[AnyStr]):
class BinaryIO(IO[bytes]):
- """Typed version of the return of open() in binary mode."""
+ """Typed approximation of the return of open() in binary mode."""
__slots__ = ()
@@ -3586,7 +3595,7 @@ class BinaryIO(IO[bytes]):
class TextIO(IO[str]):
- """Typed version of the return of open() in text mode."""
+ """Typed approximation of the return of open() in text mode."""
__slots__ = ()
@@ -3653,7 +3662,7 @@ def dataclass_transform(
field_specifiers: tuple[type[Any] | Callable[..., Any], ...] = (),
**kwargs: Any,
) -> _IdentityCallable:
- """Decorator to mark an object as providing dataclass-like behaviour.
+ """Decorator to mark an object as providing dataclass-like behavior.
The decorator can be applied to a function, class, or metaclass.
diff --git a/contrib/tools/python3/Lib/unittest/mock.py b/contrib/tools/python3/Lib/unittest/mock.py
index b6dd1c27fee..bf32ff6dd3c 100644
--- a/contrib/tools/python3/Lib/unittest/mock.py
+++ b/contrib/tools/python3/Lib/unittest/mock.py
@@ -3102,6 +3102,10 @@ class ThreadingMixin(Base):
return ret_value
+ def _increment_mock_call(self, /, *args, **kwargs):
+ with self._mock_calls_events_lock:
+ super()._increment_mock_call(*args, **kwargs)
+
def wait_until_called(self, *, timeout=_timeout_unset):
"""Wait until the mock object is called.
diff --git a/contrib/tools/python3/Lib/urllib/robotparser.py b/contrib/tools/python3/Lib/urllib/robotparser.py
index 63689816f30..d055fd4e41b 100644
--- a/contrib/tools/python3/Lib/urllib/robotparser.py
+++ b/contrib/tools/python3/Lib/urllib/robotparser.py
@@ -7,7 +7,7 @@
2) PSF license for Python 2.2
The robots.txt Exclusion Protocol is implemented as specified in
- http://www.robotstxt.org/norobots-rfc.txt
+ RFC 9309
"""
import collections
@@ -21,19 +21,6 @@ __all__ = ["RobotFileParser"]
RequestRate = collections.namedtuple("RequestRate", "requests seconds")
-def normalize(path):
- unquoted = urllib.parse.unquote(path, errors='surrogateescape')
- return urllib.parse.quote(unquoted, errors='surrogateescape')
-
-def normalize_path(path):
- path, sep, query = path.partition('?')
- path = normalize(path)
- if sep:
- query = re.sub(r'[^=&]+', lambda m: normalize(m[0]), query)
- path += '?' + query
- return path
-
-
class RobotFileParser:
""" This class provides a set of methods to read, parse and answer
questions about a single robots.txt file.
@@ -42,6 +29,7 @@ class RobotFileParser:
def __init__(self, url=''):
self.entries = []
+ self.groups = {}
self.sitemaps = []
self.default_entry = None
self.disallow_all = False
@@ -86,13 +74,13 @@ class RobotFileParser:
self.parse(raw.decode("utf-8", "surrogateescape").splitlines())
def _add_entry(self, entry):
- if "*" in entry.useragents:
- # the default entry is considered last
- if self.default_entry is None:
- # the first default entry wins
- self.default_entry = entry
- else:
- self.entries.append(entry)
+ self.entries.append(entry)
+ for agent in entry.useragents:
+ agent = agent.lower()
+ if agent not in self.groups:
+ self.groups[agent] = entry
+ else:
+ self.groups[agent] = merge_entries(self.groups[agent], entry)
def parse(self, lines):
"""Parse the input lines from a robots.txt file.
@@ -100,6 +88,7 @@ class RobotFileParser:
We allow that a user-agent: line is not preceded by
one or more blank lines.
"""
+ entries = []
# states:
# 0: start state
# 1: saw user-agent line
@@ -109,14 +98,6 @@ class RobotFileParser:
self.modified()
for line in lines:
- if not line:
- if state == 1:
- entry = Entry()
- state = 0
- elif state == 2:
- self._add_entry(entry)
- entry = Entry()
- state = 0
# remove optional comment and strip line
i = line.find('#')
if i >= 0:
@@ -132,16 +113,23 @@ class RobotFileParser:
if state == 2:
self._add_entry(entry)
entry = Entry()
- entry.useragents.append(line[1])
+ product_token = line[1]
+ entry.useragents.append(product_token)
state = 1
elif line[0] == "disallow":
if state != 0:
- entry.rulelines.append(RuleLine(line[1], False))
state = 2
+ try:
+ entry.rulelines.append(RuleLine(line[1], False))
+ except ValueError:
+ pass
elif line[0] == "allow":
if state != 0:
- entry.rulelines.append(RuleLine(line[1], True))
state = 2
+ try:
+ entry.rulelines.append(RuleLine(line[1], True))
+ except ValueError:
+ pass
elif line[0] == "crawl-delay":
if state != 0:
# before trying to convert to int we need to make
@@ -164,9 +152,18 @@ class RobotFileParser:
# so it doesn't matter where you place it in your file."
# Therefore we do not change the state of the parser.
self.sitemaps.append(line[1])
- if state == 2:
+ if state != 0:
self._add_entry(entry)
+ def _find_entry(self, useragent):
+ entry = self.groups.get(useragent.lower())
+ if entry is not None:
+ return entry
+ for entry in self.groups.values():
+ if entry.applies_to(useragent):
+ return entry
+ return self.groups.get('*')
+
def can_fetch(self, useragent, url):
"""using the parsed robots.txt decide if useragent can fetch url"""
if self.disallow_all:
@@ -183,37 +180,32 @@ class RobotFileParser:
# the first match counts
parsed_url = urllib.parse.urlsplit(url)
url = urllib.parse.urlunsplit(('', '', *parsed_url[2:]))
- url = normalize_path(url)
+ url = normalize_uri(url)
if not url:
url = "/"
- for entry in self.entries:
- if entry.applies_to(useragent):
- return entry.allowance(url)
- # try the default entry last
- if self.default_entry:
- return self.default_entry.allowance(url)
- # agent not found ==> access granted
- return True
+ if url == '/robots.txt':
+ # The /robots.txt URI is implicitly allowed.
+ return True
+ entry = self._find_entry(useragent)
+ if entry is None:
+ return True
+ return entry.allowance(url)
def crawl_delay(self, useragent):
if not self.mtime():
return None
- for entry in self.entries:
- if entry.applies_to(useragent):
- return entry.delay
- if self.default_entry:
- return self.default_entry.delay
- return None
+ entry = self._find_entry(useragent)
+ if entry is None:
+ return None
+ return entry.delay
def request_rate(self, useragent):
if not self.mtime():
return None
- for entry in self.entries:
- if entry.applies_to(useragent):
- return entry.req_rate
- if self.default_entry:
- return self.default_entry.req_rate
- return None
+ entry = self._find_entry(useragent)
+ if entry is None:
+ return None
+ return entry.req_rate
def site_maps(self):
if not self.sitemaps:
@@ -224,7 +216,7 @@ class RobotFileParser:
entries = self.entries
if self.default_entry is not None:
entries = entries + [self.default_entry]
- return '\n\n'.join(map(str, entries))
+ return '\n\n'.join(filter(None, map(str, entries)))
class RuleLine:
"""A rule line is a single "Allow:" (allowance==True) or "Disallow:"
@@ -233,14 +225,42 @@ class RuleLine:
if path == '' and not allowance:
# an empty value means allow all
allowance = True
- self.path = normalize_path(path)
+ path = re.sub(r'[*]{2,}', '*', path)
+ path = re.sub(r'[$][$*]+', '$', path)
+ path = normalize_pattern(path)
+ self.fullmatch = path.endswith('$')
+ path = path.rstrip('$')
+ if '$' in path:
+ raise ValueError('$ not at the end of path')
+ self.matcher = None
+ if '*' in path:
+ pattern = re.compile(translate_pattern(path), re.DOTALL)
+ if self.fullmatch:
+ self.matcher = pattern.fullmatch
+ else:
+ self.matcher = pattern.match
+ self.path = path
self.allowance = allowance
def applies_to(self, filename):
- return self.path == "*" or filename.startswith(self.path)
+ # If the filename matches the rule, return the matching length plus 1.
+ # If it does not match, return 0.
+ if self.matcher is not None:
+ m = self.matcher(filename)
+ if m:
+ return m.end() + 1
+ else:
+ if self.fullmatch:
+ if filename == self.path:
+ return len(self.path) + 1
+ else:
+ if filename.startswith(self.path):
+ return len(self.path) + 1
+ return 0
def __str__(self):
- return ("Allow" if self.allowance else "Disallow") + ": " + self.path
+ return (("Allow" if self.allowance else "Disallow") + ": " + self.path
+ + ('$' if self.fullmatch else ''))
class Entry:
@@ -252,6 +272,8 @@ class Entry:
self.req_rate = None
def __str__(self):
+ if not self.useragents:
+ return ''
ret = []
for agent in self.useragents:
ret.append(f"User-agent: {agent}")
@@ -260,27 +282,74 @@ class Entry:
if self.req_rate is not None:
rate = self.req_rate
ret.append(f"Request-rate: {rate.requests}/{rate.seconds}")
- ret.extend(map(str, self.rulelines))
+ if self.rulelines:
+ ret.extend(map(str, self.rulelines))
+ else:
+ ret.append("Allow:")
return '\n'.join(ret)
def applies_to(self, useragent):
"""check if this entry applies to the specified agent"""
+ if useragent is None:
+ return '*' in self.useragents
# split the name token and make it lower case
useragent = useragent.split("/")[0].lower()
for agent in self.useragents:
- if agent == '*':
- # we have the catch-all agent
- return True
- agent = agent.lower()
- if agent in useragent:
- return True
+ if agent != '*':
+ agent = agent.lower()
+ if agent in useragent:
+ return True
return False
def allowance(self, filename):
"""Preconditions:
- our agent applies to this entry
- - filename is URL encoded"""
+ - filename is URL encoded
+ """
+ best_match = -1
+ allowance = True
for line in self.rulelines:
- if line.applies_to(filename):
- return line.allowance
- return True
+ m = line.applies_to(filename)
+ if m:
+ if m > best_match:
+ best_match = m
+ allowance = line.allowance
+ elif m == best_match and not allowance:
+ allowance = line.allowance
+ return allowance
+
+
+def normalize(path):
+ unquoted = urllib.parse.unquote(path, errors='surrogateescape')
+ return urllib.parse.quote(unquoted, errors='surrogateescape')
+
+def normalize_uri(path):
+ path, sep, query = path.partition('?')
+ path = normalize(path)
+ if sep:
+ query = re.sub(r'[^=&]+', lambda m: normalize(m[0]), query)
+ path += '?' + query
+ return path
+
+def normalize_pattern(path):
+ path, sep, query = path.partition('?')
+ path = re.sub(r'[^*$]+', lambda m: normalize(m[0]), path)
+ if sep:
+ query = re.sub(r'[^=&*$]+', lambda m: normalize(m[0]), query)
+ path += '?' + query
+ return path
+
+def translate_pattern(path):
+ parts = list(map(re.escape, path.split('*')))
+ for i in range(1, len(parts)-1):
+ parts[i] = f'(?>.*?{parts[i]})'
+ parts[-1] = f'.*{parts[-1]}'
+ return ''.join(parts)
+
+def merge_entries(e1, e2):
+ entry = Entry()
+ entry.useragents = list(filter(set(e2.useragents).__contains__, e1.useragents))
+ entry.rulelines = e1.rulelines + e2.rulelines
+ entry.delay = e1.delay if e2.delay is None else e2.delay
+ entry.req_rate = e1.req_rate if e2.req_rate is None else e2.req_rate
+ return entry
diff --git a/contrib/tools/python3/Lib/venv/scripts/common/activate b/contrib/tools/python3/Lib/venv/scripts/common/activate
index 70673a265d4..241a8650bda 100644
--- a/contrib/tools/python3/Lib/venv/scripts/common/activate
+++ b/contrib/tools/python3/Lib/venv/scripts/common/activate
@@ -17,7 +17,7 @@ deactivate () {
# Call hash to forget past locations. Without forgetting
# past locations the $PATH changes we made may not be respected.
# See "man bash" for more details. hash is usually a builtin of your shell
- hash -r 2> /dev/null
+ hash -r 2> /dev/null || true
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
PS1="${_OLD_VIRTUAL_PS1:-}"
@@ -73,4 +73,4 @@ fi
# Call hash to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
-hash -r 2> /dev/null
+hash -r 2> /dev/null || true
diff --git a/contrib/tools/python3/Lib/webbrowser.py b/contrib/tools/python3/Lib/webbrowser.py
index ee5824100c7..be033d707a9 100755
--- a/contrib/tools/python3/Lib/webbrowser.py
+++ b/contrib/tools/python3/Lib/webbrowser.py
@@ -275,7 +275,6 @@ class UnixBrowser(BaseBrowser):
def open(self, url, new=0, autoraise=True):
sys.audit("webbrowser.open", url)
- self._check_url(url)
if new == 0:
action = self.remote_action
elif new == 1:
@@ -289,7 +288,9 @@ class UnixBrowser(BaseBrowser):
raise Error("Bad 'new' parameter to open(); "
f"expected 0, 1, or 2, got {new}")
- args = [arg.replace("%s", url).replace("%action", action)
+ self._check_url(url.replace("%action", action))
+
+ args = [arg.replace("%action", action).replace("%s", url)
for arg in self.remote_args]
args = [arg for arg in args if arg]
success = self._invoke(args, True, autoraise, url)
diff --git a/contrib/tools/python3/Lib/xml/etree/ElementTree.py b/contrib/tools/python3/Lib/xml/etree/ElementTree.py
index 9bb09ab5407..ef162a967d8 100644
--- a/contrib/tools/python3/Lib/xml/etree/ElementTree.py
+++ b/contrib/tools/python3/Lib/xml/etree/ElementTree.py
@@ -8,8 +8,8 @@
2. Element represents a single node in this tree.
Interactions with the whole document (reading and writing to/from files) are
- usually done on the ElementTree level. Interactions with a single XML element
- and its sub-elements are done on the Element level.
+ usually done on the ElementTree level. Interactions with a single XML
+ element and its sub-elements are done on the Element level.
Element is a flexible container object designed to store hierarchical data
structures in memory. It can be described as a cross between a list and a
@@ -273,7 +273,8 @@ class Element:
"""Find first matching element by tag name or path.
*path* is a string having either an element tag or an XPath,
- *namespaces* is an optional mapping from namespace prefix to full name.
+ *namespaces* is an optional mapping from namespace prefix to full
+ name.
Return the first matching element, or None if no element was found.
@@ -285,7 +286,8 @@ class Element:
*path* is a string having either an element tag or an XPath,
*default* is the value to return if the element was not found,
- *namespaces* is an optional mapping from namespace prefix to full name.
+ *namespaces* is an optional mapping from namespace prefix to full
+ name.
Return text content of first matching element, or default value if
none was found. Note that if an element is found having no text
@@ -298,7 +300,8 @@ class Element:
"""Find all matching subelements by tag name or path.
*path* is a string having either an element tag or an XPath,
- *namespaces* is an optional mapping from namespace prefix to full name.
+ *namespaces* is an optional mapping from namespace prefix to full
+ name.
Returns list containing all matching elements in document order.
@@ -309,7 +312,8 @@ class Element:
"""Find all matching subelements by tag name or path.
*path* is a string having either an element tag or an XPath,
- *namespaces* is an optional mapping from namespace prefix to full name.
+ *namespaces* is an optional mapping from namespace prefix to full
+ name.
Return an iterable yielding all matching elements in document order.
@@ -549,8 +553,8 @@ class ElementTree:
def parse(self, source, parser=None):
"""Load external XML document into element tree.
- *source* is a file name or file object, *parser* is an optional parser
- instance that defaults to XMLParser.
+ *source* is a file name or file object, *parser* is an optional
+ parser instance that defaults to XMLParser.
ParseError is raised if the parser fails to parse the document.
@@ -583,7 +587,8 @@ class ElementTree:
def iter(self, tag=None):
"""Create and return tree iterator for the root element.
- The iterator loops over all elements in this tree, in document order.
+ The iterator loops over all elements in this tree, in document
+ order.
*tag* is a string with the tag name to iterate over
(default is to return all elements).
@@ -598,7 +603,8 @@ class ElementTree:
Same as getroot().find(path), which is Element.find()
*path* is a string having either an element tag or an XPath,
- *namespaces* is an optional mapping from namespace prefix to full name.
+ *namespaces* is an optional mapping from namespace prefix to full
+ name.
Return the first matching element, or None if no element was found.
@@ -620,7 +626,8 @@ class ElementTree:
Same as getroot().findtext(path), which is Element.findtext()
*path* is a string having either an element tag or an XPath,
- *namespaces* is an optional mapping from namespace prefix to full name.
+ *namespaces* is an optional mapping from namespace prefix to full
+ name.
Return the first matching element, or None if no element was found.
@@ -642,7 +649,8 @@ class ElementTree:
Same as getroot().findall(path), which is Element.findall().
*path* is a string having either an element tag or an XPath,
- *namespaces* is an optional mapping from namespace prefix to full name.
+ *namespaces* is an optional mapping from namespace prefix to full
+ name.
Return list containing all matching elements in document order.
@@ -689,24 +697,26 @@ class ElementTree:
"""Write element tree to a file as XML.
Arguments:
- *file_or_filename* -- file name or a file object opened for writing
+ *file_or_filename* -- file name or a file object opened for
+ writing
*encoding* -- the output encoding (default: US-ASCII)
- *xml_declaration* -- bool indicating if an XML declaration should be
- added to the output. If None, an XML declaration
- is added if encoding IS NOT either of:
- US-ASCII, UTF-8, or Unicode
+ *xml_declaration* -- bool indicating if an XML declaration should
+ be added to the output. If None, an XML
+ declaration is added if encoding IS NOT
+ either of: US-ASCII, UTF-8, or Unicode
- *default_namespace* -- sets the default XML namespace (for "xmlns")
+ *default_namespace* -- sets the default XML namespace (for
+ "xmlns")
*method* -- either "xml" (default), "html, "text", or "c14n"
*short_empty_elements* -- controls the formatting of elements
- that contain no content. If True (default)
- they are emitted as a single self-closed
- tag, otherwise they are emitted as a pair
- of start/end tags
+ that contain no content. If True
+ (default) they are emitted as a single
+ self-closed tag, otherwise they are
+ emitted as a pair of start/end tags
"""
if self._root is None:
@@ -903,9 +913,12 @@ def _serialize_xml(write, elem, qnames, namespaces,
if elem.tail:
write(_escape_cdata(elem.tail))
+_CDATA_CONTENT_ELEMENTS = {"script", "style", "xmp", "iframe", "noembed",
+ "noframes", "plaintext"}
+
HTML_EMPTY = {"area", "base", "basefont", "br", "col", "embed", "frame", "hr",
"img", "input", "isindex", "link", "meta", "param", "source",
- "track", "wbr"}
+ "track", "wbr", "plaintext"}
def _serialize_html(write, elem, qnames, namespaces, **kwargs):
tag = elem.tag
@@ -946,7 +959,7 @@ def _serialize_html(write, elem, qnames, namespaces, **kwargs):
write(">")
ltag = tag.lower()
if text:
- if ltag == "script" or ltag == "style":
+ if ltag in _CDATA_CONTENT_ELEMENTS:
write(text)
else:
write(_escape_cdata(text))
@@ -1079,9 +1092,9 @@ def tostring(element, encoding=None, method=None, *,
is returned. Otherwise a bytestring is returned.
*element* is an Element instance, *encoding* is an optional output
- encoding defaulting to US-ASCII, *method* is an optional output which can
- be one of "xml" (default), "html", "text" or "c14n", *default_namespace*
- sets the default XML namespace (for "xmlns").
+ encoding defaulting to US-ASCII, *method* is an optional output which
+ can be one of "xml" (default), "html", "text" or "c14n",
+ *default_namespace* sets the default XML namespace (for "xmlns").
Returns an (optionally) encoded string containing the XML data.
@@ -1221,7 +1234,8 @@ def iterparse(source, events=None, parser=None):
"end" events are reported.
*source* is a filename or file object containing XML data, *events* is
- a list of events to report back, *parser* is an optional parser instance.
+ a list of events to report back, *parser* is an optional parser
+ instance.
Returns an iterator providing (event, elem) pairs.
@@ -1753,10 +1767,11 @@ class XMLParser:
def canonicalize(xml_data=None, *, out=None, from_file=None, **options):
"""Convert XML to its C14N 2.0 serialised form.
- If *out* is provided, it must be a file or file-like object that receives
- the serialised canonical XML output (text, not bytes) through its ``.write()``
- method. To write to a file, open it in text mode with encoding "utf-8".
- If *out* is not provided, this function returns the output as text string.
+ If *out* is provided, it must be a file or file-like object that
+ receives the serialised canonical XML output (text, not bytes) through
+ its ``.write()`` method. To write to a file, open it in text mode with
+ encoding "utf-8". If *out* is not provided, this function returns the
+ output as text string.
Either *xml_data* (an XML string) or *from_file* (a file path or
file-like object) must be provided as input.
@@ -1790,19 +1805,22 @@ class C14NWriterTarget:
Serialises parse events to XML C14N 2.0.
The *write* function is used for writing out the resulting data stream
- as text (not bytes). To write to a file, open it in text mode with encoding
- "utf-8" and pass its ``.write`` method.
+ as text (not bytes). To write to a file, open it in text mode with
+ encoding "utf-8" and pass its ``.write`` method.
Configuration options:
- *with_comments*: set to true to include comments
- - *strip_text*: set to true to strip whitespace before and after text content
- - *rewrite_prefixes*: set to true to replace namespace prefixes by "n{number}"
+ - *strip_text*: set to true to strip whitespace before and after text
+ content
+ - *rewrite_prefixes*: set to true to replace namespace prefixes by
+ "n{number}"
- *qname_aware_tags*: a set of qname aware tag names in which prefixes
should be replaced in text content
- - *qname_aware_attrs*: a set of qname aware attribute names in which prefixes
- should be replaced in text content
- - *exclude_attrs*: a set of attribute names that should not be serialised
+ - *qname_aware_attrs*: a set of qname aware attribute names in which
+ prefixes should be replaced in text content
+ - *exclude_attrs*: a set of attribute names that should not be
+ serialised
- *exclude_tags*: a set of tag names that should not be serialised
"""
def __init__(self, write, *,
diff --git a/contrib/tools/python3/Lib/xmlrpc/client.py b/contrib/tools/python3/Lib/xmlrpc/client.py
index f441376d09c..84e4e4d11a7 100644
--- a/contrib/tools/python3/Lib/xmlrpc/client.py
+++ b/contrib/tools/python3/Lib/xmlrpc/client.py
@@ -965,7 +965,7 @@ def dumps(params, methodname=None, methodresponse=None, encoding=None,
data = (
xmlheader,
"<methodCall>\n"
- "<methodName>", methodname, "</methodName>\n",
+ "<methodName>", escape(methodname), "</methodName>\n",
data,
"</methodCall>\n"
)
diff --git a/contrib/tools/python3/Lib/ya.make b/contrib/tools/python3/Lib/ya.make
index 65c28a37639..871099f3685 100644
--- a/contrib/tools/python3/Lib/ya.make
+++ b/contrib/tools/python3/Lib/ya.make
@@ -4,9 +4,9 @@ ENABLE(PYBUILD_NO_PY)
PY3_LIBRARY()
-VERSION(3.13.13)
+VERSION(3.13.14)
-ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.13.13.tar.gz)
+ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.13.14.tar.gz)
LICENSE(Python-2.0)
diff --git a/contrib/tools/python3/Lib/zipfile/__init__.py b/contrib/tools/python3/Lib/zipfile/__init__.py
index 3d889e9c4f1..37555d32d99 100644
--- a/contrib/tools/python3/Lib/zipfile/__init__.py
+++ b/contrib/tools/python3/Lib/zipfile/__init__.py
@@ -531,8 +531,12 @@ class ZipInfo:
return header + filename + extra
def _encodeFilenameFlags(self):
+ if self.flag_bits & _MASK_UTF_FILENAME:
+ encoding = 'ascii'
+ else:
+ encoding = 'cp437'
try:
- return self.filename.encode('ascii'), self.flag_bits
+ return self.filename.encode(encoding), self.flag_bits & ~_MASK_UTF_FILENAME
except UnicodeEncodeError:
return self.filename.encode('utf-8'), self.flag_bits | _MASK_UTF_FILENAME
@@ -585,11 +589,12 @@ class ZipInfo:
def from_file(cls, filename, arcname=None, *, strict_timestamps=True):
"""Construct an appropriate ZipInfo for a file on the filesystem.
- filename should be the path to a file or directory on the filesystem.
+ filename should be the path to a file or directory on the
+ filesystem.
- arcname is the name which it will have within the archive (by default,
- this will be the same as filename, but without a drive letter and with
- leading path separators removed).
+ arcname is the name which it will have within the archive (by
+ default, this will be the same as filename, but without a drive
+ letter and with leading path separators removed).
"""
if isinstance(filename, os.PathLike):
filename = os.fspath(filename)
@@ -1326,25 +1331,26 @@ class ZipFile:
mode: The mode can be either read 'r', write 'w', exclusive create 'x',
or append 'a'.
compression: ZIP_STORED (no compression), ZIP_DEFLATED (requires zlib),
- ZIP_BZIP2 (requires bz2) or ZIP_LZMA (requires lzma).
- allowZip64: if True ZipFile will create files with ZIP64 extensions when
- needed, otherwise it will raise an exception when this would
- be necessary.
- compresslevel: None (default for the given compression type) or an integer
- specifying the level to pass to the compressor.
- When using ZIP_STORED or ZIP_LZMA this keyword has no effect.
- When using ZIP_DEFLATED integers 0 through 9 are accepted.
- When using ZIP_BZIP2 integers 1 through 9 are accepted.
+ ZIP_BZIP2 (requires bz2) or ZIP_LZMA (requires lzma).
+ allowZip64: if True ZipFile will create files with ZIP64 extensions
+ when needed, otherwise it will raise an exception when this
+ would be necessary.
+ compresslevel: None (default for the given compression type) or
+ an integer specifying the level to pass to the compressor.
+ When using ZIP_STORED or ZIP_LZMA this keyword has no effect.
+ When using ZIP_DEFLATED integers 0 through 9 are accepted.
+ When using ZIP_BZIP2 integers 1 through 9 are accepted.
"""
fp = None # Set here since __del__ checks it
_windows_illegal_name_trans_table = None
+ _ignore_invalid_names = False
def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=True,
compresslevel=None, *, strict_timestamps=True, metadata_encoding=None):
- """Open the ZIP file with mode read 'r', write 'w', exclusive create 'x',
- or append 'a'."""
+ """Open the ZIP file with mode read 'r', write 'w', exclusive create
+ 'x', or append 'a'."""
if mode not in ('r', 'w', 'x', 'a'):
raise ValueError("ZipFile requires mode 'r', 'w', 'x', or 'a'")
@@ -1626,10 +1632,10 @@ class ZipFile:
pwd is the password to decrypt files (only used for reading).
- When writing, if the file size is not known in advance but may exceed
- 2 GiB, pass force_zip64 to use the ZIP64 format, which can handle large
- files. If the size is known in advance, it is best to pass a ZipInfo
- instance for name, with zinfo.file_size set.
+ When writing, if the file size is not known in advance but may
+ exceed 2 GiB, pass force_zip64 to use the ZIP64 format, which can
+ handle large files. If the size is known in advance, it is best to
+ pass a ZipInfo instance for name, with zinfo.file_size set.
"""
if mode not in {"r", "w"}:
raise ValueError('open() requires mode "r" or "w"')
@@ -1741,7 +1747,7 @@ class ZipFile:
zinfo.compress_size = 0
zinfo.CRC = 0
- zinfo.flag_bits = 0x00
+ zinfo.flag_bits = _MASK_UTF_FILENAME
if zinfo.compress_type == ZIP_LZMA:
# Compressed data includes an end-of-stream (EOS) marker
zinfo.flag_bits |= _MASK_COMPRESS_OPTION_1
@@ -1824,21 +1830,31 @@ class ZipFile:
# build the destination pathname, replacing
# forward slashes to platform specific separators.
- arcname = member.filename.replace('/', os.path.sep)
-
- if os.path.altsep:
+ arcname = member.filename
+ if os.path.sep != '/':
+ arcname = arcname.replace('/', os.path.sep)
+ if os.path.altsep and os.path.altsep != '/':
arcname = arcname.replace(os.path.altsep, os.path.sep)
# interpret absolute pathname as relative, remove drive letter or
# UNC path, redundant separators, "." and ".." components.
- arcname = os.path.splitdrive(arcname)[1]
+ drive, root, arcname = os.path.splitroot(arcname)
+ if self._ignore_invalid_names and (drive or root):
+ return None
+ if self._ignore_invalid_names and os.path.pardir in arcname.split(os.path.sep):
+ return None
invalid_path_parts = ('', os.path.curdir, os.path.pardir)
arcname = os.path.sep.join(x for x in arcname.split(os.path.sep)
if x not in invalid_path_parts)
if os.path.sep == '\\':
# filter illegal characters on Windows
- arcname = self._sanitize_windows_name(arcname, os.path.sep)
+ arcname2 = self._sanitize_windows_name(arcname, os.path.sep)
+ if self._ignore_invalid_names and arcname2 != arcname:
+ return None
+ arcname = arcname2
if not arcname and not member.is_dir():
+ if self._ignore_invalid_names:
+ return None
raise ValueError("Empty filename.")
targetpath = os.path.join(targetpath, arcname)
diff --git a/contrib/tools/python3/Modules/_abc.c b/contrib/tools/python3/Modules/_abc.c
index 4f4b24b035d..baffb80ffe6 100644
--- a/contrib/tools/python3/Modules/_abc.c
+++ b/contrib/tools/python3/Modules/_abc.c
@@ -907,14 +907,14 @@ _abc.get_cache_token
Returns the current ABC cache token.
-The token is an opaque object (supporting equality testing) identifying the
-current version of the ABC cache for virtual subclasses. The token changes
-with every call to register() on any ABC.
+The token is an opaque object (supporting equality testing) identifying
+the current version of the ABC cache for virtual subclasses. The token
+changes with every call to register() on any ABC.
[clinic start generated code]*/
static PyObject *
_abc_get_cache_token_impl(PyObject *module)
-/*[clinic end generated code: output=c7d87841e033dacc input=70413d1c423ad9f9]*/
+/*[clinic end generated code: output=c7d87841e033dacc input=d87acc04492f6bf3]*/
{
_abcmodule_state *state = get_abc_state(module);
return PyLong_FromUnsignedLongLong(get_invalidation_counter(state));
diff --git a/contrib/tools/python3/Modules/_asynciomodule.c b/contrib/tools/python3/Modules/_asynciomodule.c
index 0ed899f5a7c..857cb06d013 100644
--- a/contrib/tools/python3/Modules/_asynciomodule.c
+++ b/contrib/tools/python3/Modules/_asynciomodule.c
@@ -781,12 +781,13 @@ Return the result this future represents.
If the future has been cancelled, raises CancelledError. If the
future's result isn't yet available, raises InvalidStateError. If
-the future is done and has an exception set, this exception is raised.
+the future is done and has an exception set, this exception is
+raised.
[clinic start generated code]*/
static PyObject *
_asyncio_Future_result_impl(FutureObj *self)
-/*[clinic end generated code: output=f35f940936a4b1e5 input=49ecf9cf5ec50dc5]*/
+/*[clinic end generated code: output=f35f940936a4b1e5 input=c7361d75834bb8cd]*/
{
asyncio_state *state = get_asyncio_state_by_def((PyObject *)self);
PyObject *result;
@@ -917,15 +918,15 @@ _asyncio.Future.add_done_callback
Add a callback to be run when the future becomes done.
-The callback is called with a single argument - the future object. If
-the future is already done when this is called, the callback is
+The callback is called with a single argument - the future object.
+If the future is already done when this is called, the callback is
scheduled with call_soon.
[clinic start generated code]*/
static PyObject *
_asyncio_Future_add_done_callback_impl(FutureObj *self, PyTypeObject *cls,
PyObject *fn, PyObject *context)
-/*[clinic end generated code: output=922e9a4cbd601167 input=599261c521458cc2]*/
+/*[clinic end generated code: output=922e9a4cbd601167 input=1b96105434e0a562]*/
{
asyncio_state *state = get_asyncio_state_by_cls(cls);
if (context == NULL) {
@@ -1072,15 +1073,15 @@ _asyncio.Future.cancel
Cancel the future and schedule callbacks.
-If the future is already done or cancelled, return False. Otherwise,
-change the future's state to cancelled, schedule the callbacks and
-return True.
+If the future is already done or cancelled, return False.
+Otherwise, change the future's state to cancelled, schedule the
+callbacks and return True.
[clinic start generated code]*/
static PyObject *
_asyncio_Future_cancel_impl(FutureObj *self, PyTypeObject *cls,
PyObject *msg)
-/*[clinic end generated code: output=074956f35904b034 input=bba8f8b786941a94]*/
+/*[clinic end generated code: output=074956f35904b034 input=4aefb2a5726ba0f5]*/
{
asyncio_state *state = get_asyncio_state_by_cls(cls);
ENSURE_FUTURE_ALIVE(state, self)
@@ -1110,13 +1111,13 @@ _asyncio.Future.done
Return True if the future is done.
-Done means either that a result / exception are available, or that the
-future was cancelled.
+Done means either that a result / exception are available, or that
+the future was cancelled.
[clinic start generated code]*/
static PyObject *
_asyncio_Future_done_impl(FutureObj *self)
-/*[clinic end generated code: output=244c5ac351145096 input=28d7b23fdb65d2ac]*/
+/*[clinic end generated code: output=244c5ac351145096 input=afad8c9d2283428d]*/
{
if (!future_is_alive(self) || self->fut_state == STATE_PENDING) {
Py_RETURN_FALSE;
@@ -1439,7 +1440,8 @@ static PyMethodDef FutureType_methods[] = {
_ASYNCIO_FUTURE_DONE_METHODDEF
_ASYNCIO_FUTURE_GET_LOOP_METHODDEF
_ASYNCIO_FUTURE__MAKE_CANCELLED_ERROR_METHODDEF
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("Futures are generic over the type of their results")},
{NULL, NULL} /* Sentinel */
};
@@ -2611,7 +2613,8 @@ static PyMethodDef TaskType_methods[] = {
_ASYNCIO_TASK_SET_NAME_METHODDEF
_ASYNCIO_TASK_GET_CORO_METHODDEF
_ASYNCIO_TASK_GET_CONTEXT_METHODDEF
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("Tasks are generic over the return type of their wrapped coroutines")},
{NULL, NULL} /* Sentinel */
};
diff --git a/contrib/tools/python3/Modules/_bisectmodule.c b/contrib/tools/python3/Modules/_bisectmodule.c
index 9b146265445..16fc5b6a919 100644
--- a/contrib/tools/python3/Modules/_bisectmodule.c
+++ b/contrib/tools/python3/Modules/_bisectmodule.c
@@ -161,8 +161,8 @@ _bisect.bisect_right -> Py_ssize_t
Return the index where to insert item x in list a, assuming a is sorted.
The return value i is such that all e in a[:i] have e <= x, and all e in
-a[i:] have e > x. So if x already appears in the list, a.insert(i, x) will
-insert just after the rightmost x already there.
+a[i:] have e > x. So if x already appears in the list, a.insert(i, x)
+will insert just after the rightmost x already there.
Optional args lo (default 0) and hi (default len(a)) bound the
slice of a to be searched.
@@ -173,7 +173,7 @@ A custom key function can be supplied to customize the sort order.
static Py_ssize_t
_bisect_bisect_right_impl(PyObject *module, PyObject *a, PyObject *x,
Py_ssize_t lo, Py_ssize_t hi, PyObject *key)
-/*[clinic end generated code: output=3a4bc09cc7c8a73d input=43071869772dd53a]*/
+/*[clinic end generated code: output=3a4bc09cc7c8a73d input=b8951a7bb11516e1]*/
{
return internal_bisect_right(a, x, lo, hi, key);
}
@@ -346,8 +346,8 @@ _bisect.bisect_left -> Py_ssize_t
Return the index where to insert item x in list a, assuming a is sorted.
The return value i is such that all e in a[:i] have e < x, and all e in
-a[i:] have e >= x. So if x already appears in the list, a.insert(i, x) will
-insert just before the leftmost x already there.
+a[i:] have e >= x. So if x already appears in the list, a.insert(i, x)
+will insert just before the leftmost x already there.
Optional args lo (default 0) and hi (default len(a)) bound the
slice of a to be searched.
@@ -358,7 +358,7 @@ A custom key function can be supplied to customize the sort order.
static Py_ssize_t
_bisect_bisect_left_impl(PyObject *module, PyObject *a, PyObject *x,
Py_ssize_t lo, Py_ssize_t hi, PyObject *key)
-/*[clinic end generated code: output=70749d6e5cae9284 input=f29c4fe7f9b797c7]*/
+/*[clinic end generated code: output=70749d6e5cae9284 input=d24dc2b6439000f7]*/
{
return internal_bisect_left(a, x, lo, hi, key);
}
diff --git a/contrib/tools/python3/Modules/_bz2module.c b/contrib/tools/python3/Modules/_bz2module.c
index 661847ad267..dc536835acd 100644
--- a/contrib/tools/python3/Modules/_bz2module.c
+++ b/contrib/tools/python3/Modules/_bz2module.c
@@ -116,6 +116,7 @@ typedef struct {
typedef struct {
PyObject_HEAD
bz_stream bzs;
+ int bzerror;
char eof; /* Py_T_BOOL expects a char */
PyObject *unused_data;
char needs_input;
@@ -455,8 +456,11 @@ decompress_buf(BZ2Decompressor *d, Py_ssize_t max_length)
d->bzs_avail_in_real += bzs->avail_in;
- if (catch_bz2_error(bzret))
+ if (catch_bz2_error(bzret)) {
+ d->bzerror = bzret;
+ d->needs_input = 0;
goto error;
+ }
if (bzret == BZ_STREAM_END) {
d->eof = 1;
break;
@@ -589,6 +593,7 @@ decompress(BZ2Decompressor *d, char *data, size_t len, Py_ssize_t max_length)
return result;
error:
+ bzs->next_in = NULL;
Py_XDECREF(result);
return NULL;
}
@@ -601,32 +606,40 @@ _bz2.BZ2Decompressor.decompress
Decompress *data*, returning uncompressed data as bytes.
-If *max_length* is nonnegative, returns at most *max_length* bytes of
-decompressed data. If this limit is reached and further output can be
-produced, *self.needs_input* will be set to ``False``. In this case, the next
-call to *decompress()* may provide *data* as b'' to obtain more of the output.
+If *max_length* is nonnegative, returns at most *max_length* bytes
+of decompressed data. If this limit is reached and further output
+can be produced, *self.needs_input* will be set to ``False``. In
+this case, the next call to *decompress()* may provide *data* as b''
+to obtain more of the output.
-If all of the input data was decompressed and returned (either because this
-was less than *max_length* bytes, or because *max_length* was negative),
-*self.needs_input* will be set to True.
+If all of the input data was decompressed and returned (either
+because this was less than *max_length* bytes, or because
+*max_length* was negative), *self.needs_input* will be set to True.
-Attempting to decompress data after the end of stream is reached raises an
-EOFError. Any data found after the end of the stream is ignored and saved in
-the unused_data attribute.
+Attempting to decompress data after the end of stream is reached
+raises an EOFError. Any data found after the end of the stream is
+ignored and saved in the unused_data attribute.
[clinic start generated code]*/
static PyObject *
_bz2_BZ2Decompressor_decompress_impl(BZ2Decompressor *self, Py_buffer *data,
Py_ssize_t max_length)
-/*[clinic end generated code: output=23e41045deb240a3 input=52e1ffc66a8ea624]*/
+/*[clinic end generated code: output=23e41045deb240a3 input=7f68faa9ff7a1b51]*/
{
PyObject *result = NULL;
ACQUIRE_LOCK(self);
- if (self->eof)
+ if (self->eof) {
PyErr_SetString(PyExc_EOFError, "End of stream already reached");
- else
+ }
+ else if (self->bzerror) {
+ // Re-entering BZ2_bzDecompress() after an error can write out of bounds.
+ PyErr_SetString(PyExc_ValueError,
+ "Decompressor is unusable after a previous error");
+ }
+ else {
result = decompress(self, data->buf, data->len, max_length);
+ }
RELEASE_LOCK(self);
return result;
}
@@ -660,6 +673,7 @@ _bz2_BZ2Decompressor_impl(PyTypeObject *type)
return NULL;
}
+ self->bzerror = 0;
self->needs_input = 1;
self->bzs_avail_in_real = 0;
self->input_buffer = NULL;
diff --git a/contrib/tools/python3/Modules/_codecsmodule.c b/contrib/tools/python3/Modules/_codecsmodule.c
index 32373f0799b..4caf2260178 100644
--- a/contrib/tools/python3/Modules/_codecsmodule.c
+++ b/contrib/tools/python3/Modules/_codecsmodule.c
@@ -54,14 +54,15 @@ _codecs.register
Register a codec search function.
-Search functions are expected to take one argument, the encoding name in
-all lower case letters, and either return None, or a tuple of functions
-(encoder, decoder, stream_reader, stream_writer) (or a CodecInfo object).
+Search functions are expected to take one argument, the encoding
+name in all lower case letters, and either return None, or a tuple
+of functions (encoder, decoder, stream_reader, stream_writer) (or
+a CodecInfo object).
[clinic start generated code]*/
static PyObject *
_codecs_register(PyObject *module, PyObject *search_function)
-/*[clinic end generated code: output=d1bf21e99db7d6d3 input=369578467955cae4]*/
+/*[clinic end generated code: output=d1bf21e99db7d6d3 input=2321d8c8c0420dfc]*/
{
if (PyCodec_Register(search_function))
return NULL;
@@ -114,16 +115,16 @@ _codecs.encode
Encodes obj using the codec registered for encoding.
The default encoding is 'utf-8'. errors may be given to set a
-different error handling scheme. Default is 'strict' meaning that encoding
-errors raise a ValueError. Other possible values are 'ignore', 'replace'
-and 'backslashreplace' as well as any other name registered with
-codecs.register_error that can handle ValueErrors.
+different error handling scheme. Default is 'strict' meaning that
+encoding errors raise a ValueError. Other possible values are 'ignore',
+'replace' and 'backslashreplace' as well as any other name registered
+with codecs.register_error that can handle ValueErrors.
[clinic start generated code]*/
static PyObject *
_codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding,
const char *errors)
-/*[clinic end generated code: output=385148eb9a067c86 input=cd5b685040ff61f0]*/
+/*[clinic end generated code: output=385148eb9a067c86 input=e5271d443e391d7f]*/
{
if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding();
@@ -141,16 +142,16 @@ _codecs.decode
Decodes obj using the codec registered for encoding.
Default encoding is 'utf-8'. errors may be given to set a
-different error handling scheme. Default is 'strict' meaning that encoding
-errors raise a ValueError. Other possible values are 'ignore', 'replace'
-and 'backslashreplace' as well as any other name registered with
-codecs.register_error that can handle ValueErrors.
+different error handling scheme. Default is 'strict' meaning that
+encoding errors raise a ValueError. Other possible values are 'ignore',
+'replace' and 'backslashreplace' as well as any other name registered
+with codecs.register_error that can handle ValueErrors.
[clinic start generated code]*/
static PyObject *
_codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding,
const char *errors)
-/*[clinic end generated code: output=679882417dc3a0bd input=7702c0cc2fa1add6]*/
+/*[clinic end generated code: output=679882417dc3a0bd input=3e6254628f9ca538]*/
{
if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding();
@@ -965,14 +966,15 @@ _codecs.register_error
Register the specified error handler under the name errors.
handler must be a callable object, that will be called with an exception
-instance containing information about the location of the encoding/decoding
-error and must return a (replacement, new position) tuple.
+instance containing information about the location of the
+encoding/decoding error and must return a (replacement, new position)
+tuple.
[clinic start generated code]*/
static PyObject *
_codecs_register_error_impl(PyObject *module, const char *errors,
PyObject *handler)
-/*[clinic end generated code: output=fa2f7d1879b3067d input=5e6709203c2e33fe]*/
+/*[clinic end generated code: output=fa2f7d1879b3067d input=5bea01dfe835d9d8]*/
{
if (PyCodec_RegisterError(errors, handler))
return NULL;
@@ -986,13 +988,13 @@ _codecs.lookup_error
lookup_error(errors) -> handler
-Return the error handler for the specified error handling name or raise a
-LookupError, if no handler exists under this name.
+Return the error handler for the specified error handling name or raise
+a LookupError, if no handler exists under this name.
[clinic start generated code]*/
static PyObject *
_codecs_lookup_error_impl(PyObject *module, const char *name)
-/*[clinic end generated code: output=087f05dc0c9a98cc input=4775dd65e6235aba]*/
+/*[clinic end generated code: output=087f05dc0c9a98cc input=86cfb6a7a9c67113]*/
{
return PyCodec_LookupError(name);
}
diff --git a/contrib/tools/python3/Modules/_collectionsmodule.c b/contrib/tools/python3/Modules/_collectionsmodule.c
index b2c3d0e42be..daf62c940b3 100644
--- a/contrib/tools/python3/Modules/_collectionsmodule.c
+++ b/contrib/tools/python3/Modules/_collectionsmodule.c
@@ -1824,7 +1824,7 @@ static PyMethodDef deque_methods[] = {
DEQUE_ROTATE_METHODDEF
DEQUE___SIZEOF___METHODDEF
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS, PyDoc_STR("deques are generic over the type of their contents")},
{NULL, NULL} /* sentinel */
};
@@ -2284,6 +2284,12 @@ defdict_reduce(defdictobject *dd, PyObject *Py_UNUSED(ignored))
return result;
}
+
+PyDoc_STRVAR(defdict_class_getitem_doc,
+"defaultdicts are generic over two types, signifying (respectively) the types \
+of the dictionary's keys and values");
+
+
static PyMethodDef defdict_methods[] = {
{"__missing__", (PyCFunction)defdict_missing, METH_O,
defdict_missing_doc},
@@ -2294,7 +2300,7 @@ static PyMethodDef defdict_methods[] = {
{"__reduce__", (PyCFunction)defdict_reduce, METH_NOARGS,
reduce_doc},
{"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
- PyDoc_STR("See PEP 585")},
+ defdict_class_getitem_doc},
{NULL}
};
diff --git a/contrib/tools/python3/Modules/_csv.c b/contrib/tools/python3/Modules/_csv.c
index 0b7ff2575fc..755d005f4d8 100644
--- a/contrib/tools/python3/Modules/_csv.c
+++ b/contrib/tools/python3/Modules/_csv.c
@@ -957,6 +957,12 @@ Reader_iternext(ReaderObj *self)
Py_DECREF(lineobj);
return NULL;
}
+ if (self->fields == NULL) {
+ PyErr_SetString(module_state->error_obj,
+ "iterator has already advanced the reader");
+ Py_DECREF(lineobj);
+ return NULL;
+ }
++self->line_num;
kind = PyUnicode_KIND(lineobj);
data = PyUnicode_DATA(lineobj);
diff --git a/contrib/tools/python3/Modules/_ctypes/_ctypes.c b/contrib/tools/python3/Modules/_ctypes/_ctypes.c
index aac812813d9..c66d157be75 100644
--- a/contrib/tools/python3/Modules/_ctypes/_ctypes.c
+++ b/contrib/tools/python3/Modules/_ctypes/_ctypes.c
@@ -4935,7 +4935,7 @@ Array_length(PyObject *myself)
static PyMethodDef Array_methods[] = {
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS, PyDoc_STR("Arrays are generic over the type of their elements")},
{ NULL, NULL }
};
diff --git a/contrib/tools/python3/Modules/_datetimemodule.c b/contrib/tools/python3/Modules/_datetimemodule.c
index 8cfa04f676d..8df5913dfae 100644
--- a/contrib/tools/python3/Modules/_datetimemodule.c
+++ b/contrib/tools/python3/Modules/_datetimemodule.c
@@ -3208,13 +3208,13 @@ datetime.date.fromtimestamp
Create a date from a POSIX timestamp.
-The timestamp is a number, e.g. created via time.time(), that is interpreted
-as local time.
+The timestamp is a number, e.g. created via time.time(), that is
+interpreted as local time.
[clinic start generated code]*/
static PyObject *
datetime_date_fromtimestamp(PyTypeObject *type, PyObject *timestamp)
-/*[clinic end generated code: output=fd045fda58168869 input=eabb3fe7f40491fe]*/
+/*[clinic end generated code: output=fd045fda58168869 input=15720eef43b169a1]*/
{
return date_fromtimestamp((PyObject *) type, timestamp);
}
diff --git a/contrib/tools/python3/Modules/_elementtree.c b/contrib/tools/python3/Modules/_elementtree.c
index dfa03663c38..f2e2f1237f1 100644
--- a/contrib/tools/python3/Modules/_elementtree.c
+++ b/contrib/tools/python3/Modules/_elementtree.c
@@ -16,6 +16,7 @@
#endif
#include "Python.h"
+#include "pycore_ceval.h" // _Py_EnterRecursiveCall()
#include "pycore_import.h" // _PyImport_GetModuleAttrString()
#include "pycore_pyhash.h" // _Py_HashSecret
#include "pycore_weakref.h" // FT_CLEAR_WEAKREFS()
@@ -563,7 +564,7 @@ element_get_attrib(ElementObject* self)
LOCAL(PyObject*)
element_get_text(ElementObject* self)
{
- /* return borrowed reference to text attribute */
+ /* return new reference to text attribute */
PyObject *res = self->text;
@@ -578,13 +579,13 @@ element_get_text(ElementObject* self)
}
}
- return res;
+ return Py_NewRef(res);
}
LOCAL(PyObject*)
element_get_tail(ElementObject* self)
{
- /* return borrowed reference to text attribute */
+ /* return new reference to tail attribute */
PyObject *res = self->tail;
@@ -599,7 +600,7 @@ element_get_tail(ElementObject* self)
}
}
- return res;
+ return Py_NewRef(res);
}
static PyObject*
@@ -801,26 +802,31 @@ _elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo)
/*[clinic end generated code: output=eefc3df50465b642 input=a2d40348c0aade10]*/
{
Py_ssize_t i;
- ElementObject* element;
+ ElementObject* element = NULL;
PyObject* tag;
PyObject* attrib;
PyObject* text;
PyObject* tail;
PyObject* id;
+ if (_Py_EnterRecursiveCall(" in Element.__deepcopy__")) {
+ return NULL;
+ }
+
PyTypeObject *tp = Py_TYPE(self);
elementtreestate *st = get_elementtree_state_by_type(tp);
// The deepcopy() helper takes care of incrementing the refcount
// of the object to copy so to avoid use-after-frees.
tag = deepcopy(st, self->tag, memo);
- if (!tag)
- return NULL;
+ if (!tag) {
+ goto error;
+ }
if (self->extra && self->extra->attrib) {
attrib = deepcopy(st, self->extra->attrib, memo);
if (!attrib) {
Py_DECREF(tag);
- return NULL;
+ goto error;
}
} else {
attrib = NULL;
@@ -831,8 +837,9 @@ _elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo)
Py_DECREF(tag);
Py_XDECREF(attrib);
- if (!element)
- return NULL;
+ if (!element) {
+ goto error;
+ }
text = deepcopy(st, JOIN_OBJ(self->text), memo);
if (!text)
@@ -894,10 +901,12 @@ _elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo)
if (i < 0)
goto error;
+ _Py_LeaveRecursiveCall();
return (PyObject*) element;
error:
- Py_DECREF(element);
+ _Py_LeaveRecursiveCall();
+ Py_XDECREF(element);
return NULL;
}
@@ -1340,9 +1349,9 @@ _elementtree_Element_findtext_impl(ElementObject *self, PyTypeObject *cls,
PyObject *text = element_get_text((ElementObject *)item);
Py_DECREF(item);
if (text == Py_None) {
+ Py_DECREF(text);
return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
}
- Py_XINCREF(text);
return text;
}
Py_DECREF(item);
@@ -2042,15 +2051,13 @@ element_tag_getter(ElementObject *self, void *closure)
static PyObject*
element_text_getter(ElementObject *self, void *closure)
{
- PyObject *res = element_get_text(self);
- return Py_XNewRef(res);
+ return element_get_text(self);
}
static PyObject*
element_tail_getter(ElementObject *self, void *closure)
{
- PyObject *res = element_get_tail(self);
- return Py_XNewRef(res);
+ return element_get_tail(self);
}
static PyObject*
@@ -2266,6 +2273,10 @@ elementiter_next(ElementIterObject *it)
return NULL;
}
if (it->gettext) {
+ if (elem->tag != Py_None && !PyUnicode_Check(elem->tag)) {
+ Py_DECREF(elem);
+ continue;
+ }
text = element_get_text(elem);
goto gettext;
}
@@ -2283,16 +2294,14 @@ elementiter_next(ElementIterObject *it)
continue;
gettext:
+ Py_DECREF(elem);
if (!text) {
- Py_DECREF(elem);
return NULL;
}
if (text == Py_None) {
- Py_DECREF(elem);
+ Py_DECREF(text);
}
else {
- Py_INCREF(text);
- Py_DECREF(elem);
rc = PyObject_IsTrue(text);
if (rc > 0)
return text;
@@ -3687,8 +3696,12 @@ _elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *target,
PyErr_NoMemory();
return -1;
}
- /* expat < 2.1.0 has no XML_SetHashSalt() */
- if (EXPAT(st, SetHashSalt) != NULL) {
+ // Prefer 16-byte entropy, only expat >= 2.8.0. See gh-149018
+ if (EXPAT(st, SetHashSalt16Bytes) != NULL) {
+ EXPAT(st, SetHashSalt16Bytes)(self->parser,
+ _Py_HashSecret.expat.hashsalt16);
+ }
+ else if (EXPAT(st, SetHashSalt) != NULL) {
EXPAT(st, SetHashSalt)(self->parser,
(unsigned long)_Py_HashSecret.expat.hashsalt);
}
diff --git a/contrib/tools/python3/Modules/_functoolsmodule.c b/contrib/tools/python3/Modules/_functoolsmodule.c
index a1682ec4c0e..08acd2c5ab9 100644
--- a/contrib/tools/python3/Modules/_functoolsmodule.c
+++ b/contrib/tools/python3/Modules/_functoolsmodule.c
@@ -522,7 +522,8 @@ static PyMethodDef partial_methods[] = {
{"__reduce__", (PyCFunction)partial_reduce, METH_NOARGS},
{"__setstate__", (PyCFunction)partial_setstate, METH_O},
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS,
+ PyDoc_STR("partial is generic over the wrapped function's return type")},
{NULL, NULL} /* sentinel */
};
diff --git a/contrib/tools/python3/Modules/_hashopenssl.c b/contrib/tools/python3/Modules/_hashopenssl.c
index bf3894e4ffb..8a4fe473684 100644
--- a/contrib/tools/python3/Modules/_hashopenssl.c
+++ b/contrib/tools/python3/Modules/_hashopenssl.c
@@ -1870,13 +1870,13 @@ _hashlib.HMAC.hexdigest
Return hexadecimal digest of the bytes passed to the update() method so far.
-This may be used to exchange the value safely in email or other non-binary
-environments.
+This may be used to exchange the value safely in email or other
+non-binary environments.
[clinic start generated code]*/
static PyObject *
_hashlib_HMAC_hexdigest_impl(HMACobject *self)
-/*[clinic end generated code: output=80d825be1eaae6a7 input=5abc42702874ddcf]*/
+/*[clinic end generated code: output=80d825be1eaae6a7 input=865e6128c7ec0781]*/
{
unsigned char digest[EVP_MAX_MD_SIZE];
unsigned int digest_size = _hashlib_hmac_digest_size(self);
@@ -2038,8 +2038,8 @@ _hashlib.get_fips_mode -> int
Determine the OpenSSL FIPS mode of operation.
For OpenSSL 3.0.0 and newer it returns the state of the default provider
-in the default OSSL context. It's not quite the same as FIPS_mode() but good
-enough for unittests.
+in the default OSSL context. It's not quite the same as FIPS_mode() but
+good enough for unittests.
Effectively any non-zero return value indicates FIPS mode;
values other than 1 may have additional significance.
@@ -2047,7 +2047,7 @@ values other than 1 may have additional significance.
static int
_hashlib_get_fips_mode_impl(PyObject *module)
-/*[clinic end generated code: output=87eece1bab4d3fa9 input=2db61538c41c6fef]*/
+/*[clinic end generated code: output=87eece1bab4d3fa9 input=a6cdb6901421d122]*/
{
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
diff --git a/contrib/tools/python3/Modules/_interpchannelsmodule.c b/contrib/tools/python3/Modules/_interpchannelsmodule.c
index 460b4e5f4ea..4d5099f3807 100644
--- a/contrib/tools/python3/Modules/_interpchannelsmodule.c
+++ b/contrib/tools/python3/Modules/_interpchannelsmodule.c
@@ -2553,6 +2553,7 @@ _channelid_from_xid(_PyCrossInterpreterData *data)
{
struct _channelid_xid *xid = \
(struct _channelid_xid *)_PyCrossInterpreterData_DATA(data);
+ PyObject *cidobj = NULL;
// It might not be imported yet, so we can't use _get_current_module().
PyObject *mod = PyImport_ImportModule(MODULE_NAME_STR);
@@ -2562,11 +2563,10 @@ _channelid_from_xid(_PyCrossInterpreterData *data)
assert(mod != Py_None);
module_state *state = get_module_state(mod);
if (state == NULL) {
- return NULL;
+ goto done;
}
// Note that we do not preserve the "resolve" flag.
- PyObject *cidobj = NULL;
int err = newchannelid(state->ChannelIDType, xid->cid, xid->end,
_global_channels(), 0, 0,
(channelid **)&cidobj);
diff --git a/contrib/tools/python3/Modules/_interpqueuesmodule.c b/contrib/tools/python3/Modules/_interpqueuesmodule.c
index d84b53d9021..7a89e2f13a1 100644
--- a/contrib/tools/python3/Modules/_interpqueuesmodule.c
+++ b/contrib/tools/python3/Modules/_interpqueuesmodule.c
@@ -1355,6 +1355,7 @@ _queueobj_from_xid(_PyCrossInterpreterData *data)
// XXX import it?
PyErr_SetString(PyExc_RuntimeError,
MODULE_NAME_STR " module not imported yet");
+ Py_DECREF(qidobj);
return NULL;
}
diff --git a/contrib/tools/python3/Modules/_io/_iomodule.c b/contrib/tools/python3/Modules/_io/_iomodule.c
index 269070fe2b0..6c60a3b0b76 100644
--- a/contrib/tools/python3/Modules/_io/_iomodule.c
+++ b/contrib/tools/python3/Modules/_io/_iomodule.c
@@ -86,112 +86,114 @@ Open file and return a stream. Raise OSError upon failure.
file is either a text or byte string giving the name (and the path
if the file isn't in the current working directory) of the file to
be opened or an integer file descriptor of the file to be
-wrapped. (If a file descriptor is given, it is closed when the
+wrapped. (If a file descriptor is given, it is closed when the
returned I/O object is closed, unless closefd is set to False.)
mode is an optional string that specifies the mode in which the file
-is opened. It defaults to 'r' which means open for reading in text
+is opened. It defaults to 'r' which means open for reading in text
mode. Other common values are 'w' for writing (truncating the file if
it already exists), 'x' for creating and writing to a new file, and
'a' for appending (which on some Unix systems, means that all writes
append to the end of the file regardless of the current seek position).
In text mode, if encoding is not specified the encoding used is platform
-dependent: locale.getencoding() is called to get the current locale encoding.
-(For reading and writing raw bytes use binary mode and leave encoding
-unspecified.) The available modes are:
+dependent: locale.getencoding() is called to get the current locale
+encoding. (For reading and writing raw bytes use binary mode and leave
+encoding unspecified.) The available modes are:
-========= ===============================================================
+========= ==========================================================
Character Meaning
---------- ---------------------------------------------------------------
+--------- ----------------------------------------------------------
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
-'a' open for writing, appending to the end of the file if it exists
+'a' open for writing, appending to the end of the file if it
+ exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
-========= ===============================================================
+========= ==========================================================
-The default mode is 'rt' (open for reading text). For binary random
+The default mode is 'rt' (open for reading text). For binary random
access, the mode 'w+b' opens and truncates the file to 0 bytes, while
-'r+b' opens the file without truncation. The 'x' mode implies 'w' and
+'r+b' opens the file without truncation. The 'x' mode implies 'w' and
raises an `FileExistsError` if the file already exists.
Python distinguishes between files opened in binary and text modes,
-even when the underlying operating system doesn't. Files opened in
+even when the underlying operating system doesn't. Files opened in
binary mode (appending 'b' to the mode argument) return contents as
-bytes objects without any decoding. In text mode (the default, or when
+bytes objects without any decoding. In text mode (the default, or when
't' is appended to the mode argument), the contents of the file are
returned as strings, the bytes having been first decoded using a
platform-dependent encoding or using the specified encoding if given.
buffering is an optional integer used to set the buffering policy.
-Pass 0 to switch buffering off (only allowed in binary mode), 1 to select
-line buffering (only usable in text mode), and an integer > 1 to indicate
-the size of a fixed-size chunk buffer. When no buffering argument is
-given, the default buffering policy works as follows:
+Pass 0 to switch buffering off (only allowed in binary mode), 1 to
+select line buffering (only usable in text mode), and an integer > 1 to
+indicate the size of a fixed-size chunk buffer. When no buffering
+argument is given, the default buffering policy works as follows:
* Binary files are buffered in fixed-size chunks; the size of the buffer
- is chosen using a heuristic trying to determine the underlying device's
- "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`.
- On many systems, the buffer will typically be 4096 or 8192 bytes long.
+ is chosen using a heuristic trying to determine the underlying
+ device's "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`.
+ On many systems, the buffer will typically be 4096 or 8192 bytes
+ long.
* "Interactive" text files (files for which isatty() returns True)
use line buffering. Other text files use the policy described above
for binary files.
encoding is the name of the encoding used to decode or encode the
-file. This should only be used in text mode. The default encoding is
+file. This should only be used in text mode. The default encoding is
platform dependent, but any encoding supported by Python can be
passed. See the codecs module for the list of supported encodings.
errors is an optional string that specifies how encoding errors are to
-be handled---this argument should not be used in binary mode. Pass
+be handled---this argument should not be used in binary mode. Pass
'strict' to raise a ValueError exception if there is an encoding error
(the default of None has the same effect), or pass 'ignore' to ignore
-errors. (Note that ignoring encoding errors can lead to data loss.)
+errors. (Note that ignoring encoding errors can lead to data loss.)
See the documentation for codecs.register or run 'help(codecs.Codec)'
for a list of the permitted encoding error strings.
newline controls how universal newlines works (it only applies to text
-mode). It can be None, '', '\n', '\r', and '\r\n'. It works as
+mode). It can be None, '', '\n', '\r', and '\r\n'. It works as
follows:
-* On input, if newline is None, universal newlines mode is
- enabled. Lines in the input can end in '\n', '\r', or '\r\n', and
- these are translated into '\n' before being returned to the
- caller. If it is '', universal newline mode is enabled, but line
- endings are returned to the caller untranslated. If it has any of
- the other legal values, input lines are only terminated by the given
- string, and the line ending is returned to the caller untranslated.
+* On input, if newline is None, universal newlines mode is enabled.
+ Lines in the input can end in '\n', '\r', or '\r\n', and these are
+ translated into '\n' before being returned to the caller. If it is
+ '', universal newline mode is enabled, but line endings are returned
+ to the caller untranslated. If it has any of the other legal values,
+ input lines are only terminated by the given string, and the line
+ ending is returned to the caller untranslated.
* On output, if newline is None, any '\n' characters written are
- translated to the system default line separator, os.linesep. If
- newline is '' or '\n', no translation takes place. If newline is any
+ translated to the system default line separator, os.linesep. If
+ newline is '' or '\n', no translation takes place. If newline is any
of the other legal values, any '\n' characters written are translated
to the given string.
If closefd is False, the underlying file descriptor will be kept open
-when the file is closed. This does not work when a file name is given
+when the file is closed. This does not work when a file name is given
and must be True in that case.
-A custom opener can be used by passing a callable as *opener*. The
+A custom opener can be used by passing a callable as *opener*. The
underlying file descriptor for the file object is then obtained by
-calling *opener* with (*file*, *flags*). *opener* must return an open
+calling *opener* with (*file*, *flags*). *opener* must return an open
file descriptor (passing os.open as *opener* results in functionality
similar to passing None).
open() returns a file object whose type depends on the mode, and
through which the standard file operations such as reading and writing
-are performed. When open() is used to open a file in a text mode ('w',
-'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open
+are performed. When open() is used to open a file in a text mode ('w',
+'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open
a file in a binary mode, the returned class varies: in read binary
mode, it returns a BufferedReader; in write binary and append binary
modes, it returns a BufferedWriter, and in read/write mode, it returns
a BufferedRandom.
It is also possible to use a string or bytearray as a file for both
-reading and writing. For strings StringIO can be used like a file
+reading and writing. For strings StringIO can be used like a file
opened in a text mode, and for bytes a BytesIO can be used like a file
opened in a binary mode.
[clinic start generated code]*/
@@ -200,7 +202,7 @@ static PyObject *
_io_open_impl(PyObject *module, PyObject *file, const char *mode,
int buffering, const char *encoding, const char *errors,
const char *newline, int closefd, PyObject *opener)
-/*[clinic end generated code: output=aefafc4ce2b46dc0 input=cd034e7cdfbf4e78]*/
+/*[clinic end generated code: output=aefafc4ce2b46dc0 input=202d0aefc19a36c5]*/
{
unsigned i;
@@ -504,14 +506,14 @@ _io.open_code
Opens the provided file with the intent to import the contents.
-This may perform extra validation beyond open(), but is otherwise interchangeable
-with calling open(path, 'rb').
+This may perform extra validation beyond open(), but is otherwise
+interchangeable with calling open(path, 'rb').
[clinic start generated code]*/
static PyObject *
_io_open_code_impl(PyObject *module, PyObject *path)
-/*[clinic end generated code: output=2fe4ecbd6f3d6844 input=f5c18e23f4b2ed9f]*/
+/*[clinic end generated code: output=2fe4ecbd6f3d6844 input=2803c35aeb63c719]*/
{
return PyFile_OpenCodeObject(path);
}
diff --git a/contrib/tools/python3/Modules/_io/bytesio.c b/contrib/tools/python3/Modules/_io/bytesio.c
index e149823afd3..38d47aafa33 100644
--- a/contrib/tools/python3/Modules/_io/bytesio.c
+++ b/contrib/tools/python3/Modules/_io/bytesio.c
@@ -457,13 +457,13 @@ _io.BytesIO.read1
Read at most size bytes, returned as a bytes object.
-If the size argument is negative or omitted, read until EOF is reached.
-Return an empty bytes object at EOF.
+If the size argument is negative or omitted, read until EOF is
+reached. Return an empty bytes object at EOF.
[clinic start generated code]*/
static PyObject *
_io_BytesIO_read1_impl(bytesio *self, Py_ssize_t size)
-/*[clinic end generated code: output=d0f843285aa95f1c input=440a395bf9129ef5]*/
+/*[clinic end generated code: output=d0f843285aa95f1c input=418f5968cb4f2a01]*/
{
return _io_BytesIO_read_impl(self, size);
}
@@ -730,13 +730,13 @@ _io.BytesIO.writelines
Write lines to the file.
Note that newlines are not added. lines can be any iterable object
-producing bytes-like objects. This is equivalent to calling write() for
-each element.
+producing bytes-like objects. This is equivalent to calling write()
+for each element.
[clinic start generated code]*/
static PyObject *
_io_BytesIO_writelines(bytesio *self, PyObject *lines)
-/*[clinic end generated code: output=7f33aa3271c91752 input=e972539176fc8fc1]*/
+/*[clinic end generated code: output=7f33aa3271c91752 input=f4e24a931ef1d528]*/
{
PyObject *it, *item;
diff --git a/contrib/tools/python3/Modules/_io/clinic/_iomodule.c.h b/contrib/tools/python3/Modules/_io/clinic/_iomodule.c.h
index 112408a95df..356b38f058f 100644
--- a/contrib/tools/python3/Modules/_io/clinic/_iomodule.c.h
+++ b/contrib/tools/python3/Modules/_io/clinic/_iomodule.c.h
@@ -18,112 +18,114 @@ PyDoc_STRVAR(_io_open__doc__,
"file is either a text or byte string giving the name (and the path\n"
"if the file isn\'t in the current working directory) of the file to\n"
"be opened or an integer file descriptor of the file to be\n"
-"wrapped. (If a file descriptor is given, it is closed when the\n"
+"wrapped. (If a file descriptor is given, it is closed when the\n"
"returned I/O object is closed, unless closefd is set to False.)\n"
"\n"
"mode is an optional string that specifies the mode in which the file\n"
-"is opened. It defaults to \'r\' which means open for reading in text\n"
+"is opened. It defaults to \'r\' which means open for reading in text\n"
"mode. Other common values are \'w\' for writing (truncating the file if\n"
"it already exists), \'x\' for creating and writing to a new file, and\n"
"\'a\' for appending (which on some Unix systems, means that all writes\n"
"append to the end of the file regardless of the current seek position).\n"
"In text mode, if encoding is not specified the encoding used is platform\n"
-"dependent: locale.getencoding() is called to get the current locale encoding.\n"
-"(For reading and writing raw bytes use binary mode and leave encoding\n"
-"unspecified.) The available modes are:\n"
+"dependent: locale.getencoding() is called to get the current locale\n"
+"encoding. (For reading and writing raw bytes use binary mode and leave\n"
+"encoding unspecified.) The available modes are:\n"
"\n"
-"========= ===============================================================\n"
+"========= ==========================================================\n"
"Character Meaning\n"
-"--------- ---------------------------------------------------------------\n"
+"--------- ----------------------------------------------------------\n"
"\'r\' open for reading (default)\n"
"\'w\' open for writing, truncating the file first\n"
"\'x\' create a new file and open it for writing\n"
-"\'a\' open for writing, appending to the end of the file if it exists\n"
+"\'a\' open for writing, appending to the end of the file if it\n"
+" exists\n"
"\'b\' binary mode\n"
"\'t\' text mode (default)\n"
"\'+\' open a disk file for updating (reading and writing)\n"
-"========= ===============================================================\n"
+"========= ==========================================================\n"
"\n"
-"The default mode is \'rt\' (open for reading text). For binary random\n"
+"The default mode is \'rt\' (open for reading text). For binary random\n"
"access, the mode \'w+b\' opens and truncates the file to 0 bytes, while\n"
-"\'r+b\' opens the file without truncation. The \'x\' mode implies \'w\' and\n"
+"\'r+b\' opens the file without truncation. The \'x\' mode implies \'w\' and\n"
"raises an `FileExistsError` if the file already exists.\n"
"\n"
"Python distinguishes between files opened in binary and text modes,\n"
-"even when the underlying operating system doesn\'t. Files opened in\n"
+"even when the underlying operating system doesn\'t. Files opened in\n"
"binary mode (appending \'b\' to the mode argument) return contents as\n"
-"bytes objects without any decoding. In text mode (the default, or when\n"
+"bytes objects without any decoding. In text mode (the default, or when\n"
"\'t\' is appended to the mode argument), the contents of the file are\n"
"returned as strings, the bytes having been first decoded using a\n"
"platform-dependent encoding or using the specified encoding if given.\n"
"\n"
"buffering is an optional integer used to set the buffering policy.\n"
-"Pass 0 to switch buffering off (only allowed in binary mode), 1 to select\n"
-"line buffering (only usable in text mode), and an integer > 1 to indicate\n"
-"the size of a fixed-size chunk buffer. When no buffering argument is\n"
-"given, the default buffering policy works as follows:\n"
+"Pass 0 to switch buffering off (only allowed in binary mode), 1 to\n"
+"select line buffering (only usable in text mode), and an integer > 1 to\n"
+"indicate the size of a fixed-size chunk buffer. When no buffering\n"
+"argument is given, the default buffering policy works as follows:\n"
"\n"
"* Binary files are buffered in fixed-size chunks; the size of the buffer\n"
-" is chosen using a heuristic trying to determine the underlying device\'s\n"
-" \"block size\" and falling back on `io.DEFAULT_BUFFER_SIZE`.\n"
-" On many systems, the buffer will typically be 4096 or 8192 bytes long.\n"
+" is chosen using a heuristic trying to determine the underlying\n"
+" device\'s \"block size\" and falling back on `io.DEFAULT_BUFFER_SIZE`.\n"
+" On many systems, the buffer will typically be 4096 or 8192 bytes\n"
+" long.\n"
"\n"
"* \"Interactive\" text files (files for which isatty() returns True)\n"
" use line buffering. Other text files use the policy described above\n"
" for binary files.\n"
"\n"
"encoding is the name of the encoding used to decode or encode the\n"
-"file. This should only be used in text mode. The default encoding is\n"
+"file. This should only be used in text mode. The default encoding is\n"
"platform dependent, but any encoding supported by Python can be\n"
"passed. See the codecs module for the list of supported encodings.\n"
"\n"
"errors is an optional string that specifies how encoding errors are to\n"
-"be handled---this argument should not be used in binary mode. Pass\n"
+"be handled---this argument should not be used in binary mode. Pass\n"
"\'strict\' to raise a ValueError exception if there is an encoding error\n"
"(the default of None has the same effect), or pass \'ignore\' to ignore\n"
-"errors. (Note that ignoring encoding errors can lead to data loss.)\n"
+"errors. (Note that ignoring encoding errors can lead to data loss.)\n"
"See the documentation for codecs.register or run \'help(codecs.Codec)\'\n"
"for a list of the permitted encoding error strings.\n"
"\n"
"newline controls how universal newlines works (it only applies to text\n"
-"mode). It can be None, \'\', \'\\n\', \'\\r\', and \'\\r\\n\'. It works as\n"
+"mode). It can be None, \'\', \'\\n\', \'\\r\', and \'\\r\\n\'. It works as\n"
"follows:\n"
"\n"
-"* On input, if newline is None, universal newlines mode is\n"
-" enabled. Lines in the input can end in \'\\n\', \'\\r\', or \'\\r\\n\', and\n"
-" these are translated into \'\\n\' before being returned to the\n"
-" caller. If it is \'\', universal newline mode is enabled, but line\n"
-" endings are returned to the caller untranslated. If it has any of\n"
-" the other legal values, input lines are only terminated by the given\n"
-" string, and the line ending is returned to the caller untranslated.\n"
+"* On input, if newline is None, universal newlines mode is enabled.\n"
+" Lines in the input can end in \'\\n\', \'\\r\', or \'\\r\\n\', and these are\n"
+" translated into \'\\n\' before being returned to the caller. If it is\n"
+" \'\', universal newline mode is enabled, but line endings are returned\n"
+" to the caller untranslated. If it has any of the other legal values,\n"
+" input lines are only terminated by the given string, and the line\n"
+" ending is returned to the caller untranslated.\n"
"\n"
"* On output, if newline is None, any \'\\n\' characters written are\n"
-" translated to the system default line separator, os.linesep. If\n"
-" newline is \'\' or \'\\n\', no translation takes place. If newline is any\n"
+" translated to the system default line separator, os.linesep. If\n"
+" newline is \'\' or \'\\n\', no translation takes place. If newline is any\n"
" of the other legal values, any \'\\n\' characters written are translated\n"
" to the given string.\n"
"\n"
"If closefd is False, the underlying file descriptor will be kept open\n"
-"when the file is closed. This does not work when a file name is given\n"
+"when the file is closed. This does not work when a file name is given\n"
"and must be True in that case.\n"
"\n"
-"A custom opener can be used by passing a callable as *opener*. The\n"
+"A custom opener can be used by passing a callable as *opener*. The\n"
"underlying file descriptor for the file object is then obtained by\n"
-"calling *opener* with (*file*, *flags*). *opener* must return an open\n"
+"calling *opener* with (*file*, *flags*). *opener* must return an open\n"
"file descriptor (passing os.open as *opener* results in functionality\n"
"similar to passing None).\n"
"\n"
"open() returns a file object whose type depends on the mode, and\n"
"through which the standard file operations such as reading and writing\n"
-"are performed. When open() is used to open a file in a text mode (\'w\',\n"
-"\'r\', \'wt\', \'rt\', etc.), it returns a TextIOWrapper. When used to open\n"
+"are performed. When open() is used to open a file in a text mode (\'w\',\n"
+"\'r\', \'wt\', \'rt\', etc.), it returns a TextIOWrapper. When used to open\n"
"a file in a binary mode, the returned class varies: in read binary\n"
"mode, it returns a BufferedReader; in write binary and append binary\n"
"modes, it returns a BufferedWriter, and in read/write mode, it returns\n"
"a BufferedRandom.\n"
"\n"
"It is also possible to use a string or bytearray as a file for both\n"
-"reading and writing. For strings StringIO can be used like a file\n"
+"reading and writing. For strings StringIO can be used like a file\n"
"opened in a text mode, and for bytes a BytesIO can be used like a file\n"
"opened in a binary mode.");
@@ -349,8 +351,8 @@ PyDoc_STRVAR(_io_open_code__doc__,
"\n"
"Opens the provided file with the intent to import the contents.\n"
"\n"
-"This may perform extra validation beyond open(), but is otherwise interchangeable\n"
-"with calling open(path, \'rb\').");
+"This may perform extra validation beyond open(), but is otherwise\n"
+"interchangeable with calling open(path, \'rb\').");
#define _IO_OPEN_CODE_METHODDEF \
{"open_code", _PyCFunction_CAST(_io_open_code), METH_FASTCALL|METH_KEYWORDS, _io_open_code__doc__},
@@ -404,4 +406,4 @@ _io_open_code(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec
exit:
return return_value;
}
-/*[clinic end generated code: output=5d60f4e778a600a4 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=6fb7864751a4cbd8 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_io/clinic/bytesio.c.h b/contrib/tools/python3/Modules/_io/clinic/bytesio.c.h
index 620e9e3b84e..49234d43dd3 100644
--- a/contrib/tools/python3/Modules/_io/clinic/bytesio.c.h
+++ b/contrib/tools/python3/Modules/_io/clinic/bytesio.c.h
@@ -202,8 +202,8 @@ PyDoc_STRVAR(_io_BytesIO_read1__doc__,
"\n"
"Read at most size bytes, returned as a bytes object.\n"
"\n"
-"If the size argument is negative or omitted, read until EOF is reached.\n"
-"Return an empty bytes object at EOF.");
+"If the size argument is negative or omitted, read until EOF is\n"
+"reached. Return an empty bytes object at EOF.");
#define _IO_BYTESIO_READ1_METHODDEF \
{"read1", _PyCFunction_CAST(_io_BytesIO_read1), METH_FASTCALL, _io_BytesIO_read1__doc__},
@@ -452,8 +452,8 @@ PyDoc_STRVAR(_io_BytesIO_writelines__doc__,
"Write lines to the file.\n"
"\n"
"Note that newlines are not added. lines can be any iterable object\n"
-"producing bytes-like objects. This is equivalent to calling write() for\n"
-"each element.");
+"producing bytes-like objects. This is equivalent to calling write()\n"
+"for each element.");
#define _IO_BYTESIO_WRITELINES_METHODDEF \
{"writelines", (PyCFunction)_io_BytesIO_writelines, METH_O, _io_BytesIO_writelines__doc__},
@@ -534,4 +534,4 @@ skip_optional_pos:
exit:
return return_value;
}
-/*[clinic end generated code: output=ef116925b8b9e535 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=502699cd403dd3a0 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_io/clinic/fileio.c.h b/contrib/tools/python3/Modules/_io/clinic/fileio.c.h
index 5b5487d63eb..67c9847a5a6 100644
--- a/contrib/tools/python3/Modules/_io/clinic/fileio.c.h
+++ b/contrib/tools/python3/Modules/_io/clinic/fileio.c.h
@@ -15,8 +15,8 @@ PyDoc_STRVAR(_io_FileIO_close__doc__,
"\n"
"Close the file.\n"
"\n"
-"A closed file cannot be used for further I/O operations. close() may be\n"
-"called more than once without error.");
+"A closed file cannot be used for further I/O operations. close()\n"
+"may be called more than once without error.");
#define _IO_FILEIO_CLOSE_METHODDEF \
{"close", _PyCFunction_CAST(_io_FileIO_close), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_close__doc__},
@@ -41,16 +41,19 @@ PyDoc_STRVAR(_io_FileIO___init____doc__,
"Open a file.\n"
"\n"
"The mode can be \'r\' (default), \'w\', \'x\' or \'a\' for reading,\n"
-"writing, exclusive creation or appending. The file will be created if it\n"
-"doesn\'t exist when opened for writing or appending; it will be truncated\n"
-"when opened for writing. A FileExistsError will be raised if it already\n"
-"exists when opened for creating. Opening a file for creating implies\n"
-"writing so this mode behaves in a similar way to \'w\'.Add a \'+\' to the mode\n"
-"to allow simultaneous reading and writing. A custom opener can be used by\n"
-"passing a callable as *opener*. The underlying file descriptor for the file\n"
-"object is then obtained by calling opener with (*name*, *flags*).\n"
-"*opener* must return an open file descriptor (passing os.open as *opener*\n"
-"results in functionality similar to passing None).");
+"writing, exclusive creation or appending. The file will be created\n"
+"if it doesn\'t exist when opened for writing or appending; it will be\n"
+"truncated when opened for writing. A FileExistsError will be raised\n"
+"if it already exists when opened for creating. Opening a file for\n"
+"creating implies writing so this mode behaves in a similar way to\n"
+"\'w\'. Add a \'+\' to the mode to allow simultaneous reading and\n"
+"writing.\n"
+"\n"
+"A custom opener can be used by passing a callable as *opener*.\n"
+"The underlying file descriptor for the file object is then obtained\n"
+"by calling opener with (*name*, *flags*). *opener* must return\n"
+"an open file descriptor (passing os.open as *opener* results in\n"
+"functionality similar to passing None).");
static int
_io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode,
@@ -267,7 +270,8 @@ PyDoc_STRVAR(_io_FileIO_readall__doc__,
"Read all data from the file, returned as bytes.\n"
"\n"
"In non-blocking mode, returns as much as is immediately available,\n"
-"or None if no data is available. Return an empty bytes object at EOF.");
+"or None if no data is available. Return an empty bytes object at\n"
+"EOF.");
#define _IO_FILEIO_READALL_METHODDEF \
{"readall", (PyCFunction)_io_FileIO_readall, METH_NOARGS, _io_FileIO_readall__doc__},
@@ -287,9 +291,9 @@ PyDoc_STRVAR(_io_FileIO_read__doc__,
"\n"
"Read at most size bytes, returned as bytes.\n"
"\n"
-"Only makes one system call, so less data may be returned than requested.\n"
-"In non-blocking mode, returns None if no data is available.\n"
-"Return an empty bytes object at EOF.");
+"Only makes one system call, so less data may be returned than\n"
+"requested. In non-blocking mode, returns None if no data is\n"
+"available. Return an empty bytes object at EOF.");
#define _IO_FILEIO_READ_METHODDEF \
{"read", _PyCFunction_CAST(_io_FileIO_read), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_read__doc__},
@@ -341,8 +345,8 @@ PyDoc_STRVAR(_io_FileIO_write__doc__,
"Write buffer b to file, return number of bytes written.\n"
"\n"
"Only makes one system call, so not all of the data may be written.\n"
-"The number of bytes actually written is returned. In non-blocking mode,\n"
-"returns None if the write would block.");
+"The number of bytes actually written is returned. In non-blocking\n"
+"mode, returns None if the write would block.");
#define _IO_FILEIO_WRITE_METHODDEF \
{"write", _PyCFunction_CAST(_io_FileIO_write), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_write__doc__},
@@ -394,11 +398,12 @@ PyDoc_STRVAR(_io_FileIO_seek__doc__,
"\n"
"Move to new file position and return the file position.\n"
"\n"
-"Argument offset is a byte count. Optional argument whence defaults to\n"
-"SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values\n"
-"are SEEK_CUR or 1 (move relative to current position, positive or negative),\n"
-"and SEEK_END or 2 (move relative to end of file, usually negative, although\n"
-"many platforms allow seeking beyond the end of a file).\n"
+"Argument offset is a byte count. Optional argument whence defaults\n"
+"to SEEK_SET or 0 (offset from start of file, offset should be >= 0);\n"
+"other values are SEEK_CUR or 1 (move relative to current position,\n"
+"positive or negative), and SEEK_END or 2 (move relative to end of\n"
+"file, usually negative, although many platforms allow seeking beyond\n"
+"the end of a file).\n"
"\n"
"Note that not all file objects are seekable.");
@@ -528,4 +533,4 @@ _io_FileIO_isatty(fileio *self, PyObject *Py_UNUSED(ignored))
#ifndef _IO_FILEIO_TRUNCATE_METHODDEF
#define _IO_FILEIO_TRUNCATE_METHODDEF
#endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */
-/*[clinic end generated code: output=e3d9446b4087020e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=287b778e8b575c06 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_io/clinic/iobase.c.h b/contrib/tools/python3/Modules/_io/clinic/iobase.c.h
index a35cac7dc0b..70c03bd1d5a 100644
--- a/contrib/tools/python3/Modules/_io/clinic/iobase.c.h
+++ b/contrib/tools/python3/Modules/_io/clinic/iobase.c.h
@@ -19,11 +19,13 @@ PyDoc_STRVAR(_io__IOBase_seek__doc__,
" whence\n"
" The relative position to seek from.\n"
"\n"
-"The offset is interpreted relative to the position indicated by whence.\n"
-"Values for whence are:\n"
+"The offset is interpreted relative to the position indicated by\n"
+"whence. Values for whence are:\n"
"\n"
-"* os.SEEK_SET or 0 -- start of stream (the default); offset should be zero or positive\n"
-"* os.SEEK_CUR or 1 -- current stream position; offset may be negative\n"
+"* os.SEEK_SET or 0 -- start of stream (the default); offset should\n"
+" be zero or positive\n"
+"* os.SEEK_CUR or 1 -- current stream position; offset may be\n"
+" negative\n"
"* os.SEEK_END or 2 -- end of stream; offset is usually negative\n"
"\n"
"Return the new absolute position.");
@@ -102,8 +104,8 @@ PyDoc_STRVAR(_io__IOBase_truncate__doc__,
"\n"
"Truncate file to size bytes.\n"
"\n"
-"File pointer is left unchanged. Size defaults to the current IO position\n"
-"as reported by tell(). Return the new size.");
+"File pointer is left unchanged. Size defaults to the current IO\n"
+"position as reported by tell(). Return the new size.");
#define _IO__IOBASE_TRUNCATE_METHODDEF \
{"truncate", _PyCFunction_CAST(_io__IOBase_truncate), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__IOBase_truncate__doc__},
@@ -441,4 +443,4 @@ _io__RawIOBase_readall(PyObject *self, PyObject *Py_UNUSED(ignored))
{
return _io__RawIOBase_readall_impl(self);
}
-/*[clinic end generated code: output=dab5e9323d191e32 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=23596f673b4acd03 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_io/clinic/stringio.c.h b/contrib/tools/python3/Modules/_io/clinic/stringio.c.h
index e8259d26e82..cf47c2e8452 100644
--- a/contrib/tools/python3/Modules/_io/clinic/stringio.c.h
+++ b/contrib/tools/python3/Modules/_io/clinic/stringio.c.h
@@ -181,7 +181,8 @@ PyDoc_STRVAR(_io_StringIO_seek__doc__,
"\n"
"Change stream position.\n"
"\n"
-"Seek to character offset pos relative to position indicated by whence:\n"
+"Seek to character offset pos relative to position indicated by\n"
+"whence:\n"
" 0 Start of stream (the default). pos should be >= 0;\n"
" 1 Current position - pos must be 0;\n"
" 2 End of stream - pos must be 0.\n"
@@ -549,4 +550,4 @@ _io_StringIO_newlines_get(stringio *self, void *Py_UNUSED(context))
return return_value;
}
-/*[clinic end generated code: output=b16edb931e4fa548 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=499d9098fb8b603d input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_io/clinic/textio.c.h b/contrib/tools/python3/Modules/_io/clinic/textio.c.h
index efa992fca71..f35538ee75f 100644
--- a/contrib/tools/python3/Modules/_io/clinic/textio.c.h
+++ b/contrib/tools/python3/Modules/_io/clinic/textio.c.h
@@ -16,7 +16,8 @@ PyDoc_STRVAR(_io__TextIOBase_detach__doc__,
"\n"
"Separate the underlying buffer from the TextIOBase and return it.\n"
"\n"
-"After the underlying buffer has been detached, the TextIO is in an unusable state.");
+"After the underlying buffer has been detached, the TextIO is in\n"
+"an unusable state.");
#define _IO__TEXTIOBASE_DETACH_METHODDEF \
{"detach", _PyCFunction_CAST(_io__TextIOBase_detach), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__TextIOBase_detach__doc__},
@@ -40,8 +41,8 @@ PyDoc_STRVAR(_io__TextIOBase_read__doc__,
"\n"
"Read at most size characters from stream.\n"
"\n"
-"Read from underlying buffer until we have size characters or we hit EOF.\n"
-"If size is negative or omitted, read until EOF.");
+"Read from underlying buffer until we have size characters or we hit\n"
+"EOF. If size is negative or omitted, read until EOF.");
#define _IO__TEXTIOBASE_READ_METHODDEF \
{"read", _PyCFunction_CAST(_io__TextIOBase_read), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__TextIOBase_read__doc__},
@@ -623,7 +624,9 @@ _io_TextIOWrapper___init__(PyObject *self, PyObject *args, PyObject *kwargs)
goto exit;
}
skip_optional_pos:
+ Py_BEGIN_CRITICAL_SECTION(self);
return_value = _io_TextIOWrapper___init___impl((textio *)self, buffer, encoding, errors, newline, line_buffering, write_through);
+ Py_END_CRITICAL_SECTION();
exit:
return return_value;
@@ -919,8 +922,8 @@ PyDoc_STRVAR(_io_TextIOWrapper_tell__doc__,
"\n"
"Return the stream position as an opaque number.\n"
"\n"
-"The return value of tell() can be given as input to seek(), to restore a\n"
-"previous stream position.");
+"The return value of tell() can be given as input to seek(), to\n"
+"restore a previous stream position.");
#define _IO_TEXTIOWRAPPER_TELL_METHODDEF \
{"tell", (PyCFunction)_io_TextIOWrapper_tell, METH_NOARGS, _io_TextIOWrapper_tell__doc__},
@@ -1283,4 +1286,4 @@ _io_TextIOWrapper__CHUNK_SIZE_set(textio *self, PyObject *value, void *Py_UNUSED
return return_value;
}
-/*[clinic end generated code: output=6f78a6d99fad4893 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=2d73d5adb0ce09a8 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_io/clinic/winconsoleio.c.h b/contrib/tools/python3/Modules/_io/clinic/winconsoleio.c.h
index 4696ecc5c84..8e4ae031204 100644
--- a/contrib/tools/python3/Modules/_io/clinic/winconsoleio.c.h
+++ b/contrib/tools/python3/Modules/_io/clinic/winconsoleio.c.h
@@ -46,9 +46,9 @@ PyDoc_STRVAR(_io__WindowsConsoleIO___init____doc__,
"\n"
"Open a console buffer by file descriptor.\n"
"\n"
-"The mode can be \'rb\' (default), or \'wb\' for reading or writing bytes. All\n"
-"other mode characters will be ignored. Mode \'b\' will be assumed if it is\n"
-"omitted. The *opener* parameter is always ignored.");
+"The mode can be \'rb\' (default), or \'wb\' for reading or writing\n"
+"bytes. All other mode characters will be ignored. Mode \'b\' will be\n"
+"assumed if it is omitted. The *opener* parameter is always ignored.");
static int
_io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj,
@@ -457,4 +457,4 @@ _io__WindowsConsoleIO_isatty(winconsoleio *self, PyObject *Py_UNUSED(ignored))
#ifndef _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF
#define _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF
#endif /* !defined(_IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF) */
-/*[clinic end generated code: output=2c2bc86713b21dd6 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=2d7f2c99f2ab3e17 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_io/fileio.c b/contrib/tools/python3/Modules/_io/fileio.c
index 65957a713b6..95219661575 100644
--- a/contrib/tools/python3/Modules/_io/fileio.c
+++ b/contrib/tools/python3/Modules/_io/fileio.c
@@ -140,13 +140,13 @@ _io.FileIO.close
Close the file.
-A closed file cannot be used for further I/O operations. close() may be
-called more than once without error.
+A closed file cannot be used for further I/O operations. close()
+may be called more than once without error.
[clinic start generated code]*/
static PyObject *
_io_FileIO_close_impl(fileio *self, PyTypeObject *cls)
-/*[clinic end generated code: output=c30cbe9d1f23ca58 input=70da49e63db7c64d]*/
+/*[clinic end generated code: output=c30cbe9d1f23ca58 input=b405751dc4163da3]*/
{
PyObject *res;
int rc;
@@ -218,22 +218,25 @@ _io.FileIO.__init__
Open a file.
The mode can be 'r' (default), 'w', 'x' or 'a' for reading,
-writing, exclusive creation or appending. The file will be created if it
-doesn't exist when opened for writing or appending; it will be truncated
-when opened for writing. A FileExistsError will be raised if it already
-exists when opened for creating. Opening a file for creating implies
-writing so this mode behaves in a similar way to 'w'.Add a '+' to the mode
-to allow simultaneous reading and writing. A custom opener can be used by
-passing a callable as *opener*. The underlying file descriptor for the file
-object is then obtained by calling opener with (*name*, *flags*).
-*opener* must return an open file descriptor (passing os.open as *opener*
-results in functionality similar to passing None).
+writing, exclusive creation or appending. The file will be created
+if it doesn't exist when opened for writing or appending; it will be
+truncated when opened for writing. A FileExistsError will be raised
+if it already exists when opened for creating. Opening a file for
+creating implies writing so this mode behaves in a similar way to
+'w'. Add a '+' to the mode to allow simultaneous reading and
+writing.
+
+A custom opener can be used by passing a callable as *opener*.
+The underlying file descriptor for the file object is then obtained
+by calling opener with (*name*, *flags*). *opener* must return
+an open file descriptor (passing os.open as *opener* results in
+functionality similar to passing None).
[clinic start generated code]*/
static int
_io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode,
int closefd, PyObject *opener)
-/*[clinic end generated code: output=23413f68e6484bbd input=588aac967e0ba74b]*/
+/*[clinic end generated code: output=23413f68e6484bbd input=bac4efcd8f930bf3]*/
{
#ifdef MS_WINDOWS
wchar_t *widename = NULL;
@@ -700,12 +703,13 @@ _io.FileIO.readall
Read all data from the file, returned as bytes.
In non-blocking mode, returns as much as is immediately available,
-or None if no data is available. Return an empty bytes object at EOF.
+or None if no data is available. Return an empty bytes object at
+EOF.
[clinic start generated code]*/
static PyObject *
_io_FileIO_readall_impl(fileio *self)
-/*[clinic end generated code: output=faa0292b213b4022 input=dbdc137f55602834]*/
+/*[clinic end generated code: output=faa0292b213b4022 input=92f0b7ef378a9ef4]*/
{
struct _Py_stat_struct status;
Py_off_t pos, end;
@@ -801,14 +805,14 @@ _io.FileIO.read
Read at most size bytes, returned as bytes.
-Only makes one system call, so less data may be returned than requested.
-In non-blocking mode, returns None if no data is available.
-Return an empty bytes object at EOF.
+Only makes one system call, so less data may be returned than
+requested. In non-blocking mode, returns None if no data is
+available. Return an empty bytes object at EOF.
[clinic start generated code]*/
static PyObject *
_io_FileIO_read_impl(fileio *self, PyTypeObject *cls, Py_ssize_t size)
-/*[clinic end generated code: output=bbd749c7c224143e input=f613d2057e4a1918]*/
+/*[clinic end generated code: output=bbd749c7c224143e input=5a5d6d3651fcbdc8]*/
{
char *ptr;
Py_ssize_t n;
@@ -864,13 +868,13 @@ _io.FileIO.write
Write buffer b to file, return number of bytes written.
Only makes one system call, so not all of the data may be written.
-The number of bytes actually written is returned. In non-blocking mode,
-returns None if the write would block.
+The number of bytes actually written is returned. In non-blocking
+mode, returns None if the write would block.
[clinic start generated code]*/
static PyObject *
_io_FileIO_write_impl(fileio *self, PyTypeObject *cls, Py_buffer *b)
-/*[clinic end generated code: output=927e25be80f3b77b input=2776314f043088f5]*/
+/*[clinic end generated code: output=927e25be80f3b77b input=233f1f70f9e8b09e]*/
{
Py_ssize_t n;
int err;
@@ -971,18 +975,19 @@ _io.FileIO.seek
Move to new file position and return the file position.
-Argument offset is a byte count. Optional argument whence defaults to
-SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values
-are SEEK_CUR or 1 (move relative to current position, positive or negative),
-and SEEK_END or 2 (move relative to end of file, usually negative, although
-many platforms allow seeking beyond the end of a file).
+Argument offset is a byte count. Optional argument whence defaults
+to SEEK_SET or 0 (offset from start of file, offset should be >= 0);
+other values are SEEK_CUR or 1 (move relative to current position,
+positive or negative), and SEEK_END or 2 (move relative to end of
+file, usually negative, although many platforms allow seeking beyond
+the end of a file).
Note that not all file objects are seekable.
[clinic start generated code]*/
static PyObject *
_io_FileIO_seek_impl(fileio *self, PyObject *pos, int whence)
-/*[clinic end generated code: output=c976acdf054e6655 input=0439194b0774d454]*/
+/*[clinic end generated code: output=c976acdf054e6655 input=f165a1b4f5d494ad]*/
{
if (self->fd < 0)
return err_closed();
diff --git a/contrib/tools/python3/Modules/_io/iobase.c b/contrib/tools/python3/Modules/_io/iobase.c
index 618652b371a..bbf54dda448 100644
--- a/contrib/tools/python3/Modules/_io/iobase.c
+++ b/contrib/tools/python3/Modules/_io/iobase.c
@@ -100,11 +100,13 @@ _io._IOBase.seek
Change the stream position to the given byte offset.
-The offset is interpreted relative to the position indicated by whence.
-Values for whence are:
+The offset is interpreted relative to the position indicated by
+whence. Values for whence are:
-* os.SEEK_SET or 0 -- start of stream (the default); offset should be zero or positive
-* os.SEEK_CUR or 1 -- current stream position; offset may be negative
+* os.SEEK_SET or 0 -- start of stream (the default); offset should
+ be zero or positive
+* os.SEEK_CUR or 1 -- current stream position; offset may be
+ negative
* os.SEEK_END or 2 -- end of stream; offset is usually negative
Return the new absolute position.
@@ -113,7 +115,7 @@ Return the new absolute position.
static PyObject *
_io__IOBase_seek_impl(PyObject *self, PyTypeObject *cls,
int Py_UNUSED(offset), int Py_UNUSED(whence))
-/*[clinic end generated code: output=8bd74ea6538ded53 input=74211232b363363e]*/
+/*[clinic end generated code: output=8bd74ea6538ded53 input=22eaf07a7a0ee289]*/
{
_PyIO_State *state = get_io_state_by_cls(cls);
return iobase_unsupported(state, "seek");
@@ -140,14 +142,14 @@ _io._IOBase.truncate
Truncate file to size bytes.
-File pointer is left unchanged. Size defaults to the current IO position
-as reported by tell(). Return the new size.
+File pointer is left unchanged. Size defaults to the current IO
+position as reported by tell(). Return the new size.
[clinic start generated code]*/
static PyObject *
_io__IOBase_truncate_impl(PyObject *self, PyTypeObject *cls,
PyObject *Py_UNUSED(size))
-/*[clinic end generated code: output=2013179bff1fe8ef input=660ac20936612c27]*/
+/*[clinic end generated code: output=2013179bff1fe8ef input=5b3b6ab3c7abd806]*/
{
_PyIO_State *state = get_io_state_by_cls(cls);
return iobase_unsupported(state, "truncate");
diff --git a/contrib/tools/python3/Modules/_io/stringio.c b/contrib/tools/python3/Modules/_io/stringio.c
index e4c39a0a905..f0244f0fc56 100644
--- a/contrib/tools/python3/Modules/_io/stringio.c
+++ b/contrib/tools/python3/Modules/_io/stringio.c
@@ -480,7 +480,8 @@ _io.StringIO.seek
Change stream position.
-Seek to character offset pos relative to position indicated by whence:
+Seek to character offset pos relative to position indicated by
+whence:
0 Start of stream (the default). pos should be >= 0;
1 Current position - pos must be 0;
2 End of stream - pos must be 0.
@@ -489,7 +490,7 @@ Returns the new absolute position.
static PyObject *
_io_StringIO_seek_impl(stringio *self, Py_ssize_t pos, int whence)
-/*[clinic end generated code: output=e9e0ac9a8ae71c25 input=c75ced09343a00d7]*/
+/*[clinic end generated code: output=e9e0ac9a8ae71c25 input=ffef24668fd71a5d]*/
{
CHECK_INITIALIZED(self);
CHECK_CLOSED(self);
diff --git a/contrib/tools/python3/Modules/_io/textio.c b/contrib/tools/python3/Modules/_io/textio.c
index db6c709c00c..d093514aa66 100644
--- a/contrib/tools/python3/Modules/_io/textio.c
+++ b/contrib/tools/python3/Modules/_io/textio.c
@@ -58,12 +58,13 @@ _io._TextIOBase.detach
Separate the underlying buffer from the TextIOBase and return it.
-After the underlying buffer has been detached, the TextIO is in an unusable state.
+After the underlying buffer has been detached, the TextIO is in
+an unusable state.
[clinic start generated code]*/
static PyObject *
_io__TextIOBase_detach_impl(PyObject *self, PyTypeObject *cls)
-/*[clinic end generated code: output=50915f40c609eaa4 input=987ca3640d0a3776]*/
+/*[clinic end generated code: output=50915f40c609eaa4 input=8099c088abcb87d8]*/
{
_PyIO_State *state = get_io_state_by_cls(cls);
return _unsupported(state, "detach");
@@ -77,14 +78,14 @@ _io._TextIOBase.read
Read at most size characters from stream.
-Read from underlying buffer until we have size characters or we hit EOF.
-If size is negative or omitted, read until EOF.
+Read from underlying buffer until we have size characters or we hit
+EOF. If size is negative or omitted, read until EOF.
[clinic start generated code]*/
static PyObject *
_io__TextIOBase_read_impl(PyObject *self, PyTypeObject *cls,
int Py_UNUSED(size))
-/*[clinic end generated code: output=51a5178a309ce647 input=f5e37720f9fc563f]*/
+/*[clinic end generated code: output=51a5178a309ce647 input=c9fd4cc1cf1b4614]*/
{
_PyIO_State *state = get_io_state_by_cls(cls);
return _unsupported(state, "read");
@@ -1048,6 +1049,7 @@ io_check_errors(PyObject *errors)
/*[clinic input]
+@critical_section
_io.TextIOWrapper.__init__
buffer: object
encoding: str(accept={str, NoneType}) = None
@@ -1091,7 +1093,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer,
const char *encoding, PyObject *errors,
const char *newline, int line_buffering,
int write_through)
-/*[clinic end generated code: output=72267c0c01032ed2 input=e6cfaaaf6059d4f5]*/
+/*[clinic end generated code: output=72267c0c01032ed2 input=0f077220214c40a4]*/
{
PyObject *raw, *codec_info = NULL;
PyObject *res;
@@ -2707,13 +2709,13 @@ _io.TextIOWrapper.tell
Return the stream position as an opaque number.
-The return value of tell() can be given as input to seek(), to restore a
-previous stream position.
+The return value of tell() can be given as input to seek(), to
+restore a previous stream position.
[clinic start generated code]*/
static PyObject *
_io_TextIOWrapper_tell_impl(textio *self)
-/*[clinic end generated code: output=4f168c08bf34ad5f input=415d6b4e4f8e6e8c]*/
+/*[clinic end generated code: output=4f168c08bf34ad5f input=aeece020f747fd92]*/
{
PyObject *res;
PyObject *posobj = NULL;
diff --git a/contrib/tools/python3/Modules/_io/winconsoleio.c b/contrib/tools/python3/Modules/_io/winconsoleio.c
index 008f8bf1188..5337cf4918f 100644
--- a/contrib/tools/python3/Modules/_io/winconsoleio.c
+++ b/contrib/tools/python3/Modules/_io/winconsoleio.c
@@ -313,16 +313,16 @@ _io._WindowsConsoleIO.__init__
Open a console buffer by file descriptor.
-The mode can be 'rb' (default), or 'wb' for reading or writing bytes. All
-other mode characters will be ignored. Mode 'b' will be assumed if it is
-omitted. The *opener* parameter is always ignored.
+The mode can be 'rb' (default), or 'wb' for reading or writing
+bytes. All other mode characters will be ignored. Mode 'b' will be
+assumed if it is omitted. The *opener* parameter is always ignored.
[clinic start generated code]*/
static int
_io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj,
const char *mode, int closefd,
PyObject *opener)
-/*[clinic end generated code: output=3fd9cbcdd8d95429 input=7a3eed6bbe998fd9]*/
+/*[clinic end generated code: output=3fd9cbcdd8d95429 input=f31100e2cd724617]*/
{
const char *s;
wchar_t *name = NULL;
@@ -669,12 +669,13 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) {
maxlen += 1;
Py_BLOCK_THREADS
newbuf = (wchar_t*)PyMem_Realloc(buf, maxlen * sizeof(wchar_t));
- Py_UNBLOCK_THREADS
if (!newbuf) {
sig = -1;
PyErr_NoMemory();
+ Py_UNBLOCK_THREADS
break;
}
+ Py_UNBLOCK_THREADS
buf = newbuf;
/* Only advance by n and not BUFSIZ in this case */
off += n;
diff --git a/contrib/tools/python3/Modules/_json.c b/contrib/tools/python3/Modules/_json.c
index afefc71bfbd..25cbd9b9bb8 100644
--- a/contrib/tools/python3/Modules/_json.c
+++ b/contrib/tools/python3/Modules/_json.c
@@ -1602,9 +1602,13 @@ encoder_listencode_dict(PyEncoderObject *s, _PyUnicodeWriter *writer,
for (Py_ssize_t i = 0; i < PyList_GET_SIZE(items); i++) {
PyObject *item = PyList_GET_ITEM(items, i);
+ // gh-142831: encoder_encode_key_value() can invoke user code
+ // that mutates the items list, invalidating this borrowed ref.
+ Py_INCREF(item);
if (!PyTuple_Check(item) || PyTuple_GET_SIZE(item) != 2) {
PyErr_SetString(PyExc_ValueError, "items must return 2-tuples");
+ Py_DECREF(item);
goto bail;
}
@@ -1612,18 +1616,30 @@ encoder_listencode_dict(PyEncoderObject *s, _PyUnicodeWriter *writer,
value = PyTuple_GET_ITEM(item, 1);
if (encoder_encode_key_value(s, writer, &first, key, value,
new_newline_indent,
- current_item_separator) < 0)
+ current_item_separator) < 0) {
+ Py_DECREF(item);
goto bail;
+ }
+ Py_DECREF(item);
}
Py_CLEAR(items);
} else {
Py_ssize_t pos = 0;
while (PyDict_Next(dct, &pos, &key, &value)) {
+ // gh-142831: encoder_encode_key_value() can invoke user code
+ // that mutates the dict, invalidating these borrowed refs.
+ Py_INCREF(key);
+ Py_INCREF(value);
if (encoder_encode_key_value(s, writer, &first, key, value,
new_newline_indent,
- current_item_separator) < 0)
+ current_item_separator) < 0) {
+ Py_DECREF(key);
+ Py_DECREF(value);
goto bail;
+ }
+ Py_DECREF(key);
+ Py_DECREF(value);
}
}
@@ -1712,12 +1728,20 @@ encoder_listencode_list(PyEncoderObject *s, _PyUnicodeWriter *writer,
}
for (i = 0; i < PySequence_Fast_GET_SIZE(s_fast); i++) {
PyObject *obj = PySequence_Fast_GET_ITEM(s_fast, i);
+ // gh-142831: encoder_listencode_obj() can invoke user code
+ // that mutates the sequence, invalidating this borrowed ref.
+ Py_INCREF(obj);
if (i) {
- if (_PyUnicodeWriter_WriteStr(writer, separator) < 0)
+ if (_PyUnicodeWriter_WriteStr(writer, separator) < 0) {
+ Py_DECREF(obj);
goto bail;
+ }
}
- if (encoder_listencode_obj(s, writer, obj, new_newline_indent))
+ if (encoder_listencode_obj(s, writer, obj, new_newline_indent)) {
+ Py_DECREF(obj);
goto bail;
+ }
+ Py_DECREF(obj);
}
if (ident != NULL) {
if (PyDict_DelItem(s->markers, ident))
diff --git a/contrib/tools/python3/Modules/_lzmamodule.c b/contrib/tools/python3/Modules/_lzmamodule.c
index 97f3a8f03da..c4ad5dfbb3f 100644
--- a/contrib/tools/python3/Modules/_lzmamodule.c
+++ b/contrib/tools/python3/Modules/_lzmamodule.c
@@ -1112,6 +1112,7 @@ decompress(Decompressor *d, uint8_t *data, size_t len, Py_ssize_t max_length)
return result;
error:
+ lzs->next_in = NULL;
Py_XDECREF(result);
return NULL;
}
@@ -1124,24 +1125,25 @@ _lzma.LZMADecompressor.decompress
Decompress *data*, returning uncompressed data as bytes.
-If *max_length* is nonnegative, returns at most *max_length* bytes of
-decompressed data. If this limit is reached and further output can be
-produced, *self.needs_input* will be set to ``False``. In this case, the next
-call to *decompress()* may provide *data* as b'' to obtain more of the output.
+If *max_length* is nonnegative, returns at most *max_length* bytes
+of decompressed data. If this limit is reached and further output
+can be produced, *self.needs_input* will be set to ``False``. In
+this case, the next call to *decompress()* may provide *data* as b''
+to obtain more of the output.
-If all of the input data was decompressed and returned (either because this
-was less than *max_length* bytes, or because *max_length* was negative),
-*self.needs_input* will be set to True.
+If all of the input data was decompressed and returned (either
+because this was less than *max_length* bytes, or because
+*max_length* was negative), *self.needs_input* will be set to True.
-Attempting to decompress data after the end of stream is reached raises an
-EOFError. Any data found after the end of the stream is ignored and saved in
-the unused_data attribute.
+Attempting to decompress data after the end of stream is reached
+raises an EOFError. Any data found after the end of the stream is
+ignored and saved in the unused_data attribute.
[clinic start generated code]*/
static PyObject *
_lzma_LZMADecompressor_decompress_impl(Decompressor *self, Py_buffer *data,
Py_ssize_t max_length)
-/*[clinic end generated code: output=ef4e20ec7122241d input=60c1f135820e309d]*/
+/*[clinic end generated code: output=ef4e20ec7122241d input=0eb62669c4315dee]*/
{
PyObject *result = NULL;
diff --git a/contrib/tools/python3/Modules/_multiprocessing/clinic/posixshmem.c.h b/contrib/tools/python3/Modules/_multiprocessing/clinic/posixshmem.c.h
index 1b894ea4c67..5913c379524 100644
--- a/contrib/tools/python3/Modules/_multiprocessing/clinic/posixshmem.c.h
+++ b/contrib/tools/python3/Modules/_multiprocessing/clinic/posixshmem.c.h
@@ -50,9 +50,9 @@ PyDoc_STRVAR(_posixshmem_shm_unlink__doc__,
"\n"
"Remove a shared memory object (similar to unlink()).\n"
"\n"
-"Remove a shared memory object name, and, once all processes have unmapped\n"
-"the object, de-allocates and destroys the contents of the associated memory\n"
-"region.");
+"Remove a shared memory object name, and, once all processes have\n"
+"unmapped the object, de-allocates and destroys the contents of the\n"
+"associated memory region.");
#define _POSIXSHMEM_SHM_UNLINK_METHODDEF \
{"shm_unlink", (PyCFunction)(void(*)(void))_posixshmem_shm_unlink, METH_VARARGS|METH_KEYWORDS, _posixshmem_shm_unlink__doc__},
@@ -85,4 +85,4 @@ exit:
#ifndef _POSIXSHMEM_SHM_UNLINK_METHODDEF
#define _POSIXSHMEM_SHM_UNLINK_METHODDEF
#endif /* !defined(_POSIXSHMEM_SHM_UNLINK_METHODDEF) */
-/*[clinic end generated code: output=be0661dbed83ea23 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=12fb6a177b317c7f input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_multiprocessing/posixshmem.c b/contrib/tools/python3/Modules/_multiprocessing/posixshmem.c
index aeb2d79de6f..f352ceb916c 100644
--- a/contrib/tools/python3/Modules/_multiprocessing/posixshmem.c
+++ b/contrib/tools/python3/Modules/_multiprocessing/posixshmem.c
@@ -80,15 +80,15 @@ _posixshmem.shm_unlink
Remove a shared memory object (similar to unlink()).
-Remove a shared memory object name, and, once all processes have unmapped
-the object, de-allocates and destroys the contents of the associated memory
-region.
+Remove a shared memory object name, and, once all processes have
+unmapped the object, de-allocates and destroys the contents of the
+associated memory region.
[clinic start generated code]*/
static PyObject *
_posixshmem_shm_unlink_impl(PyObject *module, PyObject *path)
-/*[clinic end generated code: output=42f8b23d134b9ff5 input=8dc0f87143e3b300]*/
+/*[clinic end generated code: output=42f8b23d134b9ff5 input=239da7d9ea49e7db]*/
{
int rv;
int async_err = 0;
diff --git a/contrib/tools/python3/Modules/_opcode.c b/contrib/tools/python3/Modules/_opcode.c
index 4bf63932d22..241d68f3b88 100644
--- a/contrib/tools/python3/Modules/_opcode.c
+++ b/contrib/tools/python3/Modules/_opcode.c
@@ -118,7 +118,6 @@ _opcode_has_const_impl(PyObject *module, int opcode)
}
/*[clinic input]
-
_opcode.has_name -> bool
opcode: int
@@ -128,7 +127,7 @@ Return True if the opcode accesses an attribute by name, False otherwise.
static int
_opcode_has_name_impl(PyObject *module, int opcode)
-/*[clinic end generated code: output=b49a83555c2fa517 input=448aa5e4bcc947ba]*/
+/*[clinic end generated code: output=b49a83555c2fa517 input=3032469628dd0849]*/
{
return _PyCompile_OpcodeIsValid(opcode) &&
_PyCompile_OpcodeHasName(opcode);
diff --git a/contrib/tools/python3/Modules/_posixsubprocess.c b/contrib/tools/python3/Modules/_posixsubprocess.c
index 0a7ef74e26f..eef2743f392 100644
--- a/contrib/tools/python3/Modules/_posixsubprocess.c
+++ b/contrib/tools/python3/Modules/_posixsubprocess.c
@@ -988,15 +988,15 @@ _posixsubprocess.fork_exec as subprocess_fork_exec
Spawn a fresh new child process.
-Fork a child process, close parent file descriptors as appropriate in the
-child and duplicate the few that are needed before calling exec() in the
-child process.
+Fork a child process, close parent file descriptors as appropriate in
+the child and duplicate the few that are needed before calling exec() in
+the child process.
-If close_fds is True, close file descriptors 3 and higher, except those listed
-in the sorted tuple pass_fds.
+If close_fds is True, close file descriptors 3 and higher, except those
+listed in the sorted tuple pass_fds.
-The preexec_fn, if supplied, will be called immediately before closing file
-descriptors and exec.
+The preexec_fn, if supplied, will be called immediately before closing
+file descriptors and exec.
WARNING: preexec_fn is NOT SAFE if your application uses threads.
It may trigger infrequent, difficult to debug deadlocks.
@@ -1021,7 +1021,7 @@ subprocess_fork_exec_impl(PyObject *module, PyObject *process_args,
PyObject *extra_groups_packed,
PyObject *uid_object, int child_umask,
PyObject *preexec_fn, int allow_vfork)
-/*[clinic end generated code: output=7ee4f6ee5cf22b5b input=51757287ef266ffa]*/
+/*[clinic end generated code: output=7ee4f6ee5cf22b5b input=53eb802a43d5c5fc]*/
{
PyObject *converted_args = NULL, *fast_args = NULL;
PyObject *preexec_fn_args_tuple = NULL;
diff --git a/contrib/tools/python3/Modules/_queuemodule.c b/contrib/tools/python3/Modules/_queuemodule.c
index 9f1c9a1b0d4..4ac43748fdd 100644
--- a/contrib/tools/python3/Modules/_queuemodule.c
+++ b/contrib/tools/python3/Modules/_queuemodule.c
@@ -290,15 +290,16 @@ _queue.SimpleQueue.put
Put the item on the queue.
-The optional 'block' and 'timeout' arguments are ignored, as this method
-never blocks. They are provided for compatibility with the Queue class.
+The optional 'block' and 'timeout' arguments are ignored, as this
+method never blocks. They are provided for compatibility with the
+Queue class.
[clinic start generated code]*/
static PyObject *
_queue_SimpleQueue_put_impl(simplequeueobject *self, PyObject *item,
int block, PyObject *timeout)
-/*[clinic end generated code: output=4333136e88f90d8b input=a16dbb33363c0fa8]*/
+/*[clinic end generated code: output=4333136e88f90d8b input=9f9ff270a74670c3]*/
{
HandoffData data = {
.handed_off = 0,
@@ -358,10 +359,11 @@ _queue.SimpleQueue.get
Remove and return an item from the queue.
-If optional args 'block' is true and 'timeout' is None (the default),
-block if necessary until an item is available. If 'timeout' is
-a non-negative number, it blocks at most 'timeout' seconds and raises
-the Empty exception if no item was available within that time.
+If optional args 'block' is true and 'timeout' is None (the
+default), block if necessary until an item is available. If
+'timeout' is a non-negative number, it blocks at most 'timeout'
+seconds and raises the Empty exception if no item was available
+within that time.
Otherwise ('block' is false), return an item if one is immediately
available, else raise the Empty exception ('timeout' is ignored
in that case).
@@ -371,7 +373,7 @@ in that case).
static PyObject *
_queue_SimpleQueue_get_impl(simplequeueobject *self, PyTypeObject *cls,
int block, PyObject *timeout_obj)
-/*[clinic end generated code: output=5c2cca914cd1e55b input=f7836c65e5839c51]*/
+/*[clinic end generated code: output=5c2cca914cd1e55b input=afa0889bbc6b4761]*/
{
PyTime_t endtime = 0;
@@ -529,7 +531,7 @@ static PyMethodDef simplequeue_methods[] = {
_QUEUE_SIMPLEQUEUE_PUT_NOWAIT_METHODDEF
_QUEUE_SIMPLEQUEUE_QSIZE_METHODDEF
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS, PyDoc_STR("SimpleQueues are generic over the type of their contents")},
{NULL, NULL} /* sentinel */
};
diff --git a/contrib/tools/python3/Modules/_sqlite/blob.c b/contrib/tools/python3/Modules/_sqlite/blob.c
index 4db1ac474ef..c09c8582f89 100644
--- a/contrib/tools/python3/Modules/_sqlite/blob.c
+++ b/contrib/tools/python3/Modules/_sqlite/blob.c
@@ -167,14 +167,14 @@ _sqlite3.Blob.read as blob_read
Read data at the current offset position.
-If the end of the blob is reached, the data up to end of file will be returned.
-When length is not specified, or is negative, Blob.read() will read until the
-end of the blob.
+If the end of the blob is reached, the data up to end of file will
+be returned. When length is not specified, or is negative,
+Blob.read() will read until the end of the blob.
[clinic start generated code]*/
static PyObject *
blob_read_impl(pysqlite_Blob *self, int length)
-/*[clinic end generated code: output=1fc99b2541360dde input=f2e4aa4378837250]*/
+/*[clinic end generated code: output=1fc99b2541360dde input=6b745ad37720e556]*/
{
if (!check_blob(self)) {
return NULL;
@@ -234,13 +234,13 @@ _sqlite3.Blob.write as blob_write
Write data at the current offset.
-This function cannot change the blob length. Writing beyond the end of the
-blob will result in an exception being raised.
+This function cannot change the blob length. Writing beyond the end
+of the blob will result in an exception being raised.
[clinic start generated code]*/
static PyObject *
blob_write_impl(pysqlite_Blob *self, Py_buffer *data)
-/*[clinic end generated code: output=b34cf22601b570b2 input=a84712f24a028e6d]*/
+/*[clinic end generated code: output=b34cf22601b570b2 input=0d372cb0240a5d49]*/
{
if (!check_blob(self)) {
return NULL;
@@ -264,14 +264,15 @@ _sqlite3.Blob.seek as blob_seek
Set the current access position to offset.
-The origin argument defaults to os.SEEK_SET (absolute blob positioning).
-Other values for origin are os.SEEK_CUR (seek relative to the current position)
-and os.SEEK_END (seek relative to the blob's end).
+The origin argument defaults to os.SEEK_SET (absolute blob
+positioning). Other values for origin are os.SEEK_CUR (seek
+relative to the current position) and os.SEEK_END (seek relative to
+the blob's end).
[clinic start generated code]*/
static PyObject *
blob_seek_impl(pysqlite_Blob *self, int offset, int origin)
-/*[clinic end generated code: output=854c5a0e208547a5 input=5da9a07e55fe6bb6]*/
+/*[clinic end generated code: output=854c5a0e208547a5 input=84aea1b6b48607dd]*/
{
if (!check_blob(self)) {
return NULL;
@@ -516,21 +517,25 @@ ass_subscript_slice(pysqlite_Blob *self, PyObject *item, PyObject *value)
return -1;
}
- if (len == 0) {
- return 0;
- }
-
Py_buffer vbuf;
if (PyObject_GetBuffer(value, &vbuf, PyBUF_SIMPLE) < 0) {
return -1;
}
- int rc = -1;
if (vbuf.len != len) {
PyErr_SetString(PyExc_IndexError,
"Blob slice assignment is wrong size");
+ PyBuffer_Release(&vbuf);
+ return -1;
}
- else if (step == 1) {
+
+ if (len == 0) {
+ PyBuffer_Release(&vbuf);
+ return 0;
+ }
+
+ int rc = -1;
+ if (step == 1) {
rc = inner_write(self, vbuf.buf, len, start);
}
else {
diff --git a/contrib/tools/python3/Modules/_sqlite/clinic/blob.c.h b/contrib/tools/python3/Modules/_sqlite/clinic/blob.c.h
index b95ba948aaf..bfafcf05410 100644
--- a/contrib/tools/python3/Modules/_sqlite/clinic/blob.c.h
+++ b/contrib/tools/python3/Modules/_sqlite/clinic/blob.c.h
@@ -31,9 +31,9 @@ PyDoc_STRVAR(blob_read__doc__,
" length\n"
" Read length in bytes.\n"
"\n"
-"If the end of the blob is reached, the data up to end of file will be returned.\n"
-"When length is not specified, or is negative, Blob.read() will read until the\n"
-"end of the blob.");
+"If the end of the blob is reached, the data up to end of file will\n"
+"be returned. When length is not specified, or is negative,\n"
+"Blob.read() will read until the end of the blob.");
#define BLOB_READ_METHODDEF \
{"read", _PyCFunction_CAST(blob_read), METH_FASTCALL, blob_read__doc__},
@@ -70,8 +70,8 @@ PyDoc_STRVAR(blob_write__doc__,
"\n"
"Write data at the current offset.\n"
"\n"
-"This function cannot change the blob length. Writing beyond the end of the\n"
-"blob will result in an exception being raised.");
+"This function cannot change the blob length. Writing beyond the end\n"
+"of the blob will result in an exception being raised.");
#define BLOB_WRITE_METHODDEF \
{"write", (PyCFunction)blob_write, METH_O, blob_write__doc__},
@@ -105,9 +105,10 @@ PyDoc_STRVAR(blob_seek__doc__,
"\n"
"Set the current access position to offset.\n"
"\n"
-"The origin argument defaults to os.SEEK_SET (absolute blob positioning).\n"
-"Other values for origin are os.SEEK_CUR (seek relative to the current position)\n"
-"and os.SEEK_END (seek relative to the blob\'s end).");
+"The origin argument defaults to os.SEEK_SET (absolute blob\n"
+"positioning). Other values for origin are os.SEEK_CUR (seek\n"
+"relative to the current position) and os.SEEK_END (seek relative to\n"
+"the blob\'s end).");
#define BLOB_SEEK_METHODDEF \
{"seek", _PyCFunction_CAST(blob_seek), METH_FASTCALL, blob_seek__doc__},
@@ -211,4 +212,4 @@ blob_exit(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=31abd55660e0c5af input=a9049054013a1b77]*/
+/*[clinic end generated code: output=45168bcaeea61140 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h b/contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h
index c44b761aca6..4eede407f9a 100644
--- a/contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h
+++ b/contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h
@@ -799,13 +799,14 @@ PyDoc_STRVAR(pysqlite_connection_set_progress_handler__doc__,
"\n"
" progress_handler\n"
" A callable that takes no arguments.\n"
-" If the callable returns non-zero, the current query is terminated,\n"
-" and an exception is raised.\n"
+" If the callable returns non-zero, the current query is\n"
+" terminated, and an exception is raised.\n"
" n\n"
" The number of SQLite virtual machine instructions that are\n"
" executed between invocations of \'progress_handler\'.\n"
"\n"
-"If \'progress_handler\' is None or \'n\' is 0, the progress handler is disabled.\n"
+"If \'progress_handler\' is None or \'n\' is 0, the progress handler is\n"
+"disabled.\n"
"\n"
"Note: Passing keyword argument \'progress_handler\' to\n"
"_sqlite3.Connection.set_progress_handler() is deprecated. Parameter\n"
@@ -1453,10 +1454,10 @@ PyDoc_STRVAR(serialize__doc__,
" name\n"
" Which database to serialize.\n"
"\n"
-"For an ordinary on-disk database file, the serialization is just a copy of the\n"
-"disk file. For an in-memory database or a \"temp\" database, the serialization is\n"
-"the same sequence of bytes which would be written to disk if that database\n"
-"were backed up to disk.");
+"For an ordinary on-disk database file, the serialization is just\n"
+"a copy of the disk file. For an in-memory database or a \"temp\"\n"
+"database, the serialization is the same sequence of bytes which\n"
+"would be written to disk if that database were backed up to disk.");
#define SERIALIZE_METHODDEF \
{"serialize", _PyCFunction_CAST(serialize), METH_FASTCALL|METH_KEYWORDS, serialize__doc__},
@@ -1539,12 +1540,13 @@ PyDoc_STRVAR(deserialize__doc__,
" name\n"
" Which database to reopen with the deserialization.\n"
"\n"
-"The deserialize interface causes the database connection to disconnect from the\n"
-"target database, and then reopen it as an in-memory database based on the given\n"
-"serialized data.\n"
+"The deserialize interface causes the database connection to\n"
+"disconnect from the target database, and then reopen it as\n"
+"an in-memory database based on the given serialized data.\n"
"\n"
-"The deserialize interface will fail with SQLITE_BUSY if the database is\n"
-"currently in a read transaction or is involved in a backup operation.");
+"The deserialize interface will fail with SQLITE_BUSY if the database\n"
+"is currently in a read transaction or is involved in a backup\n"
+"operation.");
#define DESERIALIZE_METHODDEF \
{"deserialize", _PyCFunction_CAST(deserialize), METH_FASTCALL|METH_KEYWORDS, deserialize__doc__},
@@ -1662,7 +1664,8 @@ PyDoc_STRVAR(pysqlite_connection_exit__doc__,
"\n"
"Called when the connection is used as a context manager.\n"
"\n"
-"If there was any exception, a rollback takes place; otherwise we commit.");
+"If there was any exception, a rollback takes place; otherwise we\n"
+"commit.");
#define PYSQLITE_CONNECTION_EXIT_METHODDEF \
{"__exit__", _PyCFunction_CAST(pysqlite_connection_exit), METH_FASTCALL, pysqlite_connection_exit__doc__},
@@ -1700,12 +1703,12 @@ PyDoc_STRVAR(setlimit__doc__,
" category\n"
" The limit category to be set.\n"
" limit\n"
-" The new limit. If the new limit is a negative number, the limit is\n"
-" unchanged.\n"
+" The new limit. If the new limit is a negative number, the limit\n"
+" is unchanged.\n"
"\n"
-"Attempts to increase a limit above its hard upper bound are silently truncated\n"
-"to the hard upper bound. Regardless of whether or not the limit was changed,\n"
-"the prior value of the limit is returned.");
+"Attempts to increase a limit above its hard upper bound are silently\n"
+"truncated to the hard upper bound. Regardless of whether or not the\n"
+"limit was changed, the prior value of the limit is returned.");
#define SETLIMIT_METHODDEF \
{"setlimit", _PyCFunction_CAST(setlimit), METH_FASTCALL, setlimit__doc__},
@@ -1866,4 +1869,4 @@ exit:
#ifndef DESERIALIZE_METHODDEF
#define DESERIALIZE_METHODDEF
#endif /* !defined(DESERIALIZE_METHODDEF) */
-/*[clinic end generated code: output=fa34f4c5f8837a7c input=a9049054013a1b77]*/
+/*[clinic end generated code: output=5e0bcef289eb64cc input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_sqlite/connection.c b/contrib/tools/python3/Modules/_sqlite/connection.c
index 5f888ac19ec..bf5307ffac8 100644
--- a/contrib/tools/python3/Modules/_sqlite/connection.c
+++ b/contrib/tools/python3/Modules/_sqlite/connection.c
@@ -570,6 +570,47 @@ pysqlite_connection_cursor_impl(pysqlite_Connection *self, PyObject *factory)
return cursor;
}
+static PyObject *
+connection_get_row_factory(PyObject *op, void *closure)
+{
+ pysqlite_Connection *self = (pysqlite_Connection *)op;
+ return Py_NewRef(self->row_factory);
+}
+
+static int
+connection_set_row_factory(PyObject *op, PyObject *value, void *closure)
+{
+ pysqlite_Connection *self = (pysqlite_Connection *)op;
+ if (value == NULL) {
+ PyErr_SetString(PyExc_AttributeError,
+ "cannot delete row_factory attribute");
+ return -1;
+ }
+ Py_XSETREF(self->row_factory, Py_NewRef(value));
+ return 0;
+}
+
+static PyObject *
+connection_get_text_factory(PyObject *op, void *closure)
+{
+ pysqlite_Connection *self = (pysqlite_Connection *)op;
+ return Py_NewRef(self->text_factory);
+}
+
+static int
+connection_set_text_factory(PyObject *op, PyObject *value, void *closure)
+{
+ pysqlite_Connection *self = (pysqlite_Connection *)op;
+ if (value == NULL) {
+ PyErr_SetString(PyExc_AttributeError,
+ "cannot delete text_factory attribute");
+ return -1;
+ }
+ Py_XSETREF(self->text_factory, Py_NewRef(value));
+ return 0;
+}
+
+
/*[clinic input]
_sqlite3.Connection.blobopen as blobopen
@@ -1590,8 +1631,8 @@ _sqlite3.Connection.set_progress_handler as pysqlite_connection_set_progress_han
cls: defining_class
progress_handler as callable: object
A callable that takes no arguments.
- If the callable returns non-zero, the current query is terminated,
- and an exception is raised.
+ If the callable returns non-zero, the current query is
+ terminated, and an exception is raised.
/ [from 3.15]
n: int
The number of SQLite virtual machine instructions that are
@@ -1599,14 +1640,15 @@ _sqlite3.Connection.set_progress_handler as pysqlite_connection_set_progress_han
Set progress handler callback.
-If 'progress_handler' is None or 'n' is 0, the progress handler is disabled.
+If 'progress_handler' is None or 'n' is 0, the progress handler is
+disabled.
[clinic start generated code]*/
static PyObject *
pysqlite_connection_set_progress_handler_impl(pysqlite_Connection *self,
PyTypeObject *cls,
PyObject *callable, int n)
-/*[clinic end generated code: output=0739957fd8034a50 input=b4d6e2ef8b4d32f9]*/
+/*[clinic end generated code: output=0739957fd8034a50 input=d46887797f0c0ecf]*/
{
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
@@ -2234,15 +2276,15 @@ _sqlite3.Connection.serialize as serialize
Serialize a database into a byte string.
-For an ordinary on-disk database file, the serialization is just a copy of the
-disk file. For an in-memory database or a "temp" database, the serialization is
-the same sequence of bytes which would be written to disk if that database
-were backed up to disk.
+For an ordinary on-disk database file, the serialization is just
+a copy of the disk file. For an in-memory database or a "temp"
+database, the serialization is the same sequence of bytes which
+would be written to disk if that database were backed up to disk.
[clinic start generated code]*/
static PyObject *
serialize_impl(pysqlite_Connection *self, const char *name)
-/*[clinic end generated code: output=97342b0e55239dd3 input=d2eb5194a65abe2b]*/
+/*[clinic end generated code: output=97342b0e55239dd3 input=7e48654e8e082fa8]*/
{
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
@@ -2287,18 +2329,19 @@ _sqlite3.Connection.deserialize as deserialize
Load a serialized database.
-The deserialize interface causes the database connection to disconnect from the
-target database, and then reopen it as an in-memory database based on the given
-serialized data.
+The deserialize interface causes the database connection to
+disconnect from the target database, and then reopen it as
+an in-memory database based on the given serialized data.
-The deserialize interface will fail with SQLITE_BUSY if the database is
-currently in a read transaction or is involved in a backup operation.
+The deserialize interface will fail with SQLITE_BUSY if the database
+is currently in a read transaction or is involved in a backup
+operation.
[clinic start generated code]*/
static PyObject *
deserialize_impl(pysqlite_Connection *self, Py_buffer *data,
const char *name)
-/*[clinic end generated code: output=e394c798b98bad89 input=1be4ca1faacf28f2]*/
+/*[clinic end generated code: output=e394c798b98bad89 input=5d20e028d98c0686]*/
{
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
@@ -2371,13 +2414,14 @@ _sqlite3.Connection.__exit__ as pysqlite_connection_exit
Called when the connection is used as a context manager.
-If there was any exception, a rollback takes place; otherwise we commit.
+If there was any exception, a rollback takes place; otherwise we
+commit.
[clinic start generated code]*/
static PyObject *
pysqlite_connection_exit_impl(pysqlite_Connection *self, PyObject *exc_type,
PyObject *exc_value, PyObject *exc_tb)
-/*[clinic end generated code: output=0705200e9321202a input=bd66f1532c9c54a7]*/
+/*[clinic end generated code: output=0705200e9321202a input=8fdb0392ee6f3466]*/
{
int commit = 0;
PyObject* result;
@@ -2417,20 +2461,20 @@ _sqlite3.Connection.setlimit as setlimit
category: int
The limit category to be set.
limit: int
- The new limit. If the new limit is a negative number, the limit is
- unchanged.
+ The new limit. If the new limit is a negative number, the limit
+ is unchanged.
/
Set connection run-time limits.
-Attempts to increase a limit above its hard upper bound are silently truncated
-to the hard upper bound. Regardless of whether or not the limit was changed,
-the prior value of the limit is returned.
+Attempts to increase a limit above its hard upper bound are silently
+truncated to the hard upper bound. Regardless of whether or not the
+limit was changed, the prior value of the limit is returned.
[clinic start generated code]*/
static PyObject *
setlimit_impl(pysqlite_Connection *self, int category, int limit)
-/*[clinic end generated code: output=0d208213f8d68ccd input=9bd469537e195635]*/
+/*[clinic end generated code: output=0d208213f8d68ccd input=5c2e430091206677]*/
{
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
@@ -2628,6 +2672,10 @@ static PyGetSetDef connection_getset[] = {
{"in_transaction", (getter)pysqlite_connection_get_in_transaction, (setter)0},
{"autocommit", (getter)get_autocommit, (setter)set_autocommit},
{"__text_signature__", get_sig, (setter)0},
+ {"row_factory", connection_get_row_factory,
+ connection_set_row_factory},
+ {"text_factory", connection_get_text_factory,
+ connection_set_text_factory},
{NULL}
};
@@ -2675,8 +2723,6 @@ static struct PyMemberDef connection_members[] =
{"InternalError", _Py_T_OBJECT, offsetof(pysqlite_Connection, InternalError), Py_READONLY},
{"ProgrammingError", _Py_T_OBJECT, offsetof(pysqlite_Connection, ProgrammingError), Py_READONLY},
{"NotSupportedError", _Py_T_OBJECT, offsetof(pysqlite_Connection, NotSupportedError), Py_READONLY},
- {"row_factory", _Py_T_OBJECT, offsetof(pysqlite_Connection, row_factory)},
- {"text_factory", _Py_T_OBJECT, offsetof(pysqlite_Connection, text_factory)},
{NULL}
};
diff --git a/contrib/tools/python3/Modules/_sqlite/ya.make b/contrib/tools/python3/Modules/_sqlite/ya.make
index 56ee483669e..594b73af8c5 100644
--- a/contrib/tools/python3/Modules/_sqlite/ya.make
+++ b/contrib/tools/python3/Modules/_sqlite/ya.make
@@ -2,9 +2,9 @@
PY3_LIBRARY()
-VERSION(3.13.13)
+VERSION(3.13.14)
-ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.13.13.tar.gz)
+ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.13.14.tar.gz)
LICENSE(Python-2.0)
diff --git a/contrib/tools/python3/Modules/_sre/sre.c b/contrib/tools/python3/Modules/_sre/sre.c
index c0cc8268d2d..2a2a5f8ef9e 100644
--- a/contrib/tools/python3/Modules/_sre/sre.c
+++ b/contrib/tools/python3/Modules/_sre/sre.c
@@ -3150,7 +3150,7 @@ static PyMethodDef pattern_methods[] = {
_SRE_SRE_PATTERN___DEEPCOPY___METHODDEF
_SRE_SRE_PATTERN__FAIL_AFTER_METHODDEF
{"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
- PyDoc_STR("See PEP 585")},
+ PyDoc_STR("Patterns are generic over the type of string they handle (str or bytes)")},
{NULL, NULL}
};
@@ -3206,7 +3206,7 @@ static PyMethodDef match_methods[] = {
_SRE_SRE_MATCH___COPY___METHODDEF
_SRE_SRE_MATCH___DEEPCOPY___METHODDEF
{"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
- PyDoc_STR("See PEP 585")},
+ PyDoc_STR("Matches are generic over the type of string which was matched (str or bytes)")},
{NULL, NULL}
};
diff --git a/contrib/tools/python3/Modules/_ssl.c b/contrib/tools/python3/Modules/_ssl.c
index 812125b80f9..69195d808e3 100644
--- a/contrib/tools/python3/Modules/_ssl.c
+++ b/contrib/tools/python3/Modules/_ssl.c
@@ -296,7 +296,7 @@ typedef struct {
int post_handshake_auth;
#endif
PyObject *msg_cb;
- PyObject *keylog_filename;
+ PyObject *keylog_filename; // can be anything accepted by Py_fopen()
BIO *keylog_bio;
/* Cached module state, also used in SSLSocket and SSLSession code. */
_sslmodulestate *state;
@@ -324,7 +324,7 @@ typedef struct {
PySSLContext *ctx; /* weakref to SSL context */
char shutdown_seen_zero;
enum py_ssl_server_or_client socket_type;
- PyObject *owner; /* Python level "owner" passed to servername callback */
+ PyObject *owner; /* weakref to Python level "owner" passed to servername callback */
PyObject *server_hostname;
_PySSLError err; /* last seen error from various sources */
/* Some SSL callbacks don't have error reporting. Callback wrappers
@@ -2173,14 +2173,15 @@ _ssl._SSLSocket.context
This changes the context associated with the SSLSocket.
-This is typically used from within a callback function set by the sni_callback
-on the SSLContext to change the certificate information associated with the
-SSLSocket before the cryptographic exchange handshake messages.
+This is typically used from within a callback function set by the
+sni_callback on the SSLContext to change the certificate information
+associated with the SSLSocket before the cryptographic exchange
+handshake messages.
[clinic start generated code]*/
static PyObject *
_ssl__SSLSocket_context_get_impl(PySSLSocket *self)
-/*[clinic end generated code: output=d23e82f72f32e3d7 input=7cbb97407c2ace30]*/
+/*[clinic end generated code: output=d23e82f72f32e3d7 input=b845dea1f9710ebe]*/
{
return Py_NewRef(self->ctx);
}
@@ -2294,6 +2295,10 @@ PySSL_traverse(PySSLSocket *self, visitproc visit, void *arg)
static int
PySSL_clear(PySSLSocket *self)
{
+ Py_CLEAR(self->Socket);
+ Py_CLEAR(self->ctx);
+ Py_CLEAR(self->owner);
+ Py_CLEAR(self->server_hostname);
Py_CLEAR(self->exc);
return 0;
}
@@ -2317,10 +2322,7 @@ PySSL_dealloc(PySSLSocket *self)
SSL_set_shutdown(self->ssl, SSL_SENT_SHUTDOWN | SSL_get_shutdown(self->ssl));
SSL_free(self->ssl);
}
- Py_XDECREF(self->Socket);
- Py_XDECREF(self->ctx);
- Py_XDECREF(self->server_hostname);
- Py_XDECREF(self->owner);
+ (void)PySSL_clear(self);
PyObject_GC_Del(self);
Py_DECREF(tp);
}
@@ -2807,15 +2809,16 @@ _ssl._SSLSocket.get_channel_binding
Get channel binding data for current connection.
-Raise ValueError if the requested `cb_type` is not supported. Return bytes
-of the data or None if the data is not available (e.g. before the handshake).
+Raise ValueError if the requested `cb_type` is not supported.
+Return bytes of the data or None if the data is not available (e.g.
+before the handshake).
Only 'tls-unique' channel binding data from RFC 5929 is supported.
[clinic start generated code]*/
static PyObject *
_ssl__SSLSocket_get_channel_binding_impl(PySSLSocket *self,
const char *cb_type)
-/*[clinic end generated code: output=34bac9acb6a61d31 input=e008004fc08744db]*/
+/*[clinic end generated code: output=34bac9acb6a61d31 input=bed81ef7936535a0]*/
{
char buf[PySSL_CB_MAXLEN];
size_t len;
@@ -3257,6 +3260,11 @@ context_traverse(PySSLContext *self, visitproc visit, void *arg)
{
Py_VISIT(self->set_sni_cb);
Py_VISIT(self->msg_cb);
+ Py_VISIT(self->keylog_filename);
+#ifndef OPENSSL_NO_PSK
+ Py_VISIT(self->psk_client_callback);
+ Py_VISIT(self->psk_server_callback);
+#endif
Py_VISIT(Py_TYPE(self));
return 0;
}
@@ -4707,15 +4715,16 @@ _ssl._SSLContext.sni_callback
Set a callback that will be called when a server name is provided by the SSL/TLS client in the SNI extension.
-If the argument is None then the callback is disabled. The method is called
-with the SSLSocket, the server name as a string, and the SSLContext object.
+If the argument is None then the callback is disabled. The method
+is called with the SSLSocket, the server name as a string, and the
+SSLContext object.
See RFC 6066 for details of the SNI extension.
[clinic start generated code]*/
static PyObject *
_ssl__SSLContext_sni_callback_get_impl(PySSLContext *self)
-/*[clinic end generated code: output=961e6575cdfaf036 input=9b2473c5e984cfe6]*/
+/*[clinic end generated code: output=961e6575cdfaf036 input=280120c01d089dc3]*/
{
PyObject *cb = self->set_sni_cb;
if (cb == NULL) {
@@ -4807,16 +4816,16 @@ _ssl._SSLContext.cert_store_stats
Returns quantities of loaded X.509 certificates.
-X.509 certificates with a CA extension and certificate revocation lists
-inside the context's cert store.
+X.509 certificates with a CA extension and certificate revocation
+lists inside the context's cert store.
-NOTE: Certificates in a capath directory aren't loaded unless they have
-been used at least once.
+NOTE: Certificates in a capath directory aren't loaded unless they
+have been used at least once.
[clinic start generated code]*/
static PyObject *
_ssl__SSLContext_cert_store_stats_impl(PySSLContext *self)
-/*[clinic end generated code: output=5f356f4d9cca874d input=d13c6e3f2b48539b]*/
+/*[clinic end generated code: output=5f356f4d9cca874d input=9e5094e094b892a3]*/
{
X509_STORE *store;
STACK_OF(X509_OBJECT) *objs;
@@ -4859,16 +4868,16 @@ _ssl._SSLContext.get_ca_certs
Returns a list of dicts with information of loaded CA certs.
-If the optional argument is True, returns a DER-encoded copy of the CA
-certificate.
+If the optional argument is True, returns a DER-encoded copy of the
+CA certificate.
-NOTE: Certificates in a capath directory aren't loaded unless they have
-been used at least once.
+NOTE: Certificates in a capath directory aren't loaded unless they
+have been used at least once.
[clinic start generated code]*/
static PyObject *
_ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form)
-/*[clinic end generated code: output=0d58f148f37e2938 input=eb0592909c9ad6e7]*/
+/*[clinic end generated code: output=0d58f148f37e2938 input=9f71af5aa4e67076]*/
{
X509_STORE *store;
STACK_OF(X509_OBJECT) *objs;
@@ -5756,13 +5765,13 @@ _ssl.RAND_status
Returns True if the OpenSSL PRNG has been seeded with enough data and False if not.
-It is necessary to seed the PRNG with RAND_add() on some platforms before
-using the ssl() function.
+It is necessary to seed the PRNG with RAND_add() on some platforms
+before using the ssl() function.
[clinic start generated code]*/
static PyObject *
_ssl_RAND_status_impl(PyObject *module)
-/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=636fb5659ea2e727]*/
+/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=844b0dc0f2165e87]*/
{
return PyBool_FromLong(RAND_status());
}
@@ -6024,16 +6033,16 @@ _ssl.enum_certificates
Retrieve certificates from Windows' cert store.
-store_name may be one of 'CA', 'ROOT' or 'MY'. The system may provide
-more cert storages, too. The function returns a list of (bytes,
-encoding_type, trust) tuples. The encoding_type flag can be interpreted
-with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either
-a set of OIDs or the boolean True.
+store_name may be one of 'CA', 'ROOT' or 'MY'. The system may
+provide more cert storages, too. The function returns a list of
+(bytes, encoding_type, trust) tuples. The encoding_type flag can be
+interpreted with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The
+trust setting is either a set of OIDs or the boolean True.
[clinic start generated code]*/
static PyObject *
_ssl_enum_certificates_impl(PyObject *module, const char *store_name)
-/*[clinic end generated code: output=5134dc8bb3a3c893 input=263c22e6c6988cf3]*/
+/*[clinic end generated code: output=5134dc8bb3a3c893 input=ef81b4bd1b7ab8e9]*/
{
HCERTSTORE hCollectionStore = NULL;
PCCERT_CONTEXT pCertCtx = NULL;
diff --git a/contrib/tools/python3/Modules/_struct.c b/contrib/tools/python3/Modules/_struct.c
index f5e1c62bb24..8ca52b23fd1 100644
--- a/contrib/tools/python3/Modules/_struct.c
+++ b/contrib/tools/python3/Modules/_struct.c
@@ -1,7 +1,7 @@
/* struct module -- pack values into and (out of) bytes objects */
/* New version supporting byte order, alignment and size options,
- character strings, and unsigned numbers */
+ byte strings, and unsigned numbers */
#ifndef Py_BUILD_CORE_BUILTIN
# define Py_BUILD_CORE_MODULE 1
@@ -1947,7 +1947,7 @@ Struct_iter_unpack(PyStructObject *self, PyObject *buffer)
*
* Takes a struct object, a tuple of arguments, and offset in that tuple of
* argument for where to start processing the arguments for packing, and a
- * character buffer for writing the packed string. The caller must insure
+ * character buffer for writing the packed data. The caller must ensure
* that the buffer may contain the required length for packing the arguments.
* 0 is returned on success, 1 is returned if there is an error.
*
@@ -2484,8 +2484,8 @@ static struct PyMethodDef module_functions[] = {
PyDoc_STRVAR(module_doc,
"Functions to convert between Python values and C structs.\n\
-Python bytes objects are used to hold the data representing the C struct\n\
-and also as format strings (explained below) to describe the layout of data\n\
+Python bytes objects are used to hold the data representing the C struct.\n\
+The format string (explained below) describes the layout of data\n\
in the C struct.\n\
\n\
The optional first format char indicates byte order, size and alignment:\n\
@@ -2495,18 +2495,17 @@ The optional first format char indicates byte order, size and alignment:\n\
>: big-endian, std. size & alignment\n\
!: same as >\n\
\n\
-The remaining chars indicate types of args and must match exactly;\n\
+The remaining characters indicate types of args and must match exactly;\n\
these can be preceded by a decimal repeat count:\n\
- x: pad byte (no data); c:char; b:signed byte; B:unsigned byte;\n\
- ?:_Bool; h:short; H:unsigned short; i:int; I:unsigned int;\n\
- l:long; L:unsigned long; f:float; d:double; e:half-float.\n\
+ x: pad byte (no data); c: char; b: signed byte; B: unsigned byte;\n\
+ ?: _Bool; h: short; H: unsigned short; i: int; I: unsigned int;\n\
+ l: long; L: unsigned long; q: long long; Q: unsigned long long;\n\
+ f: float; d: double; e: half-float;\n\
Special cases (preceding decimal count indicates length):\n\
- s:string (array of char); p: pascal string (with count byte).\n\
+ s: byte string (array of char); p: Pascal string (with count byte).\n\
Special cases (only available in native format):\n\
- n:ssize_t; N:size_t;\n\
- P:an integer type that is wide enough to hold a pointer.\n\
-Special case (not in native mode unless 'long long' in platform C):\n\
- q:long long; Q:unsigned long long\n\
+ n: ssize_t; N: size_t;\n\
+ P: an integer type that is wide enough to hold a pointer.\n\
Whitespace between formats is ignored.\n\
\n\
The variable struct.error is an exception raised on errors.\n");
diff --git a/contrib/tools/python3/Modules/_testlimitedcapi/clinic/long.c.h b/contrib/tools/python3/Modules/_testlimitedcapi/clinic/long.c.h
index ebaeb53921a..f9852aba266 100644
--- a/contrib/tools/python3/Modules/_testlimitedcapi/clinic/long.c.h
+++ b/contrib/tools/python3/Modules/_testlimitedcapi/clinic/long.c.h
@@ -84,8 +84,8 @@ PyDoc_STRVAR(_testlimitedcapi_test_long_as_size_t__doc__,
"\n"
"Test the PyLong_As{Size,Ssize}_t API.\n"
"\n"
-"At present this just tests that non-integer arguments are handled correctly.\n"
-"It should be extended to test overflow handling.");
+"At present this just tests that non-integer arguments are handled\n"
+"correctly. It should be extended to test overflow handling.");
#define _TESTLIMITEDCAPI_TEST_LONG_AS_SIZE_T_METHODDEF \
{"test_long_as_size_t", (PyCFunction)_testlimitedcapi_test_long_as_size_t, METH_NOARGS, _testlimitedcapi_test_long_as_size_t__doc__},
@@ -140,4 +140,4 @@ PyDoc_STRVAR(_testlimitedcapi_PyLong_AsInt__doc__,
#define _TESTLIMITEDCAPI_PYLONG_ASINT_METHODDEF \
{"PyLong_AsInt", (PyCFunction)_testlimitedcapi_PyLong_AsInt, METH_O, _testlimitedcapi_PyLong_AsInt__doc__},
-/*[clinic end generated code: output=bc52b73c599f96c2 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=fb5c95bd0a4bdad8 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/_testlimitedcapi/long.c b/contrib/tools/python3/Modules/_testlimitedcapi/long.c
index e2af09d0840..35505ef33f4 100644
--- a/contrib/tools/python3/Modules/_testlimitedcapi/long.c
+++ b/contrib/tools/python3/Modules/_testlimitedcapi/long.c
@@ -451,13 +451,13 @@ _testlimitedcapi.test_long_as_size_t
Test the PyLong_As{Size,Ssize}_t API.
-At present this just tests that non-integer arguments are handled correctly.
-It should be extended to test overflow handling.
+At present this just tests that non-integer arguments are handled
+correctly. It should be extended to test overflow handling.
[clinic start generated code]*/
static PyObject *
_testlimitedcapi_test_long_as_size_t_impl(PyObject *module)
-/*[clinic end generated code: output=297a9f14a42f55af input=8923d8f2038c46f4]*/
+/*[clinic end generated code: output=297a9f14a42f55af input=692e73744b35bf6e]*/
{
size_t out_u;
Py_ssize_t out_s;
diff --git a/contrib/tools/python3/Modules/_testlimitedcapi/parts.h b/contrib/tools/python3/Modules/_testlimitedcapi/parts.h
index 11b2e5c6b83..4058df7fdef 100644
--- a/contrib/tools/python3/Modules/_testlimitedcapi/parts.h
+++ b/contrib/tools/python3/Modules/_testlimitedcapi/parts.h
@@ -41,5 +41,6 @@ int _PyTestLimitedCAPI_Init_Tuple(PyObject *module);
int _PyTestLimitedCAPI_Init_Unicode(PyObject *module);
int _PyTestLimitedCAPI_Init_VectorcallLimited(PyObject *module);
int _PyTestLimitedCAPI_Init_File(PyObject *module);
+int _PyTestLimitedCAPI_Init_Weakref(PyObject *module);
#endif // Py_TESTLIMITEDCAPI_PARTS_H
diff --git a/contrib/tools/python3/Modules/_testlimitedcapi/weakref.c b/contrib/tools/python3/Modules/_testlimitedcapi/weakref.c
new file mode 100644
index 00000000000..e7f9d54d1a0
--- /dev/null
+++ b/contrib/tools/python3/Modules/_testlimitedcapi/weakref.c
@@ -0,0 +1,78 @@
+#include "pyconfig.h" // Py_GIL_DISABLED
+#ifndef Py_GIL_DISABLED
+ // Need limited C API 3.5 for PyModule_AddFunctions()
+# define Py_LIMITED_API 0x03050000
+#endif
+
+#include "parts.h"
+#include "util.h"
+
+
+static PyObject *
+pyweakref_check(PyObject *module, PyObject *obj)
+{
+ NULLABLE(obj);
+ return PyLong_FromLong(PyWeakref_Check(obj));
+}
+
+static PyObject *
+pyweakref_checkref(PyObject *module, PyObject *obj)
+{
+ NULLABLE(obj);
+ return PyLong_FromLong(PyWeakref_CheckRef(obj));
+}
+
+static PyObject *
+pyweakref_checkrefexact(PyObject *module, PyObject *obj)
+{
+ NULLABLE(obj);
+ return PyLong_FromLong(PyWeakref_CheckRefExact(obj));
+}
+
+static PyObject *
+pyweakref_checkproxy(PyObject *module, PyObject *obj)
+{
+ NULLABLE(obj);
+ return PyLong_FromLong(PyWeakref_CheckProxy(obj));
+}
+
+static PyObject *
+pyweakref_newref(PyObject *module, PyObject *args)
+{
+ PyObject *obj;
+ PyObject *callback = NULL;
+ if (!PyArg_ParseTuple(args, "O|O", &obj, &callback)) {
+ return NULL;
+ }
+ NULLABLE(obj);
+ return PyWeakref_NewRef(obj, callback);
+}
+
+static PyObject *
+pyweakref_newproxy(PyObject *module, PyObject *args)
+{
+ PyObject *obj;
+ PyObject *callback = NULL;
+ if (!PyArg_ParseTuple(args, "O|O", &obj, &callback)) {
+ return NULL;
+ }
+ NULLABLE(obj);
+ return PyWeakref_NewProxy(obj, callback);
+}
+
+
+static PyMethodDef test_methods[] = {
+ {"pyweakref_check", pyweakref_check, METH_O},
+ {"pyweakref_checkref", pyweakref_checkref, METH_O},
+ {"pyweakref_checkrefexact", pyweakref_checkrefexact, METH_O},
+ {"pyweakref_checkproxy", pyweakref_checkproxy, METH_O},
+ {"pyweakref_newref", pyweakref_newref, METH_VARARGS},
+ {"pyweakref_newproxy", pyweakref_newproxy, METH_VARARGS},
+ {NULL},
+};
+
+int
+_PyTestLimitedCAPI_Init_Weakref(PyObject *m)
+{
+ return PyModule_AddFunctions(m, test_methods);
+}
diff --git a/contrib/tools/python3/Modules/_winapi.c b/contrib/tools/python3/Modules/_winapi.c
index d51586e6025..4d486400a09 100644
--- a/contrib/tools/python3/Modules/_winapi.c
+++ b/contrib/tools/python3/Modules/_winapi.c
@@ -1184,8 +1184,10 @@ gethandlelist(PyObject *mapping, const char *name, Py_ssize_t *size)
}
ret = PyMem_Malloc(*size);
- if (ret == NULL)
+ if (ret == NULL) {
+ PyErr_NoMemory();
goto cleanup;
+ }
for (i = 0; i < PySequence_Fast_GET_SIZE(value_fast); i++) {
ret[i] = PYNUM_TO_HANDLE(PySequence_Fast_GET_ITEM(value_fast, i));
@@ -1268,6 +1270,7 @@ getattributelist(PyObject *obj, const char *name, AttributeList *attribute_list)
attribute_list->attribute_list = PyMem_Malloc(attribute_list_size);
if (attribute_list->attribute_list == NULL) {
ret = -1;
+ PyErr_NoMemory();
goto cleanup;
}
diff --git a/contrib/tools/python3/Modules/arraymodule.c b/contrib/tools/python3/Modules/arraymodule.c
index 4c7cc4d47c0..25694e9cf33 100644
--- a/contrib/tools/python3/Modules/arraymodule.c
+++ b/contrib/tools/python3/Modules/arraymodule.c
@@ -1415,13 +1415,13 @@ array.array.buffer_info
Return a tuple (address, length) giving the current memory address and the length in items of the buffer used to hold array's contents.
-The length should be multiplied by the itemsize attribute to calculate
-the buffer length in bytes.
+The length should be multiplied by the itemsize attribute to
+calculate the buffer length in bytes.
[clinic start generated code]*/
static PyObject *
array_array_buffer_info_impl(arrayobject *self)
-/*[clinic end generated code: output=9b2a4ec3ae7e98e7 input=a58bae5c6e1ac6a6]*/
+/*[clinic end generated code: output=9b2a4ec3ae7e98e7 input=f4d34398d5dfc856]*/
{
PyObject *retval = NULL, *v;
@@ -1467,13 +1467,13 @@ array.array.byteswap
Byteswap all items of the array.
-If the items in the array are not 1, 2, 4, or 8 bytes in size, RuntimeError is
-raised.
+If the items in the array are not 1, 2, 4, or 8 bytes in size,
+RuntimeError is raised.
[clinic start generated code]*/
static PyObject *
array_array_byteswap_impl(arrayobject *self)
-/*[clinic end generated code: output=5f8236cbdf0d90b5 input=6a85591b950a0186]*/
+/*[clinic end generated code: output=5f8236cbdf0d90b5 input=3005a63cc263b839]*/
{
char *p;
Py_ssize_t i;
@@ -1817,14 +1817,14 @@ array.array.fromunicode
Extends this array with data from the unicode string ustr.
-The array must be a unicode type array; otherwise a ValueError is raised.
-Use array.frombytes(ustr.encode(...)) to append Unicode data to an array of
-some other type.
+The array must be a unicode type array; otherwise a ValueError is
+raised. Use array.frombytes(ustr.encode(...)) to append Unicode
+data to an array of some other type.
[clinic start generated code]*/
static PyObject *
array_array_fromunicode_impl(arrayobject *self, PyObject *ustr)
-/*[clinic end generated code: output=24359f5e001a7f2b input=025db1fdade7a4ce]*/
+/*[clinic end generated code: output=24359f5e001a7f2b input=01fa592ec7b948b6]*/
{
int typecode = self->ob_descr->typecode;
if (typecode != 'u' && typecode != 'w') {
@@ -1876,14 +1876,15 @@ array.array.tounicode
Extends this array with data from the unicode string ustr.
-Convert the array to a unicode string. The array must be a unicode type array;
-otherwise a ValueError is raised. Use array.tobytes().decode() to obtain a
-unicode string from an array of some other type.
+Convert the array to a unicode string. The array must be a unicode
+type array; otherwise a ValueError is raised. Use
+array.tobytes().decode() to obtain a unicode string from an array of
+some other type.
[clinic start generated code]*/
static PyObject *
array_array_tounicode_impl(arrayobject *self)
-/*[clinic end generated code: output=08e442378336e1ef input=127242eebe70b66d]*/
+/*[clinic end generated code: output=08e442378336e1ef input=d4d5f398aa71a2be]*/
{
int typecode = self->ob_descr->typecode;
if (typecode != 'u' && typecode != 'w') {
@@ -2440,7 +2441,8 @@ static PyMethodDef array_methods[] = {
ARRAY_ARRAY_TOBYTES_METHODDEF
ARRAY_ARRAY_TOUNICODE_METHODDEF
ARRAY_ARRAY___SIZEOF___METHODDEF
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("Arrays are generic over the type of their elements")},
{NULL, NULL} /* sentinel */
};
@@ -2821,8 +2823,10 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
len = 0;
a = newarrayobject(type, len, descr);
- if (a == NULL)
+ if (a == NULL) {
+ Py_XDECREF(it);
return NULL;
+ }
if (len > 0 && !array_Check(initial, state)) {
Py_ssize_t i;
@@ -2831,11 +2835,13 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PySequence_GetItem(initial, i);
if (v == NULL) {
Py_DECREF(a);
+ Py_XDECREF(it);
return NULL;
}
if (setarrayitem(a, i, v) != 0) {
Py_DECREF(v);
Py_DECREF(a);
+ Py_XDECREF(it);
return NULL;
}
Py_DECREF(v);
@@ -2848,6 +2854,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
initial);
if (v == NULL) {
Py_DECREF(a);
+ Py_XDECREF(it);
return NULL;
}
Py_DECREF(v);
@@ -2858,6 +2865,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
wchar_t *ustr = PyUnicode_AsWideCharString(initial, &n);
if (ustr == NULL) {
Py_DECREF(a);
+ Py_XDECREF(it);
return NULL;
}
@@ -2878,6 +2886,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Py_UCS4 *ustr = PyUnicode_AsUCS4Copy(initial);
if (ustr == NULL) {
Py_DECREF(a);
+ Py_XDECREF(it);
return NULL;
}
@@ -2905,6 +2914,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return a;
}
}
+ Py_XDECREF(it);
PyErr_SetString(PyExc_ValueError,
"bad typecode (must be b, B, u, w, h, H, i, I, l, L, q, Q, f or d)");
return NULL;
diff --git a/contrib/tools/python3/Modules/binascii.c b/contrib/tools/python3/Modules/binascii.c
index 1030eb15f41..6b762b809b5 100644
--- a/contrib/tools/python3/Modules/binascii.c
+++ b/contrib/tools/python3/Modules/binascii.c
@@ -219,6 +219,14 @@ binascii_a2b_uu_impl(PyObject *module, Py_buffer *data)
assert(ascii_len >= 0);
/* First byte: binary data length (in bytes) */
+ if (ascii_len == 0) {
+ state = get_binascii_state(module);
+ if (state == NULL) {
+ return NULL;
+ }
+ PyErr_SetString(state->Error, "Missing length byte");
+ return NULL;
+ }
bin_len = (*ascii_data++ - ' ') & 077;
ascii_len--;
diff --git a/contrib/tools/python3/Modules/cjkcodecs/clinic/multibytecodec.c.h b/contrib/tools/python3/Modules/cjkcodecs/clinic/multibytecodec.c.h
index b5639d5cf10..0fef4982a49 100644
--- a/contrib/tools/python3/Modules/cjkcodecs/clinic/multibytecodec.c.h
+++ b/contrib/tools/python3/Modules/cjkcodecs/clinic/multibytecodec.c.h
@@ -14,10 +14,11 @@ PyDoc_STRVAR(_multibytecodec_MultibyteCodec_encode__doc__,
"\n"
"Return an encoded string version of `input\'.\n"
"\n"
-"\'errors\' may be given to set a different error handling scheme. Default is\n"
-"\'strict\' meaning that encoding errors raise a UnicodeEncodeError. Other possible\n"
-"values are \'ignore\', \'replace\' and \'xmlcharrefreplace\' as well as any other name\n"
-"registered with codecs.register_error that can handle UnicodeEncodeErrors.");
+"\'errors\' may be given to set a different error handling scheme.\n"
+"Default is \'strict\' meaning that encoding errors raise\n"
+"a UnicodeEncodeError. Other possible values are \'ignore\', \'replace\'\n"
+"and \'xmlcharrefreplace\' as well as any other name registered with\n"
+"codecs.register_error that can handle UnicodeEncodeErrors.");
#define _MULTIBYTECODEC_MULTIBYTECODEC_ENCODE_METHODDEF \
{"encode", _PyCFunction_CAST(_multibytecodec_MultibyteCodec_encode), METH_FASTCALL|METH_KEYWORDS, _multibytecodec_MultibyteCodec_encode__doc__},
@@ -100,9 +101,10 @@ PyDoc_STRVAR(_multibytecodec_MultibyteCodec_decode__doc__,
"\n"
"Decodes \'input\'.\n"
"\n"
-"\'errors\' may be given to set a different error handling scheme. Default is\n"
-"\'strict\' meaning that encoding errors raise a UnicodeDecodeError. Other possible\n"
-"values are \'ignore\' and \'replace\' as well as any other name registered with\n"
+"\'errors\' may be given to set a different error handling scheme.\n"
+"Default is \'strict\' meaning that encoding errors raise\n"
+"a UnicodeDecodeError. Other possible values are \'ignore\' and\n"
+"\'replace\' as well as any other name registered with\n"
"codecs.register_error that is able to handle UnicodeDecodeErrors.\"");
#define _MULTIBYTECODEC_MULTIBYTECODEC_DECODE_METHODDEF \
@@ -682,4 +684,4 @@ PyDoc_STRVAR(_multibytecodec___create_codec__doc__,
#define _MULTIBYTECODEC___CREATE_CODEC_METHODDEF \
{"__create_codec", (PyCFunction)_multibytecodec___create_codec, METH_O, _multibytecodec___create_codec__doc__},
-/*[clinic end generated code: output=ee767a6d93c7108a input=a9049054013a1b77]*/
+/*[clinic end generated code: output=de24dedc0342de51 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/cjkcodecs/multibytecodec.c b/contrib/tools/python3/Modules/cjkcodecs/multibytecodec.c
index 1c671adb4ff..1274ba40940 100644
--- a/contrib/tools/python3/Modules/cjkcodecs/multibytecodec.c
+++ b/contrib/tools/python3/Modules/cjkcodecs/multibytecodec.c
@@ -576,17 +576,18 @@ _multibytecodec.MultibyteCodec.encode
Return an encoded string version of `input'.
-'errors' may be given to set a different error handling scheme. Default is
-'strict' meaning that encoding errors raise a UnicodeEncodeError. Other possible
-values are 'ignore', 'replace' and 'xmlcharrefreplace' as well as any other name
-registered with codecs.register_error that can handle UnicodeEncodeErrors.
+'errors' may be given to set a different error handling scheme.
+Default is 'strict' meaning that encoding errors raise
+a UnicodeEncodeError. Other possible values are 'ignore', 'replace'
+and 'xmlcharrefreplace' as well as any other name registered with
+codecs.register_error that can handle UnicodeEncodeErrors.
[clinic start generated code]*/
static PyObject *
_multibytecodec_MultibyteCodec_encode_impl(MultibyteCodecObject *self,
PyObject *input,
const char *errors)
-/*[clinic end generated code: output=7b26652045ba56a9 input=606d0e128a577bae]*/
+/*[clinic end generated code: output=7b26652045ba56a9 input=e047a75a21752801]*/
{
MultibyteCodec_State state;
PyObject *errorcb, *r, *ucvt;
@@ -641,9 +642,10 @@ _multibytecodec.MultibyteCodec.decode
Decodes 'input'.
-'errors' may be given to set a different error handling scheme. Default is
-'strict' meaning that encoding errors raise a UnicodeDecodeError. Other possible
-values are 'ignore' and 'replace' as well as any other name registered with
+'errors' may be given to set a different error handling scheme.
+Default is 'strict' meaning that encoding errors raise
+a UnicodeDecodeError. Other possible values are 'ignore' and
+'replace' as well as any other name registered with
codecs.register_error that is able to handle UnicodeDecodeErrors."
[clinic start generated code]*/
@@ -651,7 +653,7 @@ static PyObject *
_multibytecodec_MultibyteCodec_decode_impl(MultibyteCodecObject *self,
Py_buffer *input,
const char *errors)
-/*[clinic end generated code: output=ff419f65bad6cc77 input=e0c78fc7ab190def]*/
+/*[clinic end generated code: output=ff419f65bad6cc77 input=dbf93d8bb98ca440]*/
{
MultibyteCodec_State state;
MultibyteDecodeBuffer buf;
diff --git a/contrib/tools/python3/Modules/clinic/_abc.c.h b/contrib/tools/python3/Modules/clinic/_abc.c.h
index 04681fa2206..fa1c57dc26b 100644
--- a/contrib/tools/python3/Modules/clinic/_abc.c.h
+++ b/contrib/tools/python3/Modules/clinic/_abc.c.h
@@ -146,9 +146,9 @@ PyDoc_STRVAR(_abc_get_cache_token__doc__,
"\n"
"Returns the current ABC cache token.\n"
"\n"
-"The token is an opaque object (supporting equality testing) identifying the\n"
-"current version of the ABC cache for virtual subclasses. The token changes\n"
-"with every call to register() on any ABC.");
+"The token is an opaque object (supporting equality testing) identifying\n"
+"the current version of the ABC cache for virtual subclasses. The token\n"
+"changes with every call to register() on any ABC.");
#define _ABC_GET_CACHE_TOKEN_METHODDEF \
{"get_cache_token", (PyCFunction)_abc_get_cache_token, METH_NOARGS, _abc_get_cache_token__doc__},
@@ -161,4 +161,4 @@ _abc_get_cache_token(PyObject *module, PyObject *Py_UNUSED(ignored))
{
return _abc_get_cache_token_impl(module);
}
-/*[clinic end generated code: output=1989b6716c950e17 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=b05d599656aeb1e1 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_asynciomodule.c.h b/contrib/tools/python3/Modules/clinic/_asynciomodule.c.h
index 6a9c8ff6d8f..0cbf1475d64 100644
--- a/contrib/tools/python3/Modules/clinic/_asynciomodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_asynciomodule.c.h
@@ -86,7 +86,8 @@ PyDoc_STRVAR(_asyncio_Future_result__doc__,
"\n"
"If the future has been cancelled, raises CancelledError. If the\n"
"future\'s result isn\'t yet available, raises InvalidStateError. If\n"
-"the future is done and has an exception set, this exception is raised.");
+"the future is done and has an exception set, this exception is\n"
+"raised.");
#define _ASYNCIO_FUTURE_RESULT_METHODDEF \
{"result", (PyCFunction)_asyncio_Future_result, METH_NOARGS, _asyncio_Future_result__doc__},
@@ -227,8 +228,8 @@ PyDoc_STRVAR(_asyncio_Future_add_done_callback__doc__,
"\n"
"Add a callback to be run when the future becomes done.\n"
"\n"
-"The callback is called with a single argument - the future object. If\n"
-"the future is already done when this is called, the callback is\n"
+"The callback is called with a single argument - the future object.\n"
+"If the future is already done when this is called, the callback is\n"
"scheduled with call_soon.");
#define _ASYNCIO_FUTURE_ADD_DONE_CALLBACK_METHODDEF \
@@ -340,9 +341,9 @@ PyDoc_STRVAR(_asyncio_Future_cancel__doc__,
"\n"
"Cancel the future and schedule callbacks.\n"
"\n"
-"If the future is already done or cancelled, return False. Otherwise,\n"
-"change the future\'s state to cancelled, schedule the callbacks and\n"
-"return True.");
+"If the future is already done or cancelled, return False.\n"
+"Otherwise, change the future\'s state to cancelled, schedule the\n"
+"callbacks and return True.");
#define _ASYNCIO_FUTURE_CANCEL_METHODDEF \
{"cancel", _PyCFunction_CAST(_asyncio_Future_cancel), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _asyncio_Future_cancel__doc__},
@@ -423,8 +424,8 @@ PyDoc_STRVAR(_asyncio_Future_done__doc__,
"\n"
"Return True if the future is done.\n"
"\n"
-"Done means either that a result / exception are available, or that the\n"
-"future was cancelled.");
+"Done means either that a result / exception are available, or that\n"
+"the future was cancelled.");
#define _ASYNCIO_FUTURE_DONE_METHODDEF \
{"done", (PyCFunction)_asyncio_Future_done, METH_NOARGS, _asyncio_Future_done__doc__},
@@ -1487,4 +1488,4 @@ skip_optional_pos:
exit:
return return_value;
}
-/*[clinic end generated code: output=b26155080c82c472 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=1842473913c9f884 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_bisectmodule.c.h b/contrib/tools/python3/Modules/clinic/_bisectmodule.c.h
index 528602c84a9..25ebb1727fd 100644
--- a/contrib/tools/python3/Modules/clinic/_bisectmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_bisectmodule.c.h
@@ -16,8 +16,8 @@ PyDoc_STRVAR(_bisect_bisect_right__doc__,
"Return the index where to insert item x in list a, assuming a is sorted.\n"
"\n"
"The return value i is such that all e in a[:i] have e <= x, and all e in\n"
-"a[i:] have e > x. So if x already appears in the list, a.insert(i, x) will\n"
-"insert just after the rightmost x already there.\n"
+"a[i:] have e > x. So if x already appears in the list, a.insert(i, x)\n"
+"will insert just after the rightmost x already there.\n"
"\n"
"Optional args lo (default 0) and hi (default len(a)) bound the\n"
"slice of a to be searched.\n"
@@ -229,8 +229,8 @@ PyDoc_STRVAR(_bisect_bisect_left__doc__,
"Return the index where to insert item x in list a, assuming a is sorted.\n"
"\n"
"The return value i is such that all e in a[:i] have e < x, and all e in\n"
-"a[i:] have e >= x. So if x already appears in the list, a.insert(i, x) will\n"
-"insert just before the leftmost x already there.\n"
+"a[i:] have e >= x. So if x already appears in the list, a.insert(i, x)\n"
+"will insert just before the leftmost x already there.\n"
"\n"
"Optional args lo (default 0) and hi (default len(a)) bound the\n"
"slice of a to be searched.\n"
@@ -434,4 +434,4 @@ skip_optional_kwonly:
exit:
return return_value;
}
-/*[clinic end generated code: output=0a8d5a32dd0a3f04 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=97bfe6ec4565161a input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_bz2module.c.h b/contrib/tools/python3/Modules/clinic/_bz2module.c.h
index de7b3993596..3c5f228a933 100644
--- a/contrib/tools/python3/Modules/clinic/_bz2module.c.h
+++ b/contrib/tools/python3/Modules/clinic/_bz2module.c.h
@@ -116,18 +116,19 @@ PyDoc_STRVAR(_bz2_BZ2Decompressor_decompress__doc__,
"\n"
"Decompress *data*, returning uncompressed data as bytes.\n"
"\n"
-"If *max_length* is nonnegative, returns at most *max_length* bytes of\n"
-"decompressed data. If this limit is reached and further output can be\n"
-"produced, *self.needs_input* will be set to ``False``. In this case, the next\n"
-"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n"
+"If *max_length* is nonnegative, returns at most *max_length* bytes\n"
+"of decompressed data. If this limit is reached and further output\n"
+"can be produced, *self.needs_input* will be set to ``False``. In\n"
+"this case, the next call to *decompress()* may provide *data* as b\'\'\n"
+"to obtain more of the output.\n"
"\n"
-"If all of the input data was decompressed and returned (either because this\n"
-"was less than *max_length* bytes, or because *max_length* was negative),\n"
-"*self.needs_input* will be set to True.\n"
+"If all of the input data was decompressed and returned (either\n"
+"because this was less than *max_length* bytes, or because\n"
+"*max_length* was negative), *self.needs_input* will be set to True.\n"
"\n"
-"Attempting to decompress data after the end of stream is reached raises an\n"
-"EOFError. Any data found after the end of the stream is ignored and saved in\n"
-"the unused_data attribute.");
+"Attempting to decompress data after the end of stream is reached\n"
+"raises an EOFError. Any data found after the end of the stream is\n"
+"ignored and saved in the unused_data attribute.");
#define _BZ2_BZ2DECOMPRESSOR_DECOMPRESS_METHODDEF \
{"decompress", _PyCFunction_CAST(_bz2_BZ2Decompressor_decompress), METH_FASTCALL|METH_KEYWORDS, _bz2_BZ2Decompressor_decompress__doc__},
@@ -234,4 +235,4 @@ _bz2_BZ2Decompressor(PyTypeObject *type, PyObject *args, PyObject *kwargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=8daa62f47cc4853d input=a9049054013a1b77]*/
+/*[clinic end generated code: output=3f17a58daa209221 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_codecsmodule.c.h b/contrib/tools/python3/Modules/clinic/_codecsmodule.c.h
index 1c0f37442ab..6e7f26c95ec 100644
--- a/contrib/tools/python3/Modules/clinic/_codecsmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_codecsmodule.c.h
@@ -14,9 +14,10 @@ PyDoc_STRVAR(_codecs_register__doc__,
"\n"
"Register a codec search function.\n"
"\n"
-"Search functions are expected to take one argument, the encoding name in\n"
-"all lower case letters, and either return None, or a tuple of functions\n"
-"(encoder, decoder, stream_reader, stream_writer) (or a CodecInfo object).");
+"Search functions are expected to take one argument, the encoding\n"
+"name in all lower case letters, and either return None, or a tuple\n"
+"of functions (encoder, decoder, stream_reader, stream_writer) (or\n"
+"a CodecInfo object).");
#define _CODECS_REGISTER_METHODDEF \
{"register", (PyCFunction)_codecs_register, METH_O, _codecs_register__doc__},
@@ -76,10 +77,10 @@ PyDoc_STRVAR(_codecs_encode__doc__,
"Encodes obj using the codec registered for encoding.\n"
"\n"
"The default encoding is \'utf-8\'. errors may be given to set a\n"
-"different error handling scheme. Default is \'strict\' meaning that encoding\n"
-"errors raise a ValueError. Other possible values are \'ignore\', \'replace\'\n"
-"and \'backslashreplace\' as well as any other name registered with\n"
-"codecs.register_error that can handle ValueErrors.");
+"different error handling scheme. Default is \'strict\' meaning that\n"
+"encoding errors raise a ValueError. Other possible values are \'ignore\',\n"
+"\'replace\' and \'backslashreplace\' as well as any other name registered\n"
+"with codecs.register_error that can handle ValueErrors.");
#define _CODECS_ENCODE_METHODDEF \
{"encode", _PyCFunction_CAST(_codecs_encode), METH_FASTCALL|METH_KEYWORDS, _codecs_encode__doc__},
@@ -176,10 +177,10 @@ PyDoc_STRVAR(_codecs_decode__doc__,
"Decodes obj using the codec registered for encoding.\n"
"\n"
"Default encoding is \'utf-8\'. errors may be given to set a\n"
-"different error handling scheme. Default is \'strict\' meaning that encoding\n"
-"errors raise a ValueError. Other possible values are \'ignore\', \'replace\'\n"
-"and \'backslashreplace\' as well as any other name registered with\n"
-"codecs.register_error that can handle ValueErrors.");
+"different error handling scheme. Default is \'strict\' meaning that\n"
+"encoding errors raise a ValueError. Other possible values are \'ignore\',\n"
+"\'replace\' and \'backslashreplace\' as well as any other name registered\n"
+"with codecs.register_error that can handle ValueErrors.");
#define _CODECS_DECODE_METHODDEF \
{"decode", _PyCFunction_CAST(_codecs_decode), METH_FASTCALL|METH_KEYWORDS, _codecs_decode__doc__},
@@ -2643,8 +2644,9 @@ PyDoc_STRVAR(_codecs_register_error__doc__,
"Register the specified error handler under the name errors.\n"
"\n"
"handler must be a callable object, that will be called with an exception\n"
-"instance containing information about the location of the encoding/decoding\n"
-"error and must return a (replacement, new position) tuple.");
+"instance containing information about the location of the\n"
+"encoding/decoding error and must return a (replacement, new position)\n"
+"tuple.");
#define _CODECS_REGISTER_ERROR_METHODDEF \
{"register_error", _PyCFunction_CAST(_codecs_register_error), METH_FASTCALL, _codecs_register_error__doc__},
@@ -2689,8 +2691,8 @@ PyDoc_STRVAR(_codecs_lookup_error__doc__,
"\n"
"lookup_error(errors) -> handler\n"
"\n"
-"Return the error handler for the specified error handling name or raise a\n"
-"LookupError, if no handler exists under this name.");
+"Return the error handler for the specified error handling name or raise\n"
+"a LookupError, if no handler exists under this name.");
#define _CODECS_LOOKUP_ERROR_METHODDEF \
{"lookup_error", (PyCFunction)_codecs_lookup_error, METH_O, _codecs_lookup_error__doc__},
@@ -2746,4 +2748,4 @@ exit:
#ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF
#define _CODECS_CODE_PAGE_ENCODE_METHODDEF
#endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */
-/*[clinic end generated code: output=e50d5fdf65bd45fa input=a9049054013a1b77]*/
+/*[clinic end generated code: output=2badac642569e7a5 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_curses_panel.c.h b/contrib/tools/python3/Modules/clinic/_curses_panel.c.h
index c8788c461f7..520a0afb4c1 100644
--- a/contrib/tools/python3/Modules/clinic/_curses_panel.c.h
+++ b/contrib/tools/python3/Modules/clinic/_curses_panel.c.h
@@ -35,7 +35,8 @@ PyDoc_STRVAR(_curses_panel_panel_hide__doc__,
"\n"
"Hide the panel.\n"
"\n"
-"This does not delete the object, it just makes the window on screen invisible.");
+"This does not delete the object, it just makes the window on screen\n"
+"invisible.");
#define _CURSES_PANEL_PANEL_HIDE_METHODDEF \
{"hide", _PyCFunction_CAST(_curses_panel_panel_hide), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _curses_panel_panel_hide__doc__},
@@ -408,7 +409,8 @@ PyDoc_STRVAR(_curses_panel_update_panels__doc__,
"\n"
"Updates the virtual screen after changes in the panel stack.\n"
"\n"
-"This does not call curses.doupdate(), so you\'ll have to do this yourself.");
+"This does not call curses.doupdate(), so you\'ll have to do this\n"
+"yourself.");
#define _CURSES_PANEL_UPDATE_PANELS_METHODDEF \
{"update_panels", (PyCFunction)_curses_panel_update_panels, METH_NOARGS, _curses_panel_update_panels__doc__},
@@ -421,4 +423,4 @@ _curses_panel_update_panels(PyObject *module, PyObject *Py_UNUSED(ignored))
{
return _curses_panel_update_panels_impl(module);
}
-/*[clinic end generated code: output=18dc5571174c7189 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=256acf1bc500a868 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_cursesmodule.c.h b/contrib/tools/python3/Modules/clinic/_cursesmodule.c.h
index b4b3dca1f4c..16d70e4a1a5 100644
--- a/contrib/tools/python3/Modules/clinic/_cursesmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_cursesmodule.c.h
@@ -422,10 +422,10 @@ PyDoc_STRVAR(_curses_window_border__doc__,
" br\n"
" Bottom-right corner.\n"
"\n"
-"Each parameter specifies the character to use for a specific part of the\n"
-"border. The characters can be specified as integers or as one-character\n"
-"strings. A 0 value for any parameter will cause the default character to be\n"
-"used for that parameter.");
+"Each parameter specifies the character to use for a specific part of\n"
+"the border. The characters can be specified as integers or as\n"
+"one-character strings. A 0 value for any parameter will cause the\n"
+"default character to be used for that parameter.");
#define _CURSES_WINDOW_BORDER_METHODDEF \
{"border", _PyCFunction_CAST(_curses_window_border), METH_FASTCALL, _curses_window_border__doc__},
@@ -500,8 +500,9 @@ PyDoc_STRVAR(_curses_window_box__doc__,
" horch\n"
" Top and bottom side.\n"
"\n"
-"Similar to border(), but both ls and rs are verch and both ts and bs are\n"
-"horch. The default corner characters are always used by this function.");
+"Similar to border(), but both ls and rs are verch and both ts and bs\n"
+"are horch. The default corner characters are always used by this\n"
+"function.");
#define _CURSES_WINDOW_BOX_METHODDEF \
{"box", (PyCFunction)_curses_window_box, METH_VARARGS, _curses_window_box__doc__},
@@ -593,9 +594,9 @@ PyDoc_STRVAR(_curses_window_derwin__doc__,
" begin_x\n"
" Left side x-coordinate.\n"
"\n"
-"derwin() is the same as calling subwin(), except that begin_y and begin_x\n"
-"are relative to the origin of the window, rather than relative to the entire\n"
-"screen.");
+"derwin() is the same as calling subwin(), except that begin_y and\n"
+"begin_x are relative to the origin of the window, rather than\n"
+"relative to the entire screen.");
#define _CURSES_WINDOW_DERWIN_METHODDEF \
{"derwin", (PyCFunction)_curses_window_derwin, METH_VARARGS, _curses_window_derwin__doc__},
@@ -761,9 +762,10 @@ PyDoc_STRVAR(_curses_window_getch__doc__,
" x\n"
" X-coordinate.\n"
"\n"
-"The integer returned does not have to be in ASCII range: function keys,\n"
-"keypad keys and so on return numbers higher than 256. In no-delay mode, -1\n"
-"is returned if there is no input, else getch() waits until a key is pressed.");
+"The integer returned does not have to be in ASCII range: function\n"
+"keys, keypad keys and so on return numbers higher than 256. In\n"
+"no-delay mode, -1 is returned if there is no input, else getch()\n"
+"waits until a key is pressed.");
#define _CURSES_WINDOW_GETCH_METHODDEF \
{"getch", (PyCFunction)_curses_window_getch, METH_VARARGS, _curses_window_getch__doc__},
@@ -808,9 +810,10 @@ PyDoc_STRVAR(_curses_window_getkey__doc__,
" x\n"
" X-coordinate.\n"
"\n"
-"Returning a string instead of an integer, as getch() does. Function keys,\n"
-"keypad keys and other special keys return a multibyte string containing the\n"
-"key name. In no-delay mode, an exception is raised if there is no input.");
+"Returning a string instead of an integer, as getch() does. Function\n"
+"keys, keypad keys and other special keys return a multibyte string\n"
+"containing the key name. In no-delay mode, an exception is raised\n"
+"if there is no input.");
#define _CURSES_WINDOW_GETKEY_METHODDEF \
{"getkey", (PyCFunction)_curses_window_getkey, METH_VARARGS, _curses_window_getkey__doc__},
@@ -979,8 +982,8 @@ PyDoc_STRVAR(_curses_window_insch__doc__,
" attr\n"
" Attributes for the character.\n"
"\n"
-"All characters to the right of the cursor are shifted one position right, with\n"
-"the rightmost characters on the line being lost.");
+"All characters to the right of the cursor are shifted one position\n"
+"right, with the rightmost characters on the line being lost.");
#define _CURSES_WINDOW_INSCH_METHODDEF \
{"insch", (PyCFunction)_curses_window_insch, METH_VARARGS, _curses_window_insch__doc__},
@@ -1045,7 +1048,8 @@ PyDoc_STRVAR(_curses_window_inch__doc__,
" x\n"
" X-coordinate.\n"
"\n"
-"The bottom 8 bits are the character proper, and upper bits are the attributes.");
+"The bottom 8 bits are the character proper, and upper bits are the\n"
+"attributes.");
#define _CURSES_WINDOW_INCH_METHODDEF \
{"inch", (PyCFunction)_curses_window_inch, METH_VARARGS, _curses_window_inch__doc__},
@@ -1099,11 +1103,11 @@ PyDoc_STRVAR(_curses_window_insstr__doc__,
" attr\n"
" Attributes for characters.\n"
"\n"
-"Insert a character string (as many characters as will fit on the line)\n"
-"before the character under the cursor. All characters to the right of\n"
-"the cursor are shifted right, with the rightmost characters on the line\n"
-"being lost. The cursor position does not change (after moving to y, x,\n"
-"if specified).");
+"Insert a character string (as many characters as will fit on the\n"
+"line) before the character under the cursor. All characters to the\n"
+"right of the cursor are shifted right, with the rightmost characters\n"
+"on the line being lost. The cursor position does not change (after\n"
+"moving to y, x, if specified).");
#define _CURSES_WINDOW_INSSTR_METHODDEF \
{"insstr", (PyCFunction)_curses_window_insstr, METH_VARARGS, _curses_window_insstr__doc__},
@@ -1174,12 +1178,12 @@ PyDoc_STRVAR(_curses_window_insnstr__doc__,
" attr\n"
" Attributes for characters.\n"
"\n"
-"Insert a character string (as many characters as will fit on the line)\n"
-"before the character under the cursor, up to n characters. If n is zero\n"
-"or negative, the entire string is inserted. All characters to the right\n"
-"of the cursor are shifted right, with the rightmost characters on the line\n"
-"being lost. The cursor position does not change (after moving to y, x, if\n"
-"specified).");
+"Insert a character string (as many characters as will fit on the\n"
+"line) before the character under the cursor, up to n characters. If\n"
+"n is zero or negative, the entire string is inserted. All\n"
+"characters to the right of the cursor are shifted right, with the\n"
+"rightmost characters on the line being lost. The cursor position\n"
+"does not change (after moving to y, x, if specified).");
#define _CURSES_WINDOW_INSNSTR_METHODDEF \
{"insnstr", (PyCFunction)_curses_window_insnstr, METH_VARARGS, _curses_window_insnstr__doc__},
@@ -1245,7 +1249,8 @@ PyDoc_STRVAR(_curses_window_is_linetouched__doc__,
" line\n"
" Line number.\n"
"\n"
-"Raise a curses.error exception if line is not valid for the given window.");
+"Raise a curses.error exception if line is not valid for the given\n"
+"window.");
#define _CURSES_WINDOW_IS_LINETOUCHED_METHODDEF \
{"is_linetouched", (PyCFunction)_curses_window_is_linetouched, METH_O, _curses_window_is_linetouched__doc__},
@@ -1275,9 +1280,9 @@ PyDoc_STRVAR(_curses_window_noutrefresh__doc__,
"noutrefresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])\n"
"Mark for refresh but wait.\n"
"\n"
-"This function updates the data structure representing the desired state of the\n"
-"window, but does not force an update of the physical screen. To accomplish\n"
-"that, call doupdate().");
+"This function updates the data structure representing the desired\n"
+"state of the window, but does not force an update of the physical\n"
+"screen. To accomplish that, call doupdate().");
#define _CURSES_WINDOW_NOUTREFRESH_METHODDEF \
{"noutrefresh", (PyCFunction)_curses_window_noutrefresh, METH_VARARGS, _curses_window_noutrefresh__doc__},
@@ -1329,9 +1334,9 @@ PyDoc_STRVAR(_curses_window_noutrefresh__doc__,
"\n"
"Mark for refresh but wait.\n"
"\n"
-"This function updates the data structure representing the desired state of the\n"
-"window, but does not force an update of the physical screen. To accomplish\n"
-"that, call doupdate().");
+"This function updates the data structure representing the desired\n"
+"state of the window, but does not force an update of the physical\n"
+"screen. To accomplish that, call doupdate().");
#define _CURSES_WINDOW_NOUTREFRESH_METHODDEF \
{"noutrefresh", (PyCFunction)_curses_window_noutrefresh, METH_NOARGS, _curses_window_noutrefresh__doc__},
@@ -1351,14 +1356,15 @@ PyDoc_STRVAR(_curses_window_overlay__doc__,
"overlay(destwin, [sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])\n"
"Overlay the window on top of destwin.\n"
"\n"
-"The windows need not be the same size, only the overlapping region is copied.\n"
-"This copy is non-destructive, which means that the current background\n"
-"character does not overwrite the old contents of destwin.\n"
+"The windows need not be the same size, only the overlapping region\n"
+"is copied. This copy is non-destructive, which means that the\n"
+"current background character does not overwrite the old contents of\n"
+"destwin.\n"
"\n"
-"To get fine-grained control over the copied region, the second form of\n"
-"overlay() can be used. sminrow and smincol are the upper-left coordinates\n"
-"of the source window, and the other variables mark a rectangle in the\n"
-"destination window.");
+"To get fine-grained control over the copied region, the second form\n"
+"of overlay() can be used. sminrow and smincol are the upper-left\n"
+"coordinates of the source window, and the other variables mark\n"
+"a rectangle in the destination window.");
#define _CURSES_WINDOW_OVERLAY_METHODDEF \
{"overlay", (PyCFunction)_curses_window_overlay, METH_VARARGS, _curses_window_overlay__doc__},
@@ -1409,14 +1415,15 @@ PyDoc_STRVAR(_curses_window_overwrite__doc__,
" dmaxcol])\n"
"Overwrite the window on top of destwin.\n"
"\n"
-"The windows need not be the same size, in which case only the overlapping\n"
-"region is copied. This copy is destructive, which means that the current\n"
-"background character overwrites the old contents of destwin.\n"
+"The windows need not be the same size, in which case only the\n"
+"overlapping region is copied. This copy is destructive, which means\n"
+"that the current background character overwrites the old contents of\n"
+"destwin.\n"
"\n"
-"To get fine-grained control over the copied region, the second form of\n"
-"overwrite() can be used. sminrow and smincol are the upper-left coordinates\n"
-"of the source window, the other variables mark a rectangle in the destination\n"
-"window.");
+"To get fine-grained control over the copied region, the second form\n"
+"of overwrite() can be used. sminrow and smincol are the upper-left\n"
+"coordinates of the source window, the other variables mark\n"
+"a rectangle in the destination window.");
#define _CURSES_WINDOW_OVERWRITE_METHODDEF \
{"overwrite", (PyCFunction)_curses_window_overwrite, METH_VARARGS, _curses_window_overwrite__doc__},
@@ -1522,16 +1529,17 @@ PyDoc_STRVAR(_curses_window_refresh__doc__,
"Update the display immediately.\n"
"\n"
"Synchronize actual screen with previous drawing/deleting methods.\n"
-"The 6 optional arguments can only be specified when the window is a pad\n"
-"created with newpad(). The additional parameters are needed to indicate\n"
-"what part of the pad and screen are involved. pminrow and pmincol specify\n"
-"the upper left-hand corner of the rectangle to be displayed in the pad.\n"
-"sminrow, smincol, smaxrow, and smaxcol specify the edges of the rectangle to\n"
-"be displayed on the screen. The lower right-hand corner of the rectangle to\n"
-"be displayed in the pad is calculated from the screen coordinates, since the\n"
-"rectangles must be the same size. Both rectangles must be entirely contained\n"
-"within their respective structures. Negative values of pminrow, pmincol,\n"
-"sminrow, or smincol are treated as if they were zero.");
+"The 6 optional arguments can only be specified when the window is\n"
+"a pad created with newpad(). The additional parameters are needed\n"
+"to indicate what part of the pad and screen are involved. pminrow\n"
+"and pmincol specify the upper left-hand corner of the rectangle to\n"
+"be displayed in the pad. sminrow, smincol, smaxrow, and smaxcol\n"
+"specify the edges of the rectangle to be displayed on the screen.\n"
+"The lower right-hand corner of the rectangle to be displayed in the\n"
+"pad is calculated from the screen coordinates, since the rectangles\n"
+"must be the same size. Both rectangles must be entirely contained\n"
+"within their respective structures. Negative values of pminrow,\n"
+"pmincol, sminrow, or smincol are treated as if they were zero.");
#define _CURSES_WINDOW_REFRESH_METHODDEF \
{"refresh", (PyCFunction)_curses_window_refresh, METH_VARARGS, _curses_window_refresh__doc__},
@@ -1629,8 +1637,8 @@ PyDoc_STRVAR(_curses_window_subwin__doc__,
" begin_x\n"
" Left side x-coordinate.\n"
"\n"
-"By default, the sub-window will extend from the specified position to the\n"
-"lower right corner of the window.");
+"By default, the sub-window will extend from the specified position\n"
+"to the lower right corner of the window.");
#define _CURSES_WINDOW_SUBWIN_METHODDEF \
{"subwin", (PyCFunction)_curses_window_subwin, METH_VARARGS, _curses_window_subwin__doc__},
@@ -1678,7 +1686,8 @@ PyDoc_STRVAR(_curses_window_scroll__doc__,
" lines\n"
" Number of lines to scroll.\n"
"\n"
-"Scroll upward if the argument is positive and downward if it is negative.");
+"Scroll upward if the argument is positive and downward if it is\n"
+"negative.");
#define _CURSES_WINDOW_SCROLL_METHODDEF \
{"scroll", (PyCFunction)_curses_window_scroll, METH_VARARGS, _curses_window_scroll__doc__},
@@ -1717,8 +1726,9 @@ PyDoc_STRVAR(_curses_window_touchline__doc__,
"touchline(start, count, [changed=True])\n"
"Pretend count lines have been changed, starting with line start.\n"
"\n"
-"If changed is supplied, it specifies whether the affected lines are marked\n"
-"as having been changed (changed=True) or unchanged (changed=False).");
+"If changed is supplied, it specifies whether the affected lines are\n"
+"marked as having been changed (changed=True) or unchanged\n"
+"(changed=False).");
#define _CURSES_WINDOW_TOUCHLINE_METHODDEF \
{"touchline", (PyCFunction)_curses_window_touchline, METH_VARARGS, _curses_window_touchline__doc__},
@@ -1912,11 +1922,12 @@ PyDoc_STRVAR(_curses_cbreak__doc__,
" flag\n"
" If false, the effect is the same as calling nocbreak().\n"
"\n"
-"In cbreak mode (sometimes called \"rare\" mode) normal tty line buffering is\n"
-"turned off and characters are available to be read one by one. However,\n"
-"unlike raw mode, special characters (interrupt, quit, suspend, and flow\n"
-"control) retain their effects on the tty driver and calling program.\n"
-"Calling first raw() then cbreak() leaves the terminal in cbreak mode.");
+"In cbreak mode (sometimes called \"rare\" mode) normal tty line buffering\n"
+"is turned off and characters are available to be read one by one.\n"
+"However, unlike raw mode, special characters (interrupt, quit, suspend,\n"
+"and flow control) retain their effects on the tty driver and calling\n"
+"program. Calling first raw() then cbreak() leaves the terminal in\n"
+"cbreak mode.");
#define _CURSES_CBREAK_METHODDEF \
{"cbreak", _PyCFunction_CAST(_curses_cbreak), METH_FASTCALL, _curses_cbreak__doc__},
@@ -1956,8 +1967,9 @@ PyDoc_STRVAR(_curses_color_content__doc__,
" color_number\n"
" The number of the color (0 - (COLORS-1)).\n"
"\n"
-"A 3-tuple is returned, containing the R, G, B values for the given color,\n"
-"which will be between 0 (no component) and 1000 (maximum amount of component).");
+"A 3-tuple is returned, containing the R, G, B values for the given\n"
+"color, which will be between 0 (no component) and 1000 (maximum amount\n"
+"of component).");
#define _CURSES_COLOR_CONTENT_METHODDEF \
{"color_content", (PyCFunction)_curses_color_content, METH_O, _curses_color_content__doc__},
@@ -1990,7 +2002,8 @@ PyDoc_STRVAR(_curses_color_pair__doc__,
" The number of the color pair.\n"
"\n"
"This attribute value can be combined with A_STANDOUT, A_REVERSE, and the\n"
-"other A_* attributes. pair_number() is the counterpart to this function.");
+"other A_* attributes. pair_number() is the counterpart to this\n"
+"function.");
#define _CURSES_COLOR_PAIR_METHODDEF \
{"color_pair", (PyCFunction)_curses_color_pair, METH_O, _curses_color_pair__doc__},
@@ -2024,9 +2037,9 @@ PyDoc_STRVAR(_curses_curs_set__doc__,
" 0 for invisible, 1 for normal visible, or 2 for very visible.\n"
"\n"
"If the terminal supports the visibility requested, the previous cursor\n"
-"state is returned; otherwise, an exception is raised. On many terminals,\n"
-"the \"visible\" mode is an underline cursor and the \"very visible\" mode is\n"
-"a block cursor.");
+"state is returned; otherwise, an exception is raised. On many\n"
+"terminals, the \"visible\" mode is an underline cursor and the \"very\n"
+"visible\" mode is a block cursor.");
#define _CURSES_CURS_SET_METHODDEF \
{"curs_set", (PyCFunction)_curses_curs_set, METH_O, _curses_curs_set__doc__},
@@ -2078,7 +2091,8 @@ PyDoc_STRVAR(_curses_def_shell_mode__doc__,
"\n"
"Save the current terminal mode as the \"shell\" mode.\n"
"\n"
-"The \"shell\" mode is the mode when the running program is not using curses.\n"
+"The \"shell\" mode is the mode when the running program is not using\n"
+"curses.\n"
"\n"
"Subsequent calls to reset_shell_mode() will restore this mode.");
@@ -2152,7 +2166,8 @@ PyDoc_STRVAR(_curses_echo__doc__,
" flag\n"
" If false, the effect is the same as calling noecho().\n"
"\n"
-"In echo mode, each character input is echoed to the screen as it is entered.");
+"In echo mode, each character input is echoed to the screen as it is\n"
+"entered.");
#define _CURSES_ECHO_METHODDEF \
{"echo", _PyCFunction_CAST(_curses_echo), METH_FASTCALL, _curses_echo__doc__},
@@ -2225,7 +2240,8 @@ PyDoc_STRVAR(_curses_flash__doc__,
"\n"
"Flash the screen.\n"
"\n"
-"That is, change it to reverse-video and then change it back in a short interval.");
+"That is, change it to reverse-video and then change it back in a short\n"
+"interval.");
#define _CURSES_FLASH_METHODDEF \
{"flash", (PyCFunction)_curses_flash, METH_NOARGS, _curses_flash__doc__},
@@ -2245,8 +2261,8 @@ PyDoc_STRVAR(_curses_flushinp__doc__,
"\n"
"Flush all input buffers.\n"
"\n"
-"This throws away any typeahead that has been typed by the user and has not\n"
-"yet been processed by the program.");
+"This throws away any typeahead that has been typed by the user and has\n"
+"not yet been processed by the program.");
#define _CURSES_FLUSHINP_METHODDEF \
{"flushinp", (PyCFunction)_curses_flushinp, METH_NOARGS, _curses_flushinp__doc__},
@@ -2601,8 +2617,9 @@ PyDoc_STRVAR(_curses_init_pair__doc__,
" bg\n"
" Background color number (-1 - (COLORS-1)).\n"
"\n"
-"If the color-pair was previously initialized, the screen is refreshed and\n"
-"all occurrences of that color-pair are changed to the new definition.");
+"If the color-pair was previously initialized, the screen is refreshed\n"
+"and all occurrences of that color-pair are changed to the new\n"
+"definition.");
#define _CURSES_INIT_PAIR_METHODDEF \
{"init_pair", _PyCFunction_CAST(_curses_init_pair), METH_FASTCALL, _curses_init_pair__doc__},
@@ -2758,9 +2775,9 @@ PyDoc_STRVAR(_curses_get_escdelay__doc__,
"\n"
"Gets the curses ESCDELAY setting.\n"
"\n"
-"Gets the number of milliseconds to wait after reading an escape character,\n"
-"to distinguish between an individual escape character entered on the\n"
-"keyboard from escape sequences sent by cursor and function keys.");
+"Gets the number of milliseconds to wait after reading an escape\n"
+"character, to distinguish between an individual escape character entered\n"
+"on the keyboard from escape sequences sent by cursor and function keys.");
#define _CURSES_GET_ESCDELAY_METHODDEF \
{"get_escdelay", (PyCFunction)_curses_get_escdelay, METH_NOARGS, _curses_get_escdelay__doc__},
@@ -2787,9 +2804,9 @@ PyDoc_STRVAR(_curses_set_escdelay__doc__,
" ms\n"
" length of the delay in milliseconds.\n"
"\n"
-"Sets the number of milliseconds to wait after reading an escape character,\n"
-"to distinguish between an individual escape character entered on the\n"
-"keyboard from escape sequences sent by cursor and function keys.");
+"Sets the number of milliseconds to wait after reading an escape\n"
+"character, to distinguish between an individual escape character entered\n"
+"on the keyboard from escape sequences sent by cursor and function keys.");
#define _CURSES_SET_ESCDELAY_METHODDEF \
{"set_escdelay", (PyCFunction)_curses_set_escdelay, METH_O, _curses_set_escdelay__doc__},
@@ -2823,8 +2840,8 @@ PyDoc_STRVAR(_curses_get_tabsize__doc__,
"\n"
"Gets the curses TABSIZE setting.\n"
"\n"
-"Gets the number of columns used by the curses library when converting a tab\n"
-"character to spaces as it adds the tab to a window.");
+"Gets the number of columns used by the curses library when converting\n"
+"a tab character to spaces as it adds the tab to a window.");
#define _CURSES_GET_TABSIZE_METHODDEF \
{"get_tabsize", (PyCFunction)_curses_get_tabsize, METH_NOARGS, _curses_get_tabsize__doc__},
@@ -2851,8 +2868,8 @@ PyDoc_STRVAR(_curses_set_tabsize__doc__,
" size\n"
" rendered cell width of a tab character.\n"
"\n"
-"Sets the number of columns used by the curses library when converting a tab\n"
-"character to spaces as it adds the tab to a window.");
+"Sets the number of columns used by the curses library when converting\n"
+"a tab character to spaces as it adds the tab to a window.");
#define _CURSES_SET_TABSIZE_METHODDEF \
{"set_tabsize", (PyCFunction)_curses_set_tabsize, METH_O, _curses_set_tabsize__doc__},
@@ -3023,8 +3040,8 @@ PyDoc_STRVAR(_curses_longname__doc__,
"\n"
"Return the terminfo long name field describing the current terminal.\n"
"\n"
-"The maximum length of a verbose description is 128 characters. It is defined\n"
-"only after the call to initscr().");
+"The maximum length of a verbose description is 128 characters. It is\n"
+"defined only after the call to initscr().");
#define _CURSES_LONGNAME_METHODDEF \
{"longname", (PyCFunction)_curses_longname, METH_NOARGS, _curses_longname__doc__},
@@ -3081,8 +3098,8 @@ PyDoc_STRVAR(_curses_mouseinterval__doc__,
" Time in milliseconds.\n"
"\n"
"Set the maximum time that can elapse between press and release events in\n"
-"order for them to be recognized as a click, and return the previous interval\n"
-"value.");
+"order for them to be recognized as a click, and return the previous\n"
+"interval value.");
#define _CURSES_MOUSEINTERVAL_METHODDEF \
{"mouseinterval", (PyCFunction)_curses_mouseinterval, METH_O, _curses_mouseinterval__doc__},
@@ -3117,9 +3134,10 @@ PyDoc_STRVAR(_curses_mousemask__doc__,
"Set the mouse events to be reported, and return a tuple (availmask, oldmask).\n"
"\n"
"Return a tuple (availmask, oldmask). availmask indicates which of the\n"
-"specified mouse events can be reported; on complete failure it returns 0.\n"
-"oldmask is the previous value of the given window\'s mouse event mask.\n"
-"If this function is never called, no mouse events are ever reported.");
+"specified mouse events can be reported; on complete failure it returns\n"
+"0. oldmask is the previous value of the given window\'s mouse event\n"
+"mask. If this function is never called, no mouse events are ever\n"
+"reported.");
#define _CURSES_MOUSEMASK_METHODDEF \
{"mousemask", (PyCFunction)_curses_mousemask, METH_O, _curses_mousemask__doc__},
@@ -3236,8 +3254,8 @@ PyDoc_STRVAR(_curses_newwin__doc__,
" begin_x\n"
" Left side x-coordinate.\n"
"\n"
-"By default, the window will extend from the specified position to the lower\n"
-"right corner of the screen.");
+"By default, the window will extend from the specified position to the\n"
+"lower right corner of the screen.");
#define _CURSES_NEWWIN_METHODDEF \
{"newwin", (PyCFunction)_curses_newwin, METH_VARARGS, _curses_newwin__doc__},
@@ -3287,8 +3305,9 @@ PyDoc_STRVAR(_curses_nl__doc__,
" flag\n"
" If false, the effect is the same as calling nonl().\n"
"\n"
-"This mode translates the return key into newline on input, and translates\n"
-"newline into return and line-feed on output. Newline mode is initially on.");
+"This mode translates the return key into newline on input, and\n"
+"translates newline into return and line-feed on output. Newline mode\n"
+"is initially on.");
#define _CURSES_NL_METHODDEF \
{"nl", _PyCFunction_CAST(_curses_nl), METH_FASTCALL, _curses_nl__doc__},
@@ -3365,8 +3384,8 @@ PyDoc_STRVAR(_curses_nonl__doc__,
"\n"
"Leave newline mode.\n"
"\n"
-"Disable translation of return into newline on input, and disable low-level\n"
-"translation of newline into newline/return on output.");
+"Disable translation of return into newline on input, and disable\n"
+"low-level translation of newline into newline/return on output.");
#define _CURSES_NONL_METHODDEF \
{"nonl", (PyCFunction)_curses_nonl, METH_NOARGS, _curses_nonl__doc__},
@@ -3582,8 +3601,8 @@ PyDoc_STRVAR(_curses_raw__doc__,
" If false, the effect is the same as calling noraw().\n"
"\n"
"In raw mode, normal line buffering and processing of interrupt, quit,\n"
-"suspend, and flow control keys are turned off; characters are presented to\n"
-"curses input functions one by one.");
+"suspend, and flow control keys are turned off; characters are presented\n"
+"to curses input functions one by one.");
#define _CURSES_RAW_METHODDEF \
{"raw", _PyCFunction_CAST(_curses_raw), METH_FASTCALL, _curses_raw__doc__},
@@ -3681,8 +3700,8 @@ PyDoc_STRVAR(_curses_resizeterm__doc__,
" ncols\n"
" Width.\n"
"\n"
-"Adjusts other bookkeeping data used by the curses library that record the\n"
-"window dimensions (in particular the SIGWINCH handler).");
+"Adjusts other bookkeeping data used by the curses library that record\n"
+"the window dimensions (in particular the SIGWINCH handler).");
#define _CURSES_RESIZETERM_METHODDEF \
{"resizeterm", _PyCFunction_CAST(_curses_resizeterm), METH_FASTCALL, _curses_resizeterm__doc__},
@@ -3760,10 +3779,11 @@ PyDoc_STRVAR(_curses_resize_term__doc__,
" Width.\n"
"\n"
"When resizing the windows, resize_term() blank-fills the areas that are\n"
-"extended. The calling application should fill in these areas with appropriate\n"
-"data. The resize_term() function attempts to resize all windows. However,\n"
-"due to the calling convention of pads, it is not possible to resize these\n"
-"without additional interaction with the application.");
+"extended. The calling application should fill in these areas with\n"
+"appropriate data. The resize_term() function attempts to resize all\n"
+"windows. However, due to the calling convention of pads, it is not\n"
+"possible to resize these without additional interaction with the\n"
+"application.");
#define _CURSES_RESIZE_TERM_METHODDEF \
{"resize_term", _PyCFunction_CAST(_curses_resize_term), METH_FASTCALL, _curses_resize_term__doc__},
@@ -3898,12 +3918,12 @@ PyDoc_STRVAR(_curses_start_color__doc__,
"\n"
"Initializes eight basic colors and global variables COLORS and COLOR_PAIRS.\n"
"\n"
-"Must be called if the programmer wants to use colors, and before any other\n"
-"color manipulation routine is called. It is good practice to call this\n"
-"routine right after initscr().\n"
+"Must be called if the programmer wants to use colors, and before any\n"
+"other color manipulation routine is called. It is good practice to call\n"
+"this routine right after initscr().\n"
"\n"
-"It also restores the colors on the terminal to the values they had when the\n"
-"terminal was just turned on.");
+"It also restores the colors on the terminal to the values they had when\n"
+"the terminal was just turned on.");
#define _CURSES_START_COLOR_METHODDEF \
{"start_color", (PyCFunction)_curses_start_color, METH_NOARGS, _curses_start_color__doc__},
@@ -4005,8 +4025,8 @@ PyDoc_STRVAR(_curses_tigetnum__doc__,
" capname\n"
" The terminfo capability name.\n"
"\n"
-"The value -2 is returned if capname is not a numeric capability, or -1 if\n"
-"it is canceled or absent from the terminal description.");
+"The value -2 is returned if capname is not a numeric capability, or -1\n"
+"if it is canceled or absent from the terminal description.");
#define _CURSES_TIGETNUM_METHODDEF \
{"tigetnum", (PyCFunction)_curses_tigetnum, METH_O, _curses_tigetnum__doc__},
@@ -4048,8 +4068,8 @@ PyDoc_STRVAR(_curses_tigetstr__doc__,
" capname\n"
" The terminfo capability name.\n"
"\n"
-"None is returned if capname is not a string capability, or is canceled or\n"
-"absent from the terminal description.");
+"None is returned if capname is not a string capability, or is canceled\n"
+"or absent from the terminal description.");
#define _CURSES_TIGETSTR_METHODDEF \
{"tigetstr", (PyCFunction)_curses_tigetstr, METH_O, _curses_tigetstr__doc__},
@@ -4203,14 +4223,14 @@ PyDoc_STRVAR(_curses_use_env__doc__,
"\n"
"Use environment variables LINES and COLUMNS.\n"
"\n"
-"If used, this function should be called before initscr() or newterm() are\n"
-"called.\n"
+"If used, this function should be called before initscr() or newterm()\n"
+"are called.\n"
"\n"
-"When flag is False, the values of lines and columns specified in the terminfo\n"
-"database will be used, even if environment variables LINES and COLUMNS (used\n"
-"by default) are set, or if curses is running in a window (in which case\n"
-"default behavior would be to use the window size if LINES and COLUMNS are\n"
-"not set).");
+"When flag is False, the values of lines and columns specified in the\n"
+"terminfo database will be used, even if environment variables LINES and\n"
+"COLUMNS (used by default) are set, or if curses is running in a window\n"
+"(in which case default behavior would be to use the window size if LINES\n"
+"and COLUMNS are not set).");
#define _CURSES_USE_ENV_METHODDEF \
{"use_env", (PyCFunction)_curses_use_env, METH_O, _curses_use_env__doc__},
@@ -4373,4 +4393,4 @@ _curses_has_extended_color_support(PyObject *module, PyObject *Py_UNUSED(ignored
#ifndef _CURSES_USE_DEFAULT_COLORS_METHODDEF
#define _CURSES_USE_DEFAULT_COLORS_METHODDEF
#endif /* !defined(_CURSES_USE_DEFAULT_COLORS_METHODDEF) */
-/*[clinic end generated code: output=265cd9f5affbad5e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=833ee704415ce160 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_datetimemodule.c.h b/contrib/tools/python3/Modules/clinic/_datetimemodule.c.h
index 48499e0aaf7..f8987d3eded 100644
--- a/contrib/tools/python3/Modules/clinic/_datetimemodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_datetimemodule.c.h
@@ -14,8 +14,8 @@ PyDoc_STRVAR(datetime_date_fromtimestamp__doc__,
"\n"
"Create a date from a POSIX timestamp.\n"
"\n"
-"The timestamp is a number, e.g. created via time.time(), that is interpreted\n"
-"as local time.");
+"The timestamp is a number, e.g. created via time.time(), that is\n"
+"interpreted as local time.");
#define DATETIME_DATE_FROMTIMESTAMP_METHODDEF \
{"fromtimestamp", (PyCFunction)datetime_date_fromtimestamp, METH_O|METH_CLASS, datetime_date_fromtimestamp__doc__},
@@ -496,4 +496,4 @@ skip_optional_kwonly:
exit:
return return_value;
}
-/*[clinic end generated code: output=c7a04b865b1e0890 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=1ba8c631dace0000 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_dbmmodule.c.h b/contrib/tools/python3/Modules/clinic/_dbmmodule.c.h
index 4379b433db3..cd0192a19d4 100644
--- a/contrib/tools/python3/Modules/clinic/_dbmmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_dbmmodule.c.h
@@ -97,7 +97,8 @@ PyDoc_STRVAR(_dbm_dbm_setdefault__doc__,
"\n"
"Return the value for key if present, otherwise default.\n"
"\n"
-"If key is not in the database, it is inserted with default as the value.");
+"If key is not in the database, it is inserted with default as the\n"
+"value.");
#define _DBM_DBM_SETDEFAULT_METHODDEF \
{"setdefault", _PyCFunction_CAST(_dbm_dbm_setdefault), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _dbm_dbm_setdefault__doc__},
@@ -221,4 +222,4 @@ skip_optional:
exit:
return return_value;
}
-/*[clinic end generated code: output=f7d9a87d80a64278 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=43f744d870dc6036 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_gdbmmodule.c.h b/contrib/tools/python3/Modules/clinic/_gdbmmodule.c.h
index bbf4365114c..b776b602cb3 100644
--- a/contrib/tools/python3/Modules/clinic/_gdbmmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_gdbmmodule.c.h
@@ -122,9 +122,9 @@ PyDoc_STRVAR(_gdbm_gdbm_firstkey__doc__,
"\n"
"Return the starting key for the traversal.\n"
"\n"
-"It\'s possible to loop over every key in the database using this method\n"
-"and the nextkey() method. The traversal is ordered by GDBM\'s internal\n"
-"hash values, and won\'t be sorted by the key values.");
+"It\'s possible to loop over every key in the database using this\n"
+"method and the nextkey() method. The traversal is ordered by GDBM\'s\n"
+"internal hash values, and won\'t be sorted by the key values.");
#define _GDBM_GDBM_FIRSTKEY_METHODDEF \
{"firstkey", _PyCFunction_CAST(_gdbm_gdbm_firstkey), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_firstkey__doc__},
@@ -148,8 +148,8 @@ PyDoc_STRVAR(_gdbm_gdbm_nextkey__doc__,
"\n"
"Returns the key that follows key in the traversal.\n"
"\n"
-"The following code prints every key in the database db, without having\n"
-"to create a list in memory that contains them all:\n"
+"The following code prints every key in the database db, without\n"
+"having to create a list in memory that contains them all:\n"
"\n"
" k = db.firstkey()\n"
" while k is not None:\n"
@@ -201,9 +201,9 @@ PyDoc_STRVAR(_gdbm_gdbm_reorganize__doc__,
"\n"
"If you have carried out a lot of deletions and would like to shrink\n"
"the space used by the GDBM file, this routine will reorganize the\n"
-"database. GDBM will not shorten the length of a database file except\n"
-"by using this reorganization; otherwise, deleted file space will be\n"
-"kept and reused as new (key,value) pairs are added.");
+"database. GDBM will not shorten the length of a database file\n"
+"except by using this reorganization; otherwise, deleted file space\n"
+"will be kept and reused as new (key,value) pairs are added.");
#define _GDBM_GDBM_REORGANIZE_METHODDEF \
{"reorganize", _PyCFunction_CAST(_gdbm_gdbm_reorganize), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _gdbm_gdbm_reorganize__doc__},
@@ -343,4 +343,4 @@ skip_optional:
exit:
return return_value;
}
-/*[clinic end generated code: output=07bdeb4a8ecb328e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=9c85138071dd473a input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_hashopenssl.c.h b/contrib/tools/python3/Modules/clinic/_hashopenssl.c.h
index 621093e7e76..e323708f559 100644
--- a/contrib/tools/python3/Modules/clinic/_hashopenssl.c.h
+++ b/contrib/tools/python3/Modules/clinic/_hashopenssl.c.h
@@ -1812,8 +1812,8 @@ PyDoc_STRVAR(_hashlib_HMAC_hexdigest__doc__,
"\n"
"Return hexadecimal digest of the bytes passed to the update() method so far.\n"
"\n"
-"This may be used to exchange the value safely in email or other non-binary\n"
-"environments.");
+"This may be used to exchange the value safely in email or other\n"
+"non-binary environments.");
#define _HASHLIB_HMAC_HEXDIGEST_METHODDEF \
{"hexdigest", (PyCFunction)_hashlib_HMAC_hexdigest, METH_NOARGS, _hashlib_HMAC_hexdigest__doc__},
@@ -1834,8 +1834,8 @@ PyDoc_STRVAR(_hashlib_get_fips_mode__doc__,
"Determine the OpenSSL FIPS mode of operation.\n"
"\n"
"For OpenSSL 3.0.0 and newer it returns the state of the default provider\n"
-"in the default OSSL context. It\'s not quite the same as FIPS_mode() but good\n"
-"enough for unittests.\n"
+"in the default OSSL context. It\'s not quite the same as FIPS_mode() but\n"
+"good enough for unittests.\n"
"\n"
"Effectively any non-zero return value indicates FIPS mode;\n"
"values other than 1 may have additional significance.");
@@ -1937,4 +1937,4 @@ exit:
#ifndef _HASHLIB_SCRYPT_METHODDEF
#define _HASHLIB_SCRYPT_METHODDEF
#endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */
-/*[clinic end generated code: output=4c9222b02b194662 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=b210ba56e3dfb58a input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_lzmamodule.c.h b/contrib/tools/python3/Modules/clinic/_lzmamodule.c.h
index 51fab5eab3f..233d41bbf4a 100644
--- a/contrib/tools/python3/Modules/clinic/_lzmamodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_lzmamodule.c.h
@@ -74,18 +74,19 @@ PyDoc_STRVAR(_lzma_LZMADecompressor_decompress__doc__,
"\n"
"Decompress *data*, returning uncompressed data as bytes.\n"
"\n"
-"If *max_length* is nonnegative, returns at most *max_length* bytes of\n"
-"decompressed data. If this limit is reached and further output can be\n"
-"produced, *self.needs_input* will be set to ``False``. In this case, the next\n"
-"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n"
+"If *max_length* is nonnegative, returns at most *max_length* bytes\n"
+"of decompressed data. If this limit is reached and further output\n"
+"can be produced, *self.needs_input* will be set to ``False``. In\n"
+"this case, the next call to *decompress()* may provide *data* as b\'\'\n"
+"to obtain more of the output.\n"
"\n"
-"If all of the input data was decompressed and returned (either because this\n"
-"was less than *max_length* bytes, or because *max_length* was negative),\n"
-"*self.needs_input* will be set to True.\n"
+"If all of the input data was decompressed and returned (either\n"
+"because this was less than *max_length* bytes, or because\n"
+"*max_length* was negative), *self.needs_input* will be set to True.\n"
"\n"
-"Attempting to decompress data after the end of stream is reached raises an\n"
-"EOFError. Any data found after the end of the stream is ignored and saved in\n"
-"the unused_data attribute.");
+"Attempting to decompress data after the end of stream is reached\n"
+"raises an EOFError. Any data found after the end of the stream is\n"
+"ignored and saved in the unused_data attribute.");
#define _LZMA_LZMADECOMPRESSOR_DECOMPRESS_METHODDEF \
{"decompress", _PyCFunction_CAST(_lzma_LZMADecompressor_decompress), METH_FASTCALL|METH_KEYWORDS, _lzma_LZMADecompressor_decompress__doc__},
@@ -327,4 +328,4 @@ exit:
return return_value;
}
-/*[clinic end generated code: output=5e79c05ace76dc96 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=0edad6505009133f input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_posixsubprocess.c.h b/contrib/tools/python3/Modules/clinic/_posixsubprocess.c.h
index dd7644de6b7..3a0a1f738aa 100644
--- a/contrib/tools/python3/Modules/clinic/_posixsubprocess.c.h
+++ b/contrib/tools/python3/Modules/clinic/_posixsubprocess.c.h
@@ -14,15 +14,15 @@ PyDoc_STRVAR(subprocess_fork_exec__doc__,
"\n"
"Spawn a fresh new child process.\n"
"\n"
-"Fork a child process, close parent file descriptors as appropriate in the\n"
-"child and duplicate the few that are needed before calling exec() in the\n"
-"child process.\n"
+"Fork a child process, close parent file descriptors as appropriate in\n"
+"the child and duplicate the few that are needed before calling exec() in\n"
+"the child process.\n"
"\n"
-"If close_fds is True, close file descriptors 3 and higher, except those listed\n"
-"in the sorted tuple pass_fds.\n"
+"If close_fds is True, close file descriptors 3 and higher, except those\n"
+"listed in the sorted tuple pass_fds.\n"
"\n"
-"The preexec_fn, if supplied, will be called immediately before closing file\n"
-"descriptors and exec.\n"
+"The preexec_fn, if supplied, will be called immediately before closing\n"
+"file descriptors and exec.\n"
"\n"
"WARNING: preexec_fn is NOT SAFE if your application uses threads.\n"
" It may trigger infrequent, difficult to debug deadlocks.\n"
@@ -155,4 +155,4 @@ subprocess_fork_exec(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=48555f5965a871be input=a9049054013a1b77]*/
+/*[clinic end generated code: output=47682cb62b0b08b2 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_queuemodule.c.h b/contrib/tools/python3/Modules/clinic/_queuemodule.c.h
index 6f4c715c722..3f19520352b 100644
--- a/contrib/tools/python3/Modules/clinic/_queuemodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/_queuemodule.c.h
@@ -44,8 +44,9 @@ PyDoc_STRVAR(_queue_SimpleQueue_put__doc__,
"\n"
"Put the item on the queue.\n"
"\n"
-"The optional \'block\' and \'timeout\' arguments are ignored, as this method\n"
-"never blocks. They are provided for compatibility with the Queue class.");
+"The optional \'block\' and \'timeout\' arguments are ignored, as this\n"
+"method never blocks. They are provided for compatibility with the\n"
+"Queue class.");
#define _QUEUE_SIMPLEQUEUE_PUT_METHODDEF \
{"put", _PyCFunction_CAST(_queue_SimpleQueue_put), METH_FASTCALL|METH_KEYWORDS, _queue_SimpleQueue_put__doc__},
@@ -182,10 +183,11 @@ PyDoc_STRVAR(_queue_SimpleQueue_get__doc__,
"\n"
"Remove and return an item from the queue.\n"
"\n"
-"If optional args \'block\' is true and \'timeout\' is None (the default),\n"
-"block if necessary until an item is available. If \'timeout\' is\n"
-"a non-negative number, it blocks at most \'timeout\' seconds and raises\n"
-"the Empty exception if no item was available within that time.\n"
+"If optional args \'block\' is true and \'timeout\' is None (the\n"
+"default), block if necessary until an item is available. If\n"
+"\'timeout\' is a non-negative number, it blocks at most \'timeout\'\n"
+"seconds and raises the Empty exception if no item was available\n"
+"within that time.\n"
"Otherwise (\'block\' is false), return an item if one is immediately\n"
"available, else raise the Empty exception (\'timeout\' is ignored\n"
"in that case).");
@@ -349,4 +351,4 @@ _queue_SimpleQueue_qsize(simplequeueobject *self, PyObject *Py_UNUSED(ignored))
exit:
return return_value;
}
-/*[clinic end generated code: output=44a718f40072018a input=a9049054013a1b77]*/
+/*[clinic end generated code: output=25c2af38811bc536 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_ssl.c.h b/contrib/tools/python3/Modules/clinic/_ssl.c.h
index 628bd877fe1..2cb60b7dca8 100644
--- a/contrib/tools/python3/Modules/clinic/_ssl.c.h
+++ b/contrib/tools/python3/Modules/clinic/_ssl.c.h
@@ -264,9 +264,10 @@ _ssl__SSLSocket_compression(PySSLSocket *self, PyObject *Py_UNUSED(ignored))
PyDoc_STRVAR(_ssl__SSLSocket_context__doc__,
"This changes the context associated with the SSLSocket.\n"
"\n"
-"This is typically used from within a callback function set by the sni_callback\n"
-"on the SSLContext to change the certificate information associated with the\n"
-"SSLSocket before the cryptographic exchange handshake messages.");
+"This is typically used from within a callback function set by the\n"
+"sni_callback on the SSLContext to change the certificate information\n"
+"associated with the SSLSocket before the cryptographic exchange\n"
+"handshake messages.");
#if defined(_ssl__SSLSocket_context_DOCSTR)
# undef _ssl__SSLSocket_context_DOCSTR
#endif
@@ -583,8 +584,9 @@ PyDoc_STRVAR(_ssl__SSLSocket_get_channel_binding__doc__,
"\n"
"Get channel binding data for current connection.\n"
"\n"
-"Raise ValueError if the requested `cb_type` is not supported. Return bytes\n"
-"of the data or None if the data is not available (e.g. before the handshake).\n"
+"Raise ValueError if the requested `cb_type` is not supported.\n"
+"Return bytes of the data or None if the data is not available (e.g.\n"
+"before the handshake).\n"
"Only \'tls-unique\' channel binding data from RFC 5929 is supported.");
#define _SSL__SSLSOCKET_GET_CHANNEL_BINDING_METHODDEF \
@@ -1796,8 +1798,9 @@ _ssl__SSLContext_set_ecdh_curve(PySSLContext *self, PyObject *name)
PyDoc_STRVAR(_ssl__SSLContext_sni_callback__doc__,
"Set a callback that will be called when a server name is provided by the SSL/TLS client in the SNI extension.\n"
"\n"
-"If the argument is None then the callback is disabled. The method is called\n"
-"with the SSLSocket, the server name as a string, and the SSLContext object.\n"
+"If the argument is None then the callback is disabled. The method\n"
+"is called with the SSLSocket, the server name as a string, and the\n"
+"SSLContext object.\n"
"\n"
"See RFC 6066 for details of the SNI extension.");
#if defined(_ssl__SSLContext_sni_callback_DOCSTR)
@@ -1861,11 +1864,11 @@ PyDoc_STRVAR(_ssl__SSLContext_cert_store_stats__doc__,
"\n"
"Returns quantities of loaded X.509 certificates.\n"
"\n"
-"X.509 certificates with a CA extension and certificate revocation lists\n"
-"inside the context\'s cert store.\n"
+"X.509 certificates with a CA extension and certificate revocation\n"
+"lists inside the context\'s cert store.\n"
"\n"
-"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n"
-"been used at least once.");
+"NOTE: Certificates in a capath directory aren\'t loaded unless they\n"
+"have been used at least once.");
#define _SSL__SSLCONTEXT_CERT_STORE_STATS_METHODDEF \
{"cert_store_stats", (PyCFunction)_ssl__SSLContext_cert_store_stats, METH_NOARGS, _ssl__SSLContext_cert_store_stats__doc__},
@@ -1891,11 +1894,11 @@ PyDoc_STRVAR(_ssl__SSLContext_get_ca_certs__doc__,
"\n"
"Returns a list of dicts with information of loaded CA certs.\n"
"\n"
-"If the optional argument is True, returns a DER-encoded copy of the CA\n"
-"certificate.\n"
+"If the optional argument is True, returns a DER-encoded copy of the\n"
+"CA certificate.\n"
"\n"
-"NOTE: Certificates in a capath directory aren\'t loaded unless they have\n"
-"been used at least once.");
+"NOTE: Certificates in a capath directory aren\'t loaded unless they\n"
+"have been used at least once.");
#define _SSL__SSLCONTEXT_GET_CA_CERTS_METHODDEF \
{"get_ca_certs", _PyCFunction_CAST(_ssl__SSLContext_get_ca_certs), METH_FASTCALL|METH_KEYWORDS, _ssl__SSLContext_get_ca_certs__doc__},
@@ -2547,8 +2550,8 @@ PyDoc_STRVAR(_ssl_RAND_status__doc__,
"\n"
"Returns True if the OpenSSL PRNG has been seeded with enough data and False if not.\n"
"\n"
-"It is necessary to seed the PRNG with RAND_add() on some platforms before\n"
-"using the ssl() function.");
+"It is necessary to seed the PRNG with RAND_add() on some platforms\n"
+"before using the ssl() function.");
#define _SSL_RAND_STATUS_METHODDEF \
{"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__},
@@ -2714,11 +2717,11 @@ PyDoc_STRVAR(_ssl_enum_certificates__doc__,
"\n"
"Retrieve certificates from Windows\' cert store.\n"
"\n"
-"store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may provide\n"
-"more cert storages, too. The function returns a list of (bytes,\n"
-"encoding_type, trust) tuples. The encoding_type flag can be interpreted\n"
-"with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The trust setting is either\n"
-"a set of OIDs or the boolean True.");
+"store_name may be one of \'CA\', \'ROOT\' or \'MY\'. The system may\n"
+"provide more cert storages, too. The function returns a list of\n"
+"(bytes, encoding_type, trust) tuples. The encoding_type flag can be\n"
+"interpreted with X509_ASN_ENCODING or PKCS_7_ASN_ENCODING. The\n"
+"trust setting is either a set of OIDs or the boolean True.");
#define _SSL_ENUM_CERTIFICATES_METHODDEF \
{"enum_certificates", _PyCFunction_CAST(_ssl_enum_certificates), METH_FASTCALL|METH_KEYWORDS, _ssl_enum_certificates__doc__},
@@ -2870,4 +2873,4 @@ exit:
#ifndef _SSL_ENUM_CRLS_METHODDEF
#define _SSL_ENUM_CRLS_METHODDEF
#endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */
-/*[clinic end generated code: output=6849453c6b91db74 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=d6407f7dbbc5d5b7 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_testmultiphase.c.h b/contrib/tools/python3/Modules/clinic/_testmultiphase.c.h
index 452897b3fae..67a60c07fef 100644
--- a/contrib/tools/python3/Modules/clinic/_testmultiphase.c.h
+++ b/contrib/tools/python3/Modules/clinic/_testmultiphase.c.h
@@ -14,8 +14,8 @@ PyDoc_STRVAR(_testmultiphase_StateAccessType_get_defining_module__doc__,
"\n"
"Return the module of the defining class.\n"
"\n"
-"Also tests that result of PyType_GetModuleByDef matches defining_class\'s\n"
-"module.");
+"Also tests that result of PyType_GetModuleByDef matches\n"
+"defining_class\'s module.");
#define _TESTMULTIPHASE_STATEACCESSTYPE_GET_DEFINING_MODULE_METHODDEF \
{"get_defining_module", _PyCFunction_CAST(_testmultiphase_StateAccessType_get_defining_module), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _testmultiphase_StateAccessType_get_defining_module__doc__},
@@ -162,4 +162,4 @@ _testmultiphase_StateAccessType_get_count(StateAccessTypeObject *self, PyTypeObj
}
return _testmultiphase_StateAccessType_get_count_impl(self, cls);
}
-/*[clinic end generated code: output=59cb50dae2d11dc1 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=fb8568dff1205ece input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/_tkinter.c.h b/contrib/tools/python3/Modules/clinic/_tkinter.c.h
index 2b1ac954b4d..6e2d8363506 100644
--- a/contrib/tools/python3/Modules/clinic/_tkinter.c.h
+++ b/contrib/tools/python3/Modules/clinic/_tkinter.c.h
@@ -829,7 +829,8 @@ PyDoc_STRVAR(_tkinter_setbusywaitinterval__doc__,
"\n"
"Set the busy-wait interval in milliseconds between successive calls to Tcl_DoOneEvent in a threaded Python interpreter.\n"
"\n"
-"It should be set to a divisor of the maximum time between frames in an animation.");
+"It should be set to a divisor of the maximum time between frames in\n"
+"an animation.");
#define _TKINTER_SETBUSYWAITINTERVAL_METHODDEF \
{"setbusywaitinterval", (PyCFunction)_tkinter_setbusywaitinterval, METH_O, _tkinter_setbusywaitinterval__doc__},
@@ -888,4 +889,4 @@ exit:
#ifndef _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF
#define _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF
#endif /* !defined(_TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF) */
-/*[clinic end generated code: output=d90c1a9850c63249 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=4eca4b2509971772 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/arraymodule.c.h b/contrib/tools/python3/Modules/clinic/arraymodule.c.h
index 1046355dc38..2494356aef7 100644
--- a/contrib/tools/python3/Modules/clinic/arraymodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/arraymodule.c.h
@@ -252,8 +252,8 @@ PyDoc_STRVAR(array_array_buffer_info__doc__,
"\n"
"Return a tuple (address, length) giving the current memory address and the length in items of the buffer used to hold array\'s contents.\n"
"\n"
-"The length should be multiplied by the itemsize attribute to calculate\n"
-"the buffer length in bytes.");
+"The length should be multiplied by the itemsize attribute to\n"
+"calculate the buffer length in bytes.");
#define ARRAY_ARRAY_BUFFER_INFO_METHODDEF \
{"buffer_info", (PyCFunction)array_array_buffer_info, METH_NOARGS, array_array_buffer_info__doc__},
@@ -282,8 +282,8 @@ PyDoc_STRVAR(array_array_byteswap__doc__,
"\n"
"Byteswap all items of the array.\n"
"\n"
-"If the items in the array are not 1, 2, 4, or 8 bytes in size, RuntimeError is\n"
-"raised.");
+"If the items in the array are not 1, 2, 4, or 8 bytes in size,\n"
+"RuntimeError is raised.");
#define ARRAY_ARRAY_BYTESWAP_METHODDEF \
{"byteswap", (PyCFunction)array_array_byteswap, METH_NOARGS, array_array_byteswap__doc__},
@@ -498,9 +498,9 @@ PyDoc_STRVAR(array_array_fromunicode__doc__,
"\n"
"Extends this array with data from the unicode string ustr.\n"
"\n"
-"The array must be a unicode type array; otherwise a ValueError is raised.\n"
-"Use array.frombytes(ustr.encode(...)) to append Unicode data to an array of\n"
-"some other type.");
+"The array must be a unicode type array; otherwise a ValueError is\n"
+"raised. Use array.frombytes(ustr.encode(...)) to append Unicode\n"
+"data to an array of some other type.");
#define ARRAY_ARRAY_FROMUNICODE_METHODDEF \
{"fromunicode", (PyCFunction)array_array_fromunicode, METH_O, array_array_fromunicode__doc__},
@@ -531,9 +531,10 @@ PyDoc_STRVAR(array_array_tounicode__doc__,
"\n"
"Extends this array with data from the unicode string ustr.\n"
"\n"
-"Convert the array to a unicode string. The array must be a unicode type array;\n"
-"otherwise a ValueError is raised. Use array.tobytes().decode() to obtain a\n"
-"unicode string from an array of some other type.");
+"Convert the array to a unicode string. The array must be a unicode\n"
+"type array; otherwise a ValueError is raised. Use\n"
+"array.tobytes().decode() to obtain a unicode string from an array of\n"
+"some other type.");
#define ARRAY_ARRAY_TOUNICODE_METHODDEF \
{"tounicode", (PyCFunction)array_array_tounicode, METH_NOARGS, array_array_tounicode__doc__},
@@ -688,4 +689,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__,
#define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \
{"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__},
-/*[clinic end generated code: output=f675e0d433ae34b6 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=fc424975be474308 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/cmathmodule.c.h b/contrib/tools/python3/Modules/clinic/cmathmodule.c.h
index 50745fd4f40..aa1ae087f16 100644
--- a/contrib/tools/python3/Modules/clinic/cmathmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/cmathmodule.c.h
@@ -644,7 +644,8 @@ PyDoc_STRVAR(cmath_log__doc__,
"\n"
"log(z[, base]) -> the logarithm of z to the given base.\n"
"\n"
-"If the base is not specified, returns the natural logarithm (base e) of z.");
+"If the base is not specified, returns the natural logarithm (base e)\n"
+"of z.");
#define CMATH_LOG_METHODDEF \
{"log", _PyCFunction_CAST(cmath_log), METH_FASTCALL, cmath_log__doc__},
@@ -882,11 +883,12 @@ PyDoc_STRVAR(cmath_isclose__doc__,
"\n"
"Return True if a is close in value to b, and False otherwise.\n"
"\n"
-"For the values to be considered close, the difference between them must be\n"
-"smaller than at least one of the tolerances.\n"
+"For the values to be considered close, the difference between them must\n"
+"be smaller than at least one of the tolerances.\n"
"\n"
-"-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is\n"
-"not close to anything, even itself. inf and -inf are only close to themselves.");
+"-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is,\n"
+"NaN is not close to anything, even itself. inf and -inf are only close\n"
+"to themselves.");
#define CMATH_ISCLOSE_METHODDEF \
{"isclose", _PyCFunction_CAST(cmath_isclose), METH_FASTCALL|METH_KEYWORDS, cmath_isclose__doc__},
@@ -982,4 +984,4 @@ skip_optional_kwonly:
exit:
return return_value;
}
-/*[clinic end generated code: output=454309b21cfa9bf6 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=2e01537e62454991 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/gcmodule.c.h b/contrib/tools/python3/Modules/clinic/gcmodule.c.h
index 9fff4da616b..416b1acb044 100644
--- a/contrib/tools/python3/Modules/clinic/gcmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/gcmodule.c.h
@@ -381,8 +381,8 @@ PyDoc_STRVAR(gc_get_objects__doc__,
" generation\n"
" Generation to extract the objects from.\n"
"\n"
-"If generation is not None, return only the objects tracked by the collector\n"
-"that are in that generation.");
+"If generation is not None, return only the objects tracked by the\n"
+"collector that are in that generation.");
#define GC_GET_OBJECTS_METHODDEF \
{"get_objects", _PyCFunction_CAST(gc_get_objects), METH_FASTCALL|METH_KEYWORDS, gc_get_objects__doc__},
@@ -522,9 +522,10 @@ PyDoc_STRVAR(gc_freeze__doc__,
"\n"
"Freeze all current tracked objects and ignore them for future collections.\n"
"\n"
-"This can be used before a POSIX fork() call to make the gc copy-on-write friendly.\n"
-"Note: collection before a POSIX fork() call may free pages for future allocation\n"
-"which can cause copy-on-write.");
+"This can be used before a POSIX fork() call to make the gc copy-on-write\n"
+"friendly.\n"
+"Note: collection before a POSIX fork() call may free pages for future\n"
+"allocation which can cause copy-on-write.");
#define GC_FREEZE_METHODDEF \
{"freeze", (PyCFunction)gc_freeze, METH_NOARGS, gc_freeze__doc__},
@@ -585,4 +586,4 @@ gc_get_freeze_count(PyObject *module, PyObject *Py_UNUSED(ignored))
exit:
return return_value;
}
-/*[clinic end generated code: output=0a7e91917adcb937 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=0041275fbac029b2 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h b/contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h
index 050c21460d7..234e56012b7 100644
--- a/contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h
@@ -768,8 +768,8 @@ PyDoc_STRVAR(itertools_compress__doc__,
"\n"
"Return data elements corresponding to true selector elements.\n"
"\n"
-"Forms a shorter iterator from selected data elements using the selectors to\n"
-"choose the data elements.");
+"Forms a shorter iterator from selected data elements using the selectors\n"
+"to choose the data elements.");
static PyObject *
itertools_compress_impl(PyTypeObject *type, PyObject *seq1, PyObject *seq2);
@@ -928,4 +928,4 @@ skip_optional_pos:
exit:
return return_value;
}
-/*[clinic end generated code: output=7b13be3075f2d6d3 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ed9db610dde299b5 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/mathmodule.c.h b/contrib/tools/python3/Modules/clinic/mathmodule.c.h
index 99534de0df6..473efd8ef05 100644
--- a/contrib/tools/python3/Modules/clinic/mathmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/mathmodule.c.h
@@ -76,8 +76,9 @@ PyDoc_STRVAR(math_frexp__doc__,
"\n"
"Return the mantissa and exponent of x, as pair (m, e).\n"
"\n"
-"m is a float and e is an int, such that x = m * 2.**e.\n"
-"If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0.");
+"If x is a finite nonzero number, then m is a float with\n"
+"0.5 <= abs(m) < 1.0 and an integer e is such that\n"
+"x == m * 2**e exactly. Else, return (x, 0).");
#define MATH_FREXP_METHODDEF \
{"frexp", (PyCFunction)math_frexp, METH_O, math_frexp__doc__},
@@ -892,8 +893,8 @@ PyDoc_STRVAR(math_nextafter__doc__,
"\n"
"If steps is not specified or is None, it defaults to 1.\n"
"\n"
-"Raises a TypeError, if x or y is not a double, or if steps is not an integer.\n"
-"Raises ValueError if steps is negative.");
+"Raises a TypeError, if x or y is not a double, or if steps is not\n"
+"an integer. Raises ValueError if steps is negative.");
#define MATH_NEXTAFTER_METHODDEF \
{"nextafter", _PyCFunction_CAST(math_nextafter), METH_FASTCALL|METH_KEYWORDS, math_nextafter__doc__},
@@ -1009,4 +1010,4 @@ math_ulp(PyObject *module, PyObject *arg)
exit:
return return_value;
}
-/*[clinic end generated code: output=9fe02dc4af07c1e0 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=9ed980dea18198be input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/overlapped.c.h b/contrib/tools/python3/Modules/clinic/overlapped.c.h
index 8b285e4a8f0..f884f03da66 100644
--- a/contrib/tools/python3/Modules/clinic/overlapped.c.h
+++ b/contrib/tools/python3/Modules/clinic/overlapped.c.h
@@ -526,8 +526,9 @@ PyDoc_STRVAR(_overlapped_Overlapped_getresult__doc__,
"\n"
"Retrieve result of operation.\n"
"\n"
-"If wait is true then it blocks until the operation is finished. If wait\n"
-"is false and the operation is still pending then an error is raised.");
+"If wait is true then it blocks until the operation is finished. If\n"
+"wait is false and the operation is still pending then an error is\n"
+"raised.");
#define _OVERLAPPED_OVERLAPPED_GETRESULT_METHODDEF \
{"getresult", _PyCFunction_CAST(_overlapped_Overlapped_getresult), METH_FASTCALL, _overlapped_Overlapped_getresult__doc__},
@@ -1239,4 +1240,4 @@ exit:
return return_value;
}
-/*[clinic end generated code: output=958cbddbcc355f47 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=17f830e42fc6123d input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/pyexpat.c.h b/contrib/tools/python3/Modules/clinic/pyexpat.c.h
index 9f318133d87..758ba9c3368 100644
--- a/contrib/tools/python3/Modules/clinic/pyexpat.c.h
+++ b/contrib/tools/python3/Modules/clinic/pyexpat.c.h
@@ -216,8 +216,9 @@ PyDoc_STRVAR(pyexpat_xmlparser_GetInputContext__doc__,
"\n"
"Return the untranslated text of the input that caused the current event.\n"
"\n"
-"If the event was generated by a large amount of text (such as a start tag\n"
-"for an element with many attributes), not all of the text may be available.");
+"If the event was generated by a large amount of text (such as\n"
+"a start tag for an element with many attributes), not all of the\n"
+"text may be available.");
#define PYEXPAT_XMLPARSER_GETINPUTCONTEXT_METHODDEF \
{"GetInputContext", (PyCFunction)pyexpat_xmlparser_GetInputContext, METH_NOARGS, pyexpat_xmlparser_GetInputContext__doc__},
@@ -354,9 +355,10 @@ PyDoc_STRVAR(pyexpat_xmlparser_UseForeignDTD__doc__,
"\n"
"Allows the application to provide an artificial external subset if one is not specified as part of the document instance.\n"
"\n"
-"This readily allows the use of a \'default\' document type controlled by the\n"
-"application, while still getting the advantage of providing document type\n"
-"information to the parser. \'flag\' defaults to True if not provided.");
+"This readily allows the use of a \'default\' document type controlled\n"
+"by the application, while still getting the advantage of providing\n"
+"document type information to the parser. \'flag\' defaults to True if\n"
+"not provided.");
#define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF \
{"UseForeignDTD", _PyCFunction_CAST(pyexpat_xmlparser_UseForeignDTD), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_UseForeignDTD__doc__},
@@ -405,6 +407,138 @@ exit:
#endif /* (XML_COMBINED_VERSION >= 19505) */
+#if (XML_COMBINED_VERSION >= 20400)
+
+PyDoc_STRVAR(pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold__doc__,
+"SetBillionLaughsAttackProtectionActivationThreshold($self, threshold, /)\n"
+"--\n"
+"\n"
+"Sets the number of output bytes needed to activate protection against billion laughs attacks.\n"
+"\n"
+"The number of output bytes includes amplification from entity expansion\n"
+"and reading DTD files.\n"
+"\n"
+"Parser objects usually have a protection activation threshold of 8 MiB,\n"
+"but the actual default value depends on the underlying Expat library.\n"
+"\n"
+"Activation thresholds below 4 MiB are known to break support for DITA 1.3\n"
+"payload and are hence not recommended.");
+
+#define PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONACTIVATIONTHRESHOLD_METHODDEF \
+ {"SetBillionLaughsAttackProtectionActivationThreshold", _PyCFunction_CAST(pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold__doc__},
+
+static PyObject *
+pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold_impl(xmlparseobject *self,
+ PyTypeObject *cls,
+ unsigned long long threshold);
+
+static PyObject *
+pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold(xmlparseobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+ PyObject *return_value = NULL;
+ #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
+ # define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
+ #else
+ # define KWTUPLE NULL
+ #endif
+
+ static const char * const _keywords[] = {"", NULL};
+ static _PyArg_Parser _parser = {
+ .keywords = _keywords,
+ .fname = "SetBillionLaughsAttackProtectionActivationThreshold",
+ .kwtuple = KWTUPLE,
+ };
+ #undef KWTUPLE
+ PyObject *argsbuf[1];
+ unsigned long long threshold;
+
+ args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
+ if (!args) {
+ goto exit;
+ }
+ if (!_PyLong_UnsignedLongLong_Converter(args[0], &threshold)) {
+ goto exit;
+ }
+ return_value = pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold_impl(self, cls, threshold);
+
+exit:
+ return return_value;
+}
+
+#endif /* (XML_COMBINED_VERSION >= 20400) */
+
+#if (XML_COMBINED_VERSION >= 20400)
+
+PyDoc_STRVAR(pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification__doc__,
+"SetBillionLaughsAttackProtectionMaximumAmplification($self, max_factor,\n"
+" /)\n"
+"--\n"
+"\n"
+"Sets the maximum tolerated amplification factor for protection against billion laughs attacks.\n"
+"\n"
+"The amplification factor is calculated as \"(direct + indirect) / direct\"\n"
+"while parsing, where \"direct\" is the number of bytes read from the primary\n"
+"document in parsing and \"indirect\" is the number of bytes added by expanding\n"
+"entities and reading external DTD files, combined.\n"
+"\n"
+"The \'max_factor\' value must be a non-NaN floating point value greater than\n"
+"or equal to 1.0. Amplification factors greater than 30,000 can be observed\n"
+"in the middle of parsing even with benign files in practice. In particular,\n"
+"the activation threshold should be carefully chosen to avoid false positives.\n"
+"\n"
+"Parser objects usually have a maximum amplification factor of 100,\n"
+"but the actual default value depends on the underlying Expat library.");
+
+#define PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONMAXIMUMAMPLIFICATION_METHODDEF \
+ {"SetBillionLaughsAttackProtectionMaximumAmplification", _PyCFunction_CAST(pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification__doc__},
+
+static PyObject *
+pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification_impl(xmlparseobject *self,
+ PyTypeObject *cls,
+ float max_factor);
+
+static PyObject *
+pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification(xmlparseobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
+{
+ PyObject *return_value = NULL;
+ #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
+ # define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
+ #else
+ # define KWTUPLE NULL
+ #endif
+
+ static const char * const _keywords[] = {"", NULL};
+ static _PyArg_Parser _parser = {
+ .keywords = _keywords,
+ .fname = "SetBillionLaughsAttackProtectionMaximumAmplification",
+ .kwtuple = KWTUPLE,
+ };
+ #undef KWTUPLE
+ PyObject *argsbuf[1];
+ float max_factor;
+
+ args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
+ if (!args) {
+ goto exit;
+ }
+ if (PyFloat_CheckExact(args[0])) {
+ max_factor = (float) (PyFloat_AS_DOUBLE(args[0]));
+ }
+ else
+ {
+ max_factor = (float) PyFloat_AsDouble(args[0]);
+ if (max_factor == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ return_value = pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification_impl(self, cls, max_factor);
+
+exit:
+ return return_value;
+}
+
+#endif /* (XML_COMBINED_VERSION >= 20400) */
+
#if (XML_COMBINED_VERSION >= 20702)
PyDoc_STRVAR(pyexpat_xmlparser_SetAllocTrackerActivationThreshold__doc__,
@@ -413,7 +547,8 @@ PyDoc_STRVAR(pyexpat_xmlparser_SetAllocTrackerActivationThreshold__doc__,
"\n"
"Sets the number of allocated bytes of dynamic memory needed to activate protection against disproportionate use of RAM.\n"
"\n"
-"By default, parser objects have an allocation activation threshold of 64 MiB.");
+"Parser objects usually have an allocation activation threshold of 64 MiB,\n"
+"but the actual default value depends on the underlying Expat library.");
#define PYEXPAT_XMLPARSER_SETALLOCTRACKERACTIVATIONTHRESHOLD_METHODDEF \
{"SetAllocTrackerActivationThreshold", _PyCFunction_CAST(pyexpat_xmlparser_SetAllocTrackerActivationThreshold), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_SetAllocTrackerActivationThreshold__doc__},
@@ -466,17 +601,19 @@ PyDoc_STRVAR(pyexpat_xmlparser_SetAllocTrackerMaximumAmplification__doc__,
"\n"
"Sets the maximum amplification factor between direct input and bytes of dynamic memory allocated.\n"
"\n"
-"The amplification factor is calculated as \"allocated / direct\" while parsing,\n"
-"where \"direct\" is the number of bytes read from the primary document in parsing\n"
-"and \"allocated\" is the number of bytes of dynamic memory allocated in the parser\n"
-"hierarchy.\n"
+"The amplification factor is calculated as \"allocated / direct\" while\n"
+"parsing, where \"direct\" is the number of bytes read from the primary\n"
+"document in parsing and \"allocated\" is the number of bytes of\n"
+"dynamic memory allocated in the parser hierarchy.\n"
"\n"
-"The \'max_factor\' value must be a non-NaN floating point value greater than\n"
-"or equal to 1.0. Amplification factors greater than 100.0 can be observed\n"
-"near the start of parsing even with benign files in practice. In particular,\n"
-"the activation threshold should be carefully chosen to avoid false positives.\n"
+"The \'max_factor\' value must be a non-NaN floating point value\n"
+"greater than or equal to 1.0. Amplification factors greater than\n"
+"100.0 can be observed near the start of parsing even with benign\n"
+"files in practice. In particular, the activation threshold should\n"
+"be carefully chosen to avoid false positives.\n"
"\n"
-"By default, parser objects have a maximum amplification factor of 100.0.");
+"Parser objects usually have a maximum amplification factor of 100,\n"
+"but the actual default value depends on the underlying Expat library.");
#define PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF \
{"SetAllocTrackerMaximumAmplification", _PyCFunction_CAST(pyexpat_xmlparser_SetAllocTrackerMaximumAmplification), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pyexpat_xmlparser_SetAllocTrackerMaximumAmplification__doc__},
@@ -670,6 +807,14 @@ exit:
#define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF
#endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */
+#ifndef PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONACTIVATIONTHRESHOLD_METHODDEF
+ #define PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONACTIVATIONTHRESHOLD_METHODDEF
+#endif /* !defined(PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONACTIVATIONTHRESHOLD_METHODDEF) */
+
+#ifndef PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONMAXIMUMAMPLIFICATION_METHODDEF
+ #define PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONMAXIMUMAMPLIFICATION_METHODDEF
+#endif /* !defined(PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONMAXIMUMAMPLIFICATION_METHODDEF) */
+
#ifndef PYEXPAT_XMLPARSER_SETALLOCTRACKERACTIVATIONTHRESHOLD_METHODDEF
#define PYEXPAT_XMLPARSER_SETALLOCTRACKERACTIVATIONTHRESHOLD_METHODDEF
#endif /* !defined(PYEXPAT_XMLPARSER_SETALLOCTRACKERACTIVATIONTHRESHOLD_METHODDEF) */
@@ -677,4 +822,4 @@ exit:
#ifndef PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF
#define PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF
#endif /* !defined(PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF) */
-/*[clinic end generated code: output=2e787fd99710eb5b input=a9049054013a1b77]*/
+/*[clinic end generated code: output=1994a20170f2325d input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/selectmodule.c.h b/contrib/tools/python3/Modules/clinic/selectmodule.c.h
index 49c0e48d2e0..2fea123785a 100644
--- a/contrib/tools/python3/Modules/clinic/selectmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/selectmodule.c.h
@@ -16,7 +16,8 @@ PyDoc_STRVAR(select_select__doc__,
"\n"
"Wait until one or more file descriptors are ready for some kind of I/O.\n"
"\n"
-"The first three arguments are iterables of file descriptors to be waited for:\n"
+"The first three arguments are iterables of file descriptors to be waited\n"
+"for:\n"
"rlist -- wait until ready for reading\n"
"wlist -- wait until ready for writing\n"
"xlist -- wait for an \"exceptional condition\"\n"
@@ -29,9 +30,9 @@ PyDoc_STRVAR(select_select__doc__,
"a floating-point number to specify fractions of seconds. If it is absent\n"
"or None, the call will never time out.\n"
"\n"
-"The return value is a tuple of three lists corresponding to the first three\n"
-"arguments; each contains the subset of the corresponding file descriptors\n"
-"that are ready.\n"
+"The return value is a tuple of three lists corresponding to the first\n"
+"three arguments; each contains the subset of the corresponding file\n"
+"descriptors that are ready.\n"
"\n"
"*** IMPORTANT NOTICE ***\n"
"On Windows, only sockets are supported; on Unix, all file\n"
@@ -214,8 +215,8 @@ PyDoc_STRVAR(select_poll_poll__doc__,
" The maximum time to wait in milliseconds, or else None (or a negative\n"
" value) to wait indefinitely.\n"
"\n"
-"Returns a list containing any descriptors that have events or errors to\n"
-"report, as a list of (fd, event) 2-tuples.");
+"Returns a list containing any descriptors that have events or errors\n"
+"to report, as a list of (fd, event) 2-tuples.");
#define SELECT_POLL_POLL_METHODDEF \
{"poll", _PyCFunction_CAST(select_poll_poll), METH_FASTCALL, select_poll_poll__doc__},
@@ -396,11 +397,11 @@ PyDoc_STRVAR(select_devpoll_poll__doc__,
"Polls the set of registered file descriptors.\n"
"\n"
" timeout\n"
-" The maximum time to wait in milliseconds, or else None (or a negative\n"
-" value) to wait indefinitely.\n"
+" The maximum time to wait in milliseconds, or else None (or\n"
+" a negative value) to wait indefinitely.\n"
"\n"
-"Returns a list containing any descriptors that have events or errors to\n"
-"report, as a list of (fd, event) 2-tuples.");
+"Returns a list containing any descriptors that have events or errors\n"
+"to report, as a list of (fd, event) 2-tuples.");
#define SELECT_DEVPOLL_POLL_METHODDEF \
{"poll", _PyCFunction_CAST(select_devpoll_poll), METH_FASTCALL, select_devpoll_poll__doc__},
@@ -498,8 +499,8 @@ PyDoc_STRVAR(select_poll__doc__,
"\n"
"Returns a polling object.\n"
"\n"
-"This object supports registering and unregistering file descriptors, and then\n"
-"polling them for I/O events.");
+"This object supports registering and unregistering file descriptors, and\n"
+"then polling them for I/O events.");
#define SELECT_POLL_METHODDEF \
{"poll", (PyCFunction)select_poll, METH_NOARGS, select_poll__doc__},
@@ -523,8 +524,8 @@ PyDoc_STRVAR(select_devpoll__doc__,
"\n"
"Returns a polling object.\n"
"\n"
-"This object supports registering and unregistering file descriptors, and then\n"
-"polling them for I/O events.");
+"This object supports registering and unregistering file descriptors, and\n"
+"then polling them for I/O events.");
#define SELECT_DEVPOLL_METHODDEF \
{"devpoll", (PyCFunction)select_devpoll, METH_NOARGS, select_devpoll__doc__},
@@ -942,8 +943,8 @@ PyDoc_STRVAR(select_epoll_poll__doc__,
" maxevents\n"
" the maximum number of events returned; -1 means no limit\n"
"\n"
-"Returns a list containing any descriptors that have events to report,\n"
-"as a list of (fd, events) 2-tuples.");
+"Returns a list containing any descriptors that have events to\n"
+"report, as a list of (fd, events) 2-tuples.");
#define SELECT_EPOLL_POLL_METHODDEF \
{"poll", _PyCFunction_CAST(select_epoll_poll), METH_FASTCALL|METH_KEYWORDS, select_epoll_poll__doc__},
@@ -1360,4 +1361,4 @@ exit:
#ifndef SELECT_KQUEUE_CONTROL_METHODDEF
#define SELECT_KQUEUE_CONTROL_METHODDEF
#endif /* !defined(SELECT_KQUEUE_CONTROL_METHODDEF) */
-/*[clinic end generated code: output=f99427b75cbe6d44 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=6293bc1883273f7c input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/signalmodule.c.h b/contrib/tools/python3/Modules/clinic/signalmodule.c.h
index 986c0289f2b..dbb8e26b5be 100644
--- a/contrib/tools/python3/Modules/clinic/signalmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/signalmodule.c.h
@@ -138,11 +138,12 @@ PyDoc_STRVAR(signal_signal__doc__,
"Set the action for the given signal.\n"
"\n"
"The action can be SIG_DFL, SIG_IGN, or a callable Python object.\n"
-"The previous action is returned. See getsignal() for possible return values.\n"
+"The previous action is returned. See getsignal() for possible return\n"
+"values.\n"
"\n"
"*** IMPORTANT NOTICE ***\n"
-"A signal handler function is called with two arguments:\n"
-"the first is the signal number, the second is the interrupted stack frame.");
+"A signal handler function is called with two arguments: the first is\n"
+"the signal number, the second is the interrupted stack frame.");
#define SIGNAL_SIGNAL_METHODDEF \
{"signal", _PyCFunction_CAST(signal_signal), METH_FASTCALL, signal_signal__doc__},
@@ -359,8 +360,8 @@ PyDoc_STRVAR(signal_setitimer__doc__,
"\n"
"Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF).\n"
"\n"
-"The timer will fire after value seconds and after that every interval seconds.\n"
-"The itimer can be cleared by setting seconds to zero.\n"
+"The timer will fire after value seconds and after that every interval\n"
+"seconds. The itimer can be cleared by setting seconds to zero.\n"
"\n"
"Returns old values as a tuple: (delay, interval).");
@@ -505,8 +506,8 @@ PyDoc_STRVAR(signal_sigwait__doc__,
"Wait for a signal.\n"
"\n"
"Suspend execution of the calling thread until the delivery of one of the\n"
-"signals specified in the signal set sigset. The function accepts the signal\n"
-"and returns the signal number.");
+"signals specified in the signal set sigset. The function accepts the\n"
+"signal and returns the signal number.");
#define SIGNAL_SIGWAIT_METHODDEF \
{"sigwait", (PyCFunction)signal_sigwait, METH_O, signal_sigwait__doc__},
@@ -776,4 +777,4 @@ exit:
#ifndef SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF
#define SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF
#endif /* !defined(SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF) */
-/*[clinic end generated code: output=c57b4b98fad6f4b8 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=496d4bc3e9ed4528 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/termios.c.h b/contrib/tools/python3/Modules/clinic/termios.c.h
index 83f5a4f6e9f..35522bef1dc 100644
--- a/contrib/tools/python3/Modules/clinic/termios.c.h
+++ b/contrib/tools/python3/Modules/clinic/termios.c.h
@@ -270,7 +270,8 @@ PyDoc_STRVAR(termios_tcsetwinsize__doc__,
"Set the tty winsize for file descriptor fd.\n"
"\n"
"The winsize to be set is taken from the winsize argument, which\n"
-"is a two-item tuple (ws_row, ws_col) like the one returned by tcgetwinsize().");
+"is a two-item tuple (ws_row, ws_col) like the one returned by\n"
+"tcgetwinsize().");
#define TERMIOS_TCSETWINSIZE_METHODDEF \
{"tcsetwinsize", (PyCFunction)(void(*)(void))termios_tcsetwinsize, METH_FASTCALL, termios_tcsetwinsize__doc__},
@@ -299,4 +300,4 @@ termios_tcsetwinsize(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=c6c6192583b0da36 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=d2176c4d9043d3cc input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/clinic/zlibmodule.c.h b/contrib/tools/python3/Modules/clinic/zlibmodule.c.h
index 7ff3edf5a55..0dd395fb4df 100644
--- a/contrib/tools/python3/Modules/clinic/zlibmodule.c.h
+++ b/contrib/tools/python3/Modules/clinic/zlibmodule.c.h
@@ -485,8 +485,8 @@ PyDoc_STRVAR(zlib_Decompress_decompress__doc__,
" Unconsumed input data will be stored in\n"
" the unconsumed_tail attribute.\n"
"\n"
-"After calling this function, some of the input data may still be stored in\n"
-"internal buffers for later processing.\n"
+"After calling this function, some of the input data may still be\n"
+"stored in internal buffers for later processing.\n"
"Call the flush() method to clear these buffers.");
#define ZLIB_DECOMPRESS_DECOMPRESS_METHODDEF \
@@ -884,18 +884,19 @@ PyDoc_STRVAR(zlib_ZlibDecompressor_decompress__doc__,
"\n"
"Decompress *data*, returning uncompressed data as bytes.\n"
"\n"
-"If *max_length* is nonnegative, returns at most *max_length* bytes of\n"
-"decompressed data. If this limit is reached and further output can be\n"
-"produced, *self.needs_input* will be set to ``False``. In this case, the next\n"
-"call to *decompress()* may provide *data* as b\'\' to obtain more of the output.\n"
+"If *max_length* is nonnegative, returns at most *max_length* bytes\n"
+"of decompressed data. If this limit is reached and further output\n"
+"can be produced, *self.needs_input* will be set to ``False``. In\n"
+"this case, the next call to *decompress()* may provide *data* as b\'\'\n"
+"to obtain more of the output.\n"
"\n"
-"If all of the input data was decompressed and returned (either because this\n"
-"was less than *max_length* bytes, or because *max_length* was negative),\n"
-"*self.needs_input* will be set to True.\n"
+"If all of the input data was decompressed and returned (either\n"
+"because this was less than *max_length* bytes, or because\n"
+"*max_length* was negative), *self.needs_input* will be set to True.\n"
"\n"
-"Attempting to decompress data after the end of stream is reached raises an\n"
-"EOFError. Any data found after the end of the stream is ignored and saved in\n"
-"the unused_data attribute.");
+"Attempting to decompress data after the end of stream is reached\n"
+"raises an EOFError. Any data found after the end of the stream is\n"
+"ignored and saved in the unused_data attribute.");
#define ZLIB_ZLIBDECOMPRESSOR_DECOMPRESS_METHODDEF \
{"decompress", _PyCFunction_CAST(zlib_ZlibDecompressor_decompress), METH_FASTCALL|METH_KEYWORDS, zlib_ZlibDecompressor_decompress__doc__},
@@ -1098,4 +1099,4 @@ exit:
#ifndef ZLIB_DECOMPRESS___DEEPCOPY___METHODDEF
#define ZLIB_DECOMPRESS___DEEPCOPY___METHODDEF
#endif /* !defined(ZLIB_DECOMPRESS___DEEPCOPY___METHODDEF) */
-/*[clinic end generated code: output=8bb840fb6af43dd4 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=208bbc4d3ea84ac5 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Modules/cmathmodule.c b/contrib/tools/python3/Modules/cmathmodule.c
index d901b350bc5..affb717f31b 100644
--- a/contrib/tools/python3/Modules/cmathmodule.c
+++ b/contrib/tools/python3/Modules/cmathmodule.c
@@ -910,12 +910,13 @@ cmath.log
log(z[, base]) -> the logarithm of z to the given base.
-If the base is not specified, returns the natural logarithm (base e) of z.
+If the base is not specified, returns the natural logarithm (base e)
+of z.
[clinic start generated code]*/
static PyObject *
cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj)
-/*[clinic end generated code: output=4effdb7d258e0d94 input=e1f81d4fcfd26497]*/
+/*[clinic end generated code: output=4effdb7d258e0d94 input=eb25de0757baf4a0]*/
{
Py_complex y;
@@ -1132,17 +1133,18 @@ Determine whether two complex numbers are close in value.
Return True if a is close in value to b, and False otherwise.
-For the values to be considered close, the difference between them must be
-smaller than at least one of the tolerances.
+For the values to be considered close, the difference between them must
+be smaller than at least one of the tolerances.
--inf, inf and NaN behave similarly to the IEEE 754 Standard. That is, NaN is
-not close to anything, even itself. inf and -inf are only close to themselves.
+-inf, inf and NaN behave similarly to the IEEE 754 Standard. That is,
+NaN is not close to anything, even itself. inf and -inf are only close
+to themselves.
[clinic start generated code]*/
static int
cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b,
double rel_tol, double abs_tol)
-/*[clinic end generated code: output=8a2486cc6e0014d1 input=df9636d7de1d4ac3]*/
+/*[clinic end generated code: output=8a2486cc6e0014d1 input=301b56c90d9a79de]*/
{
double diff;
diff --git a/contrib/tools/python3/Modules/faulthandler.c b/contrib/tools/python3/Modules/faulthandler.c
index 5a4efed9946..42521e40ba7 100644
--- a/contrib/tools/python3/Modules/faulthandler.c
+++ b/contrib/tools/python3/Modules/faulthandler.c
@@ -1180,20 +1180,6 @@ faulthandler_stack_overflow(PyObject *self, PyObject *Py_UNUSED(ignored))
#endif /* defined(FAULTHANDLER_USE_ALT_STACK) && defined(HAVE_SIGACTION) */
-static int
-faulthandler_traverse(PyObject *module, visitproc visit, void *arg)
-{
- Py_VISIT(thread.file);
-#ifdef FAULTHANDLER_USER
- if (user_signals != NULL) {
- for (size_t signum=0; signum < Py_NSIG; signum++)
- Py_VISIT(user_signals[signum].file);
- }
-#endif
- Py_VISIT(fatal_error.file);
- return 0;
-}
-
#ifdef MS_WINDOWS
static PyObject *
faulthandler_raise_exception(PyObject *self, PyObject *args)
@@ -1322,7 +1308,6 @@ static struct PyModuleDef module_def = {
.m_name = "faulthandler",
.m_doc = module_doc,
.m_methods = module_methods,
- .m_traverse = faulthandler_traverse,
.m_slots = faulthandler_slots
};
diff --git a/contrib/tools/python3/Modules/gcmodule.c b/contrib/tools/python3/Modules/gcmodule.c
index ee24900ae88..f9a27d4b43e 100644
--- a/contrib/tools/python3/Modules/gcmodule.c
+++ b/contrib/tools/python3/Modules/gcmodule.c
@@ -305,13 +305,13 @@ gc.get_objects
Return a list of objects tracked by the collector (excluding the list returned).
-If generation is not None, return only the objects tracked by the collector
-that are in that generation.
+If generation is not None, return only the objects tracked by the
+collector that are in that generation.
[clinic start generated code]*/
static PyObject *
gc_get_objects_impl(PyObject *module, Py_ssize_t generation)
-/*[clinic end generated code: output=48b35fea4ba6cb0e input=ef7da9df9806754c]*/
+/*[clinic end generated code: output=48b35fea4ba6cb0e input=3a819826fbde5eef]*/
{
if (PySys_Audit("gc.get_objects", "n", generation) < 0) {
return NULL;
@@ -421,14 +421,15 @@ gc.freeze
Freeze all current tracked objects and ignore them for future collections.
-This can be used before a POSIX fork() call to make the gc copy-on-write friendly.
-Note: collection before a POSIX fork() call may free pages for future allocation
-which can cause copy-on-write.
+This can be used before a POSIX fork() call to make the gc copy-on-write
+friendly.
+Note: collection before a POSIX fork() call may free pages for future
+allocation which can cause copy-on-write.
[clinic start generated code]*/
static PyObject *
gc_freeze_impl(PyObject *module)
-/*[clinic end generated code: output=502159d9cdc4c139 input=b602b16ac5febbe5]*/
+/*[clinic end generated code: output=502159d9cdc4c139 input=989012d0ba5a066f]*/
{
PyInterpreterState *interp = _PyInterpreterState_GET();
_PyGC_Freeze(interp);
diff --git a/contrib/tools/python3/Modules/itertoolsmodule.c b/contrib/tools/python3/Modules/itertoolsmodule.c
index 5add3c216b3..96e8542def5 100644
--- a/contrib/tools/python3/Modules/itertoolsmodule.c
+++ b/contrib/tools/python3/Modules/itertoolsmodule.c
@@ -2229,6 +2229,10 @@ Return a chain object whose .__next__() method returns elements from the\n\
first iterable until it is exhausted, then elements from the next\n\
iterable, until all of the iterables are exhausted.");
+PyDoc_STRVAR(chain_class_getitem_doc,
+"chain is generic over the type of its contents.\n\
+This is the union of the types of the input iterable contents.");
+
static PyMethodDef chain_methods[] = {
ITERTOOLS_CHAIN_FROM_ITERABLE_METHODDEF
{"__reduce__", (PyCFunction)chain_reduce, METH_NOARGS,
@@ -2236,7 +2240,7 @@ static PyMethodDef chain_methods[] = {
{"__setstate__", (PyCFunction)chain_setstate, METH_O,
setstate_doc},
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS, chain_class_getitem_doc},
{NULL, NULL} /* sentinel */
};
@@ -3769,13 +3773,13 @@ itertools.compress.__new__
selectors as seq2: object
Return data elements corresponding to true selector elements.
-Forms a shorter iterator from selected data elements using the selectors to
-choose the data elements.
+Forms a shorter iterator from selected data elements using the selectors
+to choose the data elements.
[clinic start generated code]*/
static PyObject *
itertools_compress_impl(PyTypeObject *type, PyObject *seq1, PyObject *seq2)
-/*[clinic end generated code: output=7e67157212ed09e0 input=79596d7cd20c77e5]*/
+/*[clinic end generated code: output=7e67157212ed09e0 input=32ca4347dbc46749]*/
{
PyObject *data=NULL, *selectors=NULL;
compressobject *lz;
diff --git a/contrib/tools/python3/Modules/main.c b/contrib/tools/python3/Modules/main.c
index 1f9796b356c..eaf8c471b78 100644
--- a/contrib/tools/python3/Modules/main.c
+++ b/contrib/tools/python3/Modules/main.c
@@ -512,6 +512,7 @@ pymain_run_interactive_hook(int *exitcode)
}
if (PySys_Audit("cpython.run_interactivehook", "O", hook) < 0) {
+ Py_DECREF(hook);
goto error;
}
diff --git a/contrib/tools/python3/Modules/mathmodule.c b/contrib/tools/python3/Modules/mathmodule.c
index aee1b17be9c..e0a1db0fea8 100644
--- a/contrib/tools/python3/Modules/mathmodule.c
+++ b/contrib/tools/python3/Modules/mathmodule.c
@@ -2095,13 +2095,14 @@ math.frexp
Return the mantissa and exponent of x, as pair (m, e).
-m is a float and e is an int, such that x = m * 2.**e.
-If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0.
+If x is a finite nonzero number, then m is a float with
+0.5 <= abs(m) < 1.0 and an integer e is such that
+x == m * 2**e exactly. Else, return (x, 0).
[clinic start generated code]*/
static PyObject *
math_frexp_impl(PyObject *module, double x)
-/*[clinic end generated code: output=03e30d252a15ad4a input=96251c9e208bc6e9]*/
+/*[clinic end generated code: output=03e30d252a15ad4a input=215cf8ea28a0959b]*/
{
int i;
/* deal with special cases directly, to sidestep platform
@@ -3940,13 +3941,13 @@ Return the floating-point value the given number of steps after x towards y.
If steps is not specified or is None, it defaults to 1.
-Raises a TypeError, if x or y is not a double, or if steps is not an integer.
-Raises ValueError if steps is negative.
+Raises a TypeError, if x or y is not a double, or if steps is not
+an integer. Raises ValueError if steps is negative.
[clinic start generated code]*/
static PyObject *
math_nextafter_impl(PyObject *module, double x, double y, PyObject *steps)
-/*[clinic end generated code: output=cc6511f02afc099e input=7f2a5842112af2b4]*/
+/*[clinic end generated code: output=cc6511f02afc099e input=89764144d1a33160]*/
{
#if defined(_AIX)
if (x == y) {
diff --git a/contrib/tools/python3/Modules/overlapped.c b/contrib/tools/python3/Modules/overlapped.c
index 567593e05c4..fdf43d615d1 100644
--- a/contrib/tools/python3/Modules/overlapped.c
+++ b/contrib/tools/python3/Modules/overlapped.c
@@ -875,13 +875,14 @@ _overlapped.Overlapped.getresult
Retrieve result of operation.
-If wait is true then it blocks until the operation is finished. If wait
-is false and the operation is still pending then an error is raised.
+If wait is true then it blocks until the operation is finished. If
+wait is false and the operation is still pending then an error is
+raised.
[clinic start generated code]*/
static PyObject *
_overlapped_Overlapped_getresult_impl(OverlappedObject *self, BOOL wait)
-/*[clinic end generated code: output=8c9bd04d08994f6c input=aa5b03e9897ca074]*/
+/*[clinic end generated code: output=8c9bd04d08994f6c input=852fbd817cbd2b3d]*/
{
DWORD transferred = 0;
BOOL ret;
@@ -1909,6 +1910,11 @@ _overlapped_Overlapped_WSARecvFromInto_impl(OverlappedObject *self,
}
#endif
+ if (bufobj->len < (Py_ssize_t)size) {
+ PyErr_SetString(PyExc_ValueError, "nbytes is greater than the length of the buffer");
+ return NULL;
+ }
+
wsabuf.buf = bufobj->buf;
wsabuf.len = size;
diff --git a/contrib/tools/python3/Modules/posixmodule.c b/contrib/tools/python3/Modules/posixmodule.c
index 66bd5bf1efb..58f21d35224 100644
--- a/contrib/tools/python3/Modules/posixmodule.c
+++ b/contrib/tools/python3/Modules/posixmodule.c
@@ -15893,7 +15893,7 @@ static PyMethodDef DirEntry_methods[] = {
OS_DIRENTRY_INODE_METHODDEF
OS_DIRENTRY___FSPATH___METHODDEF
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS, PyDoc_STR("DirEntry is generic over the type of the path (str or bytes)")},
{NULL}
};
diff --git a/contrib/tools/python3/Modules/pyexpat.c b/contrib/tools/python3/Modules/pyexpat.c
index 65802fca221..915d01e8bd0 100644
--- a/contrib/tools/python3/Modules/pyexpat.c
+++ b/contrib/tools/python3/Modules/pyexpat.c
@@ -994,13 +994,14 @@ pyexpat.xmlparser.GetInputContext
Return the untranslated text of the input that caused the current event.
-If the event was generated by a large amount of text (such as a start tag
-for an element with many attributes), not all of the text may be available.
+If the event was generated by a large amount of text (such as
+a start tag for an element with many attributes), not all of the
+text may be available.
[clinic start generated code]*/
static PyObject *
pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self)
-/*[clinic end generated code: output=a88026d683fc22cc input=034df8712db68379]*/
+/*[clinic end generated code: output=a88026d683fc22cc input=3ff7cb00783c8f98]*/
{
if (self->in_callback) {
int offset, size;
@@ -1133,15 +1134,16 @@ pyexpat.xmlparser.UseForeignDTD
Allows the application to provide an artificial external subset if one is not specified as part of the document instance.
-This readily allows the use of a 'default' document type controlled by the
-application, while still getting the advantage of providing document type
-information to the parser. 'flag' defaults to True if not provided.
+This readily allows the use of a 'default' document type controlled
+by the application, while still getting the advantage of providing
+document type information to the parser. 'flag' defaults to True if
+not provided.
[clinic start generated code]*/
static PyObject *
pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, PyTypeObject *cls,
int flag)
-/*[clinic end generated code: output=d7d98252bd25a20f input=23440ecb0573fb29]*/
+/*[clinic end generated code: output=d7d98252bd25a20f input=0387bce44fd53d99]*/
{
pyexpat_state *state = PyType_GetModuleState(cls);
enum XML_Error rc;
@@ -1154,7 +1156,7 @@ pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, PyTypeObject *cls,
}
#endif
-#if XML_COMBINED_VERSION >= 20702
+#if XML_COMBINED_VERSION >= 20400
static PyObject *
set_activation_threshold(xmlparseobject *self,
PyTypeObject *cls,
@@ -1198,6 +1200,76 @@ set_maximum_amplification(xmlparseobject *self,
}
#endif
+#if XML_COMBINED_VERSION >= 20400
+/*[clinic input]
+pyexpat.xmlparser.SetBillionLaughsAttackProtectionActivationThreshold
+
+ cls: defining_class
+ threshold: unsigned_long_long
+ /
+
+Sets the number of output bytes needed to activate protection against billion laughs attacks.
+
+The number of output bytes includes amplification from entity expansion
+and reading DTD files.
+
+Parser objects usually have a protection activation threshold of 8 MiB,
+but the actual default value depends on the underlying Expat library.
+
+Activation thresholds below 4 MiB are known to break support for DITA 1.3
+payload and are hence not recommended.
+[clinic start generated code]*/
+
+static PyObject *
+pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold_impl(xmlparseobject *self,
+ PyTypeObject *cls,
+ unsigned long long threshold)
+/*[clinic end generated code: output=0c082342f1c78114 input=5a51695a481def92]*/
+{
+ return set_activation_threshold(
+ self, cls, threshold,
+ XML_SetBillionLaughsAttackProtectionActivationThreshold
+ );
+}
+#endif
+
+#if XML_COMBINED_VERSION >= 20400
+/*[clinic input]
+pyexpat.xmlparser.SetBillionLaughsAttackProtectionMaximumAmplification
+
+ cls: defining_class
+ max_factor: float
+ /
+
+Sets the maximum tolerated amplification factor for protection against billion laughs attacks.
+
+The amplification factor is calculated as "(direct + indirect) / direct"
+while parsing, where "direct" is the number of bytes read from the primary
+document in parsing and "indirect" is the number of bytes added by expanding
+entities and reading external DTD files, combined.
+
+The 'max_factor' value must be a non-NaN floating point value greater than
+or equal to 1.0. Amplification factors greater than 30,000 can be observed
+in the middle of parsing even with benign files in practice. In particular,
+the activation threshold should be carefully chosen to avoid false positives.
+
+Parser objects usually have a maximum amplification factor of 100,
+but the actual default value depends on the underlying Expat library.
+[clinic start generated code]*/
+
+static PyObject *
+pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification_impl(xmlparseobject *self,
+ PyTypeObject *cls,
+ float max_factor)
+/*[clinic end generated code: output=c590439eadf463fa input=5de7c6dd7169b3b0]*/
+{
+ return set_maximum_amplification(
+ self, cls, max_factor,
+ XML_SetBillionLaughsAttackProtectionMaximumAmplification
+ );
+}
+#endif
+
#if XML_COMBINED_VERSION >= 20702
/*[clinic input]
pyexpat.xmlparser.SetAllocTrackerActivationThreshold
@@ -1208,14 +1280,15 @@ pyexpat.xmlparser.SetAllocTrackerActivationThreshold
Sets the number of allocated bytes of dynamic memory needed to activate protection against disproportionate use of RAM.
-By default, parser objects have an allocation activation threshold of 64 MiB.
+Parser objects usually have an allocation activation threshold of 64 MiB,
+but the actual default value depends on the underlying Expat library.
[clinic start generated code]*/
static PyObject *
pyexpat_xmlparser_SetAllocTrackerActivationThreshold_impl(xmlparseobject *self,
PyTypeObject *cls,
unsigned long long threshold)
-/*[clinic end generated code: output=bed7e93207ba08c5 input=9c706b75c18e4ea1]*/
+/*[clinic end generated code: output=bed7e93207ba08c5 input=b74171709a77f2d9]*/
{
return set_activation_threshold(
self, cls, threshold,
@@ -1234,24 +1307,26 @@ pyexpat.xmlparser.SetAllocTrackerMaximumAmplification
Sets the maximum amplification factor between direct input and bytes of dynamic memory allocated.
-The amplification factor is calculated as "allocated / direct" while parsing,
-where "direct" is the number of bytes read from the primary document in parsing
-and "allocated" is the number of bytes of dynamic memory allocated in the parser
-hierarchy.
+The amplification factor is calculated as "allocated / direct" while
+parsing, where "direct" is the number of bytes read from the primary
+document in parsing and "allocated" is the number of bytes of
+dynamic memory allocated in the parser hierarchy.
-The 'max_factor' value must be a non-NaN floating point value greater than
-or equal to 1.0. Amplification factors greater than 100.0 can be observed
-near the start of parsing even with benign files in practice. In particular,
-the activation threshold should be carefully chosen to avoid false positives.
+The 'max_factor' value must be a non-NaN floating point value
+greater than or equal to 1.0. Amplification factors greater than
+100.0 can be observed near the start of parsing even with benign
+files in practice. In particular, the activation threshold should
+be carefully chosen to avoid false positives.
-By default, parser objects have a maximum amplification factor of 100.0.
+Parser objects usually have a maximum amplification factor of 100,
+but the actual default value depends on the underlying Expat library.
[clinic start generated code]*/
static PyObject *
pyexpat_xmlparser_SetAllocTrackerMaximumAmplification_impl(xmlparseobject *self,
PyTypeObject *cls,
float max_factor)
-/*[clinic end generated code: output=6e44bd48c9b112a0 input=918b9266b490a722]*/
+/*[clinic end generated code: output=6e44bd48c9b112a0 input=db40271991462073]*/
{
return set_maximum_amplification(
self, cls, max_factor,
@@ -1269,6 +1344,8 @@ static struct PyMethodDef xmlparse_methods[] = {
PYEXPAT_XMLPARSER_EXTERNALENTITYPARSERCREATE_METHODDEF
PYEXPAT_XMLPARSER_SETPARAMENTITYPARSING_METHODDEF
PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF
+ PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONACTIVATIONTHRESHOLD_METHODDEF
+ PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONMAXIMUMAMPLIFICATION_METHODDEF
PYEXPAT_XMLPARSER_SETALLOCTRACKERACTIVATIONTHRESHOLD_METHODDEF
PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF
PYEXPAT_XMLPARSER_SETREPARSEDEFERRALENABLED_METHODDEF
@@ -1384,7 +1461,10 @@ newxmlparseobject(pyexpat_state *state, const char *encoding,
Py_DECREF(self);
return NULL;
}
-#if XML_COMBINED_VERSION >= 20100
+#if XML_COMBINED_VERSION >= 20800
+ /* This feature was added upstream in libexpat 2.8.0. */
+ XML_SetHashSalt16Bytes(self->itself, _Py_HashSecret.expat.hashsalt16);
+#elif XML_COMBINED_VERSION >= 20100
/* This feature was added upstream in libexpat 2.1.0. */
XML_SetHashSalt(self->itself,
(unsigned long)_Py_HashSecret.expat.hashsalt);
@@ -2246,6 +2326,11 @@ pyexpat_exec(PyObject *mod)
#else
capi->SetHashSalt = NULL;
#endif
+#if XML_COMBINED_VERSION >= 20800
+ capi->SetHashSalt16Bytes = XML_SetHashSalt16Bytes;
+#else
+ capi->SetHashSalt16Bytes = NULL;
+#endif
#if XML_COMBINED_VERSION >= 20600
capi->SetReparseDeferralEnabled = XML_SetReparseDeferralEnabled;
#else
@@ -2258,6 +2343,13 @@ pyexpat_exec(PyObject *mod)
capi->SetAllocTrackerActivationThreshold = NULL;
capi->SetAllocTrackerMaximumAmplification = NULL;
#endif
+#if XML_COMBINED_VERSION >= 20400
+ capi->SetBillionLaughsAttackProtectionActivationThreshold = XML_SetBillionLaughsAttackProtectionActivationThreshold;
+ capi->SetBillionLaughsAttackProtectionMaximumAmplification = XML_SetBillionLaughsAttackProtectionMaximumAmplification;
+#else
+ capi->SetBillionLaughsAttackProtectionActivationThreshold = NULL;
+ capi->SetBillionLaughsAttackProtectionMaximumAmplification = NULL;
+#endif
/* export using capsule */
PyObject *capi_object = PyCapsule_New(capi, PyExpat_CAPSULE_NAME,
diff --git a/contrib/tools/python3/Modules/selectmodule.c b/contrib/tools/python3/Modules/selectmodule.c
index 5bd9b7732a4..f69df694d44 100644
--- a/contrib/tools/python3/Modules/selectmodule.c
+++ b/contrib/tools/python3/Modules/selectmodule.c
@@ -252,7 +252,8 @@ select.select
Wait until one or more file descriptors are ready for some kind of I/O.
-The first three arguments are iterables of file descriptors to be waited for:
+The first three arguments are iterables of file descriptors to be waited
+for:
rlist -- wait until ready for reading
wlist -- wait until ready for writing
xlist -- wait for an "exceptional condition"
@@ -265,9 +266,9 @@ The optional 4th argument specifies a timeout in seconds; it may be
a floating-point number to specify fractions of seconds. If it is absent
or None, the call will never time out.
-The return value is a tuple of three lists corresponding to the first three
-arguments; each contains the subset of the corresponding file descriptors
-that are ready.
+The return value is a tuple of three lists corresponding to the first
+three arguments; each contains the subset of the corresponding file
+descriptors that are ready.
*** IMPORTANT NOTICE ***
On Windows, only sockets are supported; on Unix, all file
@@ -277,7 +278,7 @@ descriptors can be used.
static PyObject *
select_select_impl(PyObject *module, PyObject *rlist, PyObject *wlist,
PyObject *xlist, PyObject *timeout_obj)
-/*[clinic end generated code: output=2b3cfa824f7ae4cf input=1199d5e101abca4a]*/
+/*[clinic end generated code: output=2b3cfa824f7ae4cf input=34a2c2075ca9830e]*/
{
#ifdef SELECT_USES_HEAP
pylist *rfd2obj, *wfd2obj, *efd2obj;
@@ -612,13 +613,13 @@ select.poll.poll
Polls the set of registered file descriptors.
-Returns a list containing any descriptors that have events or errors to
-report, as a list of (fd, event) 2-tuples.
+Returns a list containing any descriptors that have events or errors
+to report, as a list of (fd, event) 2-tuples.
[clinic start generated code]*/
static PyObject *
select_poll_poll_impl(pollObject *self, PyObject *timeout_obj)
-/*[clinic end generated code: output=876e837d193ed7e4 input=54310631457efdec]*/
+/*[clinic end generated code: output=876e837d193ed7e4 input=e0a9c0aa283de8c8]*/
{
PyObject *result_list = NULL;
int poll_result, i, j;
@@ -936,19 +937,19 @@ select_devpoll_unregister_impl(devpollObject *self, int fd)
@critical_section
select.devpoll.poll
timeout as timeout_obj: object = None
- The maximum time to wait in milliseconds, or else None (or a negative
- value) to wait indefinitely.
+ The maximum time to wait in milliseconds, or else None (or
+ a negative value) to wait indefinitely.
/
Polls the set of registered file descriptors.
-Returns a list containing any descriptors that have events or errors to
-report, as a list of (fd, event) 2-tuples.
+Returns a list containing any descriptors that have events or errors
+to report, as a list of (fd, event) 2-tuples.
[clinic start generated code]*/
static PyObject *
select_devpoll_poll_impl(devpollObject *self, PyObject *timeout_obj)
-/*[clinic end generated code: output=2654e5457cca0b3c input=fe7a3f6dcbc118c5]*/
+/*[clinic end generated code: output=2654e5457cca0b3c input=9e1672658d728539]*/
{
struct dvpoll dvp;
PyObject *result_list = NULL;
@@ -1196,13 +1197,13 @@ select.poll
Returns a polling object.
-This object supports registering and unregistering file descriptors, and then
-polling them for I/O events.
+This object supports registering and unregistering file descriptors, and
+then polling them for I/O events.
[clinic start generated code]*/
static PyObject *
select_poll_impl(PyObject *module)
-/*[clinic end generated code: output=16a665a4e1d228c5 input=3f877909d5696bbf]*/
+/*[clinic end generated code: output=16a665a4e1d228c5 input=0aefd4527e99e0aa]*/
{
return (PyObject *)newPollObject(module);
}
@@ -1214,13 +1215,13 @@ select.devpoll
Returns a polling object.
-This object supports registering and unregistering file descriptors, and then
-polling them for I/O events.
+This object supports registering and unregistering file descriptors, and
+then polling them for I/O events.
[clinic start generated code]*/
static PyObject *
select_devpoll_impl(PyObject *module)
-/*[clinic end generated code: output=ea9213cc87fd9581 input=53a1af94564f00a3]*/
+/*[clinic end generated code: output=ea9213cc87fd9581 input=4c2ac27d10248526]*/
{
return (PyObject *)newDevPollObject(module);
}
@@ -1558,14 +1559,14 @@ select.epoll.poll
Wait for events on the epoll file descriptor.
-Returns a list containing any descriptors that have events to report,
-as a list of (fd, events) 2-tuples.
+Returns a list containing any descriptors that have events to
+report, as a list of (fd, events) 2-tuples.
[clinic start generated code]*/
static PyObject *
select_epoll_poll_impl(pyEpoll_Object *self, PyObject *timeout_obj,
int maxevents)
-/*[clinic end generated code: output=e02d121a20246c6c input=33d34a5ea430fd5b]*/
+/*[clinic end generated code: output=e02d121a20246c6c input=5a49d65788c70c7a]*/
{
int nfds, i;
PyObject *elist = NULL, *etuple = NULL;
diff --git a/contrib/tools/python3/Modules/signalmodule.c b/contrib/tools/python3/Modules/signalmodule.c
index 6f53dcda824..ed811b4ecdc 100644
--- a/contrib/tools/python3/Modules/signalmodule.c
+++ b/contrib/tools/python3/Modules/signalmodule.c
@@ -467,16 +467,17 @@ signal.signal
Set the action for the given signal.
The action can be SIG_DFL, SIG_IGN, or a callable Python object.
-The previous action is returned. See getsignal() for possible return values.
+The previous action is returned. See getsignal() for possible return
+values.
*** IMPORTANT NOTICE ***
-A signal handler function is called with two arguments:
-the first is the signal number, the second is the interrupted stack frame.
+A signal handler function is called with two arguments: the first is
+the signal number, the second is the interrupted stack frame.
[clinic start generated code]*/
static PyObject *
signal_signal_impl(PyObject *module, int signalnum, PyObject *handler)
-/*[clinic end generated code: output=b44cfda43780f3a1 input=deee84af5fa0432c]*/
+/*[clinic end generated code: output=b44cfda43780f3a1 input=99ce4035ec56ffc1]*/
{
_signal_module_state *modstate = get_signal_state(module);
PyObject *old_handler;
@@ -854,8 +855,8 @@ signal.setitimer
Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF).
-The timer will fire after value seconds and after that every interval seconds.
-The itimer can be cleared by setting seconds to zero.
+The timer will fire after value seconds and after that every interval
+seconds. The itimer can be cleared by setting seconds to zero.
Returns old values as a tuple: (delay, interval).
[clinic start generated code]*/
@@ -863,7 +864,7 @@ Returns old values as a tuple: (delay, interval).
static PyObject *
signal_setitimer_impl(PyObject *module, int which, PyObject *seconds,
PyObject *interval)
-/*[clinic end generated code: output=65f9dcbddc35527b input=de43daf194e6f66f]*/
+/*[clinic end generated code: output=65f9dcbddc35527b input=bd9f0d2ed8614193]*/
{
_signal_module_state *modstate = get_signal_state(module);
@@ -1024,13 +1025,13 @@ signal.sigwait
Wait for a signal.
Suspend execution of the calling thread until the delivery of one of the
-signals specified in the signal set sigset. The function accepts the signal
-and returns the signal number.
+signals specified in the signal set sigset. The function accepts the
+signal and returns the signal number.
[clinic start generated code]*/
static PyObject *
signal_sigwait_impl(PyObject *module, sigset_t sigset)
-/*[clinic end generated code: output=f43770699d682f96 input=a6fbd47b1086d119]*/
+/*[clinic end generated code: output=f43770699d682f96 input=91773742dd416a3e]*/
{
int err, signum;
diff --git a/contrib/tools/python3/Modules/socketmodule.c b/contrib/tools/python3/Modules/socketmodule.c
index becdf9af718..9cdf207e7a3 100644
--- a/contrib/tools/python3/Modules/socketmodule.c
+++ b/contrib/tools/python3/Modules/socketmodule.c
@@ -8939,6 +8939,9 @@ socket_exec(PyObject *m)
/* Initialize gethostbyname lock */
#if defined(USE_GETHOSTBYNAME_LOCK)
netdb_lock = PyThread_allocate_lock();
+ if (netdb_lock == NULL) {
+ goto error;
+ }
#endif
#ifdef MS_WINDOWS
diff --git a/contrib/tools/python3/Modules/termios.c b/contrib/tools/python3/Modules/termios.c
index f2c5a4bafa7..03c8e0889da 100644
--- a/contrib/tools/python3/Modules/termios.c
+++ b/contrib/tools/python3/Modules/termios.c
@@ -483,12 +483,13 @@ termios.tcsetwinsize
Set the tty winsize for file descriptor fd.
The winsize to be set is taken from the winsize argument, which
-is a two-item tuple (ws_row, ws_col) like the one returned by tcgetwinsize().
+is a two-item tuple (ws_row, ws_col) like the one returned by
+tcgetwinsize().
[clinic start generated code]*/
static PyObject *
termios_tcsetwinsize_impl(PyObject *module, int fd, PyObject *winsz)
-/*[clinic end generated code: output=2ac3c9bb6eda83e1 input=4a06424465b24aee]*/
+/*[clinic end generated code: output=2ac3c9bb6eda83e1 input=efc9beb16d06382a]*/
{
if (!PySequence_Check(winsz) || PySequence_Size(winsz) != 2) {
PyErr_SetString(PyExc_TypeError,
diff --git a/contrib/tools/python3/Modules/unicodedata.c b/contrib/tools/python3/Modules/unicodedata.c
index 2d317bd6f71..6b191c1ec62 100644
--- a/contrib/tools/python3/Modules/unicodedata.c
+++ b/contrib/tools/python3/Modules/unicodedata.c
@@ -508,19 +508,80 @@ get_decomp_record(PyObject *self, Py_UCS4 code,
(*index)++;
}
+/* Small combining runs are usually cheaper with insertion sort. */
+#define CANONICAL_ORDERING_COUNTING_SORT_THRESHOLD 20
+
+static void
+canonical_ordering_sort_insertion(int kind, void *data,
+ Py_ssize_t start, Py_ssize_t end)
+{
+ for (Py_ssize_t i = start + 1; i < end; i++) {
+ Py_UCS4 code = PyUnicode_READ(kind, data, i);
+ unsigned char combining = _getrecord_ex(code)->combining;
+ Py_ssize_t j = i;
+
+ while (j > start) {
+ Py_UCS4 previous = PyUnicode_READ(kind, data, j - 1);
+ if (_getrecord_ex(previous)->combining <= combining) {
+ break;
+ }
+ PyUnicode_WRITE(kind, data, j, previous);
+ j--;
+ }
+ if (j != i) {
+ PyUnicode_WRITE(kind, data, j, code);
+ }
+ }
+}
+
+static void
+canonical_ordering_sort_counting(int kind, void *data,
+ Py_ssize_t start, Py_ssize_t end,
+ Py_UCS4 *sortbuf)
+{
+ Py_ssize_t counts[256] = {0};
+ Py_ssize_t run_length = end - start;
+ Py_ssize_t total = 0;
+
+ for (Py_ssize_t i = start; i < end; i++) {
+ Py_UCS4 code = PyUnicode_READ(kind, data, i);
+ unsigned char combining = _getrecord_ex(code)->combining;
+ counts[combining]++;
+ }
+
+ for (size_t i = 0; i < Py_ARRAY_LENGTH(counts); i++) {
+ Py_ssize_t count = counts[i];
+ counts[i] = total;
+ total += count;
+ }
+
+ /* Reuse counts[] as the next output slot for each CCC. */
+ for (Py_ssize_t i = start; i < end; i++) {
+ Py_UCS4 code = PyUnicode_READ(kind, data, i);
+ unsigned char combining = _getrecord_ex(code)->combining;
+ sortbuf[counts[combining]++] = code;
+ }
+ for (Py_ssize_t i = 0; i < run_length; i++) {
+ PyUnicode_WRITE(kind, data, start + i, sortbuf[i]);
+ }
+}
+
static PyObject*
nfd_nfkd(PyObject *self, PyObject *input, int k)
{
PyObject *result;
Py_UCS4 *output;
Py_ssize_t i, o, osize;
- int kind;
- const void *data;
+ int input_kind, result_kind;
+ const void *input_data;
+ void *result_data;
/* Longest decomposition in Unicode 3.2: U+FDFA */
Py_UCS4 stack[20];
Py_ssize_t space, isize;
int index, prefix, count, stackptr;
unsigned char prev, cur;
+ Py_UCS4 *sortbuf = NULL;
+ Py_ssize_t sortbuflen = 0;
stackptr = 0;
isize = PyUnicode_GET_LENGTH(input);
@@ -540,11 +601,11 @@ nfd_nfkd(PyObject *self, PyObject *input, int k)
return NULL;
}
i = o = 0;
- kind = PyUnicode_KIND(input);
- data = PyUnicode_DATA(input);
+ input_kind = PyUnicode_KIND(input);
+ input_data = PyUnicode_DATA(input);
while (i < isize) {
- stack[stackptr++] = PyUnicode_READ(kind, data, i++);
+ stack[stackptr++] = PyUnicode_READ(input_kind, input_data, i++);
while(stackptr) {
Py_UCS4 code = stack[--stackptr];
/* Hangul Decomposition adds three characters in
@@ -611,35 +672,66 @@ nfd_nfkd(PyObject *self, PyObject *input, int k)
PyMem_Free(output);
if (!result)
return NULL;
+
/* result is guaranteed to be ready, as it is compact. */
- kind = PyUnicode_KIND(result);
- data = PyUnicode_DATA(result);
+ result_kind = PyUnicode_KIND(result);
+ result_data = PyUnicode_DATA(result);
- /* Sort canonically. */
+ /* Sort each consecutive combining-character run canonically. */
i = 0;
- prev = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining;
- for (i++; i < PyUnicode_GET_LENGTH(result); i++) {
- cur = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining;
- if (prev == 0 || cur == 0 || prev <= cur) {
- prev = cur;
+ while (i < o) {
+ Py_ssize_t run_length, run_start;
+ int needs_sort = 0;
+
+ Py_UCS4 ch = PyUnicode_READ(result_kind, result_data, i);
+ prev = _getrecord_ex(ch)->combining;
+ if (prev == 0) {
+ i++;
continue;
}
- /* Non-canonical order. Need to switch *i with previous. */
- o = i - 1;
- while (1) {
- Py_UCS4 tmp = PyUnicode_READ(kind, data, o+1);
- PyUnicode_WRITE(kind, data, o+1,
- PyUnicode_READ(kind, data, o));
- PyUnicode_WRITE(kind, data, o, tmp);
- o--;
- if (o < 0)
- break;
- prev = _getrecord_ex(PyUnicode_READ(kind, data, o))->combining;
- if (prev == 0 || prev <= cur)
+
+ run_start = i++;
+ while (i < o) {
+ Py_UCS4 ch = PyUnicode_READ(result_kind, result_data, i);
+ cur = _getrecord_ex(ch)->combining;
+ if (cur == 0) {
break;
+ }
+ if (prev > cur) {
+ needs_sort = 1;
+ }
+ prev = cur;
+ i++;
+ }
+ if (!needs_sort) {
+ continue;
+ }
+
+ run_length = i - run_start;
+ if (run_length < CANONICAL_ORDERING_COUNTING_SORT_THRESHOLD) {
+ canonical_ordering_sort_insertion(result_kind, result_data,
+ run_start, i);
+ continue;
+ }
+
+ if (run_length > sortbuflen) {
+ Py_UCS4 *new_sortbuf = PyMem_Resize(sortbuf,
+ Py_UCS4,
+ run_length);
+ if (new_sortbuf == NULL) {
+ PyErr_NoMemory();
+ PyMem_Free(sortbuf);
+ Py_DECREF(result);
+ return NULL;
+ }
+ sortbuf = new_sortbuf;
+ sortbuflen = run_length;
}
- prev = _getrecord_ex(PyUnicode_READ(kind, data, i))->combining;
+
+ canonical_ordering_sort_counting(result_kind, result_data,
+ run_start, i, sortbuf);
}
+ PyMem_Free(sortbuf);
return result;
}
@@ -1501,32 +1593,17 @@ capi_getcode(const char* name, int namelen, Py_UCS4* code,
return _check_alias_and_seq(code, with_named_seq);
}
-static void
-unicodedata_destroy_capi(PyObject *capsule)
-{
- void *capi = PyCapsule_GetPointer(capsule, PyUnicodeData_CAPSULE_NAME);
- PyMem_Free(capi);
-}
-
static PyObject *
unicodedata_create_capi(void)
{
- _PyUnicode_Name_CAPI *capi = PyMem_Malloc(sizeof(_PyUnicode_Name_CAPI));
- if (capi == NULL) {
- PyErr_NoMemory();
- return NULL;
- }
- capi->getname = capi_getucname;
- capi->getcode = capi_getcode;
-
- PyObject *capsule = PyCapsule_New(capi,
- PyUnicodeData_CAPSULE_NAME,
- unicodedata_destroy_capi);
- if (capsule == NULL) {
- PyMem_Free(capi);
- }
- return capsule;
-};
+ // Statically allocated so that any cached pointers stay valid after unicodedata
+ // is removed from sys.modules and the capsule is gc'd (gh-149449).
+ static _PyUnicode_Name_CAPI capi = {
+ .getname = capi_getucname,
+ .getcode = capi_getcode,
+ };
+ return PyCapsule_New(&capi, PyUnicodeData_CAPSULE_NAME, NULL);
+}
/* -------------------------------------------------------------------- */
diff --git a/contrib/tools/python3/Modules/zlibmodule.c b/contrib/tools/python3/Modules/zlibmodule.c
index f59f9a76abd..820bace9420 100644
--- a/contrib/tools/python3/Modules/zlibmodule.c
+++ b/contrib/tools/python3/Modules/zlibmodule.c
@@ -875,15 +875,15 @@ zlib.Decompress.decompress
Return a bytes object containing the decompressed version of the data.
-After calling this function, some of the input data may still be stored in
-internal buffers for later processing.
+After calling this function, some of the input data may still be
+stored in internal buffers for later processing.
Call the flush() method to clear these buffers.
[clinic start generated code]*/
static PyObject *
zlib_Decompress_decompress_impl(compobject *self, PyTypeObject *cls,
Py_buffer *data, Py_ssize_t max_length)
-/*[clinic end generated code: output=b024a93c2c922d57 input=bfb37b3864cfb606]*/
+/*[clinic end generated code: output=b024a93c2c922d57 input=b8c9e2d124fe4720]*/
{
int err = Z_OK;
Py_ssize_t ibuflen;
@@ -1675,6 +1675,7 @@ decompress(ZlibDecompressor *self, uint8_t *data,
return result;
error:
+ self->zst.next_in = NULL;
Py_XDECREF(result);
return NULL;
}
@@ -1687,24 +1688,25 @@ zlib.ZlibDecompressor.decompress
Decompress *data*, returning uncompressed data as bytes.
-If *max_length* is nonnegative, returns at most *max_length* bytes of
-decompressed data. If this limit is reached and further output can be
-produced, *self.needs_input* will be set to ``False``. In this case, the next
-call to *decompress()* may provide *data* as b'' to obtain more of the output.
+If *max_length* is nonnegative, returns at most *max_length* bytes
+of decompressed data. If this limit is reached and further output
+can be produced, *self.needs_input* will be set to ``False``. In
+this case, the next call to *decompress()* may provide *data* as b''
+to obtain more of the output.
-If all of the input data was decompressed and returned (either because this
-was less than *max_length* bytes, or because *max_length* was negative),
-*self.needs_input* will be set to True.
+If all of the input data was decompressed and returned (either
+because this was less than *max_length* bytes, or because
+*max_length* was negative), *self.needs_input* will be set to True.
-Attempting to decompress data after the end of stream is reached raises an
-EOFError. Any data found after the end of the stream is ignored and saved in
-the unused_data attribute.
+Attempting to decompress data after the end of stream is reached
+raises an EOFError. Any data found after the end of the stream is
+ignored and saved in the unused_data attribute.
[clinic start generated code]*/
static PyObject *
zlib_ZlibDecompressor_decompress_impl(ZlibDecompressor *self,
Py_buffer *data, Py_ssize_t max_length)
-/*[clinic end generated code: output=990d32787b775f85 input=0b29d99715250b96]*/
+/*[clinic end generated code: output=990d32787b775f85 input=6fb56d60b48cd843]*/
{
PyObject *result = NULL;
diff --git a/contrib/tools/python3/Objects/bytearrayobject.c b/contrib/tools/python3/Objects/bytearrayobject.c
index feea0aef276..449010713db 100644
--- a/contrib/tools/python3/Objects/bytearrayobject.c
+++ b/contrib/tools/python3/Objects/bytearrayobject.c
@@ -1395,14 +1395,15 @@ bytearray.translate
Return a copy with each character mapped by the given translation table.
-All characters occurring in the optional argument delete are removed.
-The remaining characters are mapped through the given translation table.
+All characters occurring in the optional argument delete are
+removed. The remaining characters are mapped through the given
+translation table.
[clinic start generated code]*/
static PyObject *
bytearray_translate_impl(PyByteArrayObject *self, PyObject *table,
PyObject *deletechars)
-/*[clinic end generated code: output=b6a8f01c2a74e446 input=cfff956d4d127a9b]*/
+/*[clinic end generated code: output=b6a8f01c2a74e446 input=50a30905c8c8835c]*/
{
char *input, *output;
const char *table_chars;
@@ -1500,15 +1501,15 @@ bytearray.maketrans
Return a translation table usable for the bytes or bytearray translate method.
-The returned table will be one where each byte in frm is mapped to the byte at
-the same position in to.
+The returned table will be one where each byte in frm is mapped to
+the byte at the same position in to.
The bytes objects frm and to must be of the same length.
[clinic start generated code]*/
static PyObject *
bytearray_maketrans_impl(Py_buffer *frm, Py_buffer *to)
-/*[clinic end generated code: output=1df267d99f56b15e input=b10de38c85950a63]*/
+/*[clinic end generated code: output=1df267d99f56b15e input=b1e7b0acbbaeb48a]*/
{
return _Py_bytes_maketrans(frm, to);
}
@@ -1545,8 +1546,8 @@ bytearray.split
sep: object = None
The delimiter according which to split the bytearray.
- None (the default value) means split on ASCII whitespace characters
- (space, tab, return, newline, formfeed, vertical tab).
+ None (the default value) means split on ASCII whitespace
+ characters (space, tab, return, newline, formfeed, vertical tab).
maxsplit: Py_ssize_t = -1
Maximum number of splits to do.
-1 (the default value) means no limit.
@@ -1557,7 +1558,7 @@ Return a list of the sections in the bytearray, using sep as the delimiter.
static PyObject *
bytearray_split_impl(PyByteArrayObject *self, PyObject *sep,
Py_ssize_t maxsplit)
-/*[clinic end generated code: output=833e2cf385d9a04d input=24f82669f41bf523]*/
+/*[clinic end generated code: output=833e2cf385d9a04d input=14afd5161c17fb05]*/
{
PyObject *list = NULL;
@@ -1596,17 +1597,18 @@ bytearray.partition
Partition the bytearray into three parts using the given separator.
-This will search for the separator sep in the bytearray. If the separator is
-found, returns a 3-tuple containing the part before the separator, the
-separator itself, and the part after it as new bytearray objects.
+This will search for the separator sep in the bytearray. If the
+separator is found, returns a 3-tuple containing the part before the
+separator, the separator itself, and the part after it as new
+bytearray objects.
-If the separator is not found, returns a 3-tuple containing the copy of the
-original bytearray object and two empty bytearray objects.
+If the separator is not found, returns a 3-tuple containing the copy
+of the original bytearray object and two empty bytearray objects.
[clinic start generated code]*/
static PyObject *
bytearray_partition(PyByteArrayObject *self, PyObject *sep)
-/*[clinic end generated code: output=45d2525ddd35f957 input=8f644749ee4fc83a]*/
+/*[clinic end generated code: output=45d2525ddd35f957 input=cba58c2f7620fd20]*/
{
PyObject *bytesep, *result;
@@ -1633,18 +1635,19 @@ bytearray.rpartition
Partition the bytearray into three parts using the given separator.
-This will search for the separator sep in the bytearray, starting at the end.
-If the separator is found, returns a 3-tuple containing the part before the
-separator, the separator itself, and the part after it as new bytearray
-objects.
+This will search for the separator sep in the bytearray, starting at
+the end. If the separator is found, returns a 3-tuple containing
+the part before the separator, the separator itself, and the part
+after it as new bytearray objects.
-If the separator is not found, returns a 3-tuple containing two empty bytearray
-objects and the copy of the original bytearray object.
+If the separator is not found, returns a 3-tuple containing two
+empty bytearray objects and the copy of the original bytearray
+object.
[clinic start generated code]*/
static PyObject *
bytearray_rpartition(PyByteArrayObject *self, PyObject *sep)
-/*[clinic end generated code: output=440de3c9426115e8 input=7e3df3e6cb8fa0ac]*/
+/*[clinic end generated code: output=440de3c9426115e8 input=6fb8e0f18e6bb0ec]*/
{
PyObject *bytesep, *result;
@@ -1668,13 +1671,14 @@ bytearray.rsplit = bytearray.split
Return a list of the sections in the bytearray, using sep as the delimiter.
-Splitting is done starting at the end of the bytearray and working to the front.
+Splitting is done starting at the end of the bytearray and working
+to the front.
[clinic start generated code]*/
static PyObject *
bytearray_rsplit_impl(PyByteArrayObject *self, PyObject *sep,
Py_ssize_t maxsplit)
-/*[clinic end generated code: output=a55e0b5a03cb6190 input=a68286e4dd692ffe]*/
+/*[clinic end generated code: output=a55e0b5a03cb6190 input=3c6d2e7a19e14c85]*/
{
PyObject *list = NULL;
@@ -2045,12 +2049,13 @@ bytearray.strip
Strip leading and trailing bytes contained in the argument.
-If the argument is omitted or None, strip leading and trailing ASCII whitespace.
+If the argument is omitted or None, strip leading and trailing ASCII
+whitespace.
[clinic start generated code]*/
static PyObject *
bytearray_strip_impl(PyByteArrayObject *self, PyObject *bytes)
-/*[clinic end generated code: output=760412661a34ad5a input=ef7bb59b09c21d62]*/
+/*[clinic end generated code: output=760412661a34ad5a input=063ca44b1f107843]*/
{
return bytearray_strip_impl_helper(self, bytes, BOTHSTRIP);
}
@@ -2097,11 +2102,11 @@ bytearray.decode
encoding: str(c_default="NULL") = 'utf-8'
The encoding with which to decode the bytearray.
errors: str(c_default="NULL") = 'strict'
- The error handling scheme to use for the handling of decoding errors.
- The default is 'strict' meaning that decoding errors raise a
- UnicodeDecodeError. Other possible values are 'ignore' and 'replace'
- as well as any other name registered with codecs.register_error that
- can handle UnicodeDecodeErrors.
+ The error handling scheme to use for the handling of decoding
+ errors. The default is 'strict' meaning that decoding errors
+ raise a UnicodeDecodeError. Other possible values are 'ignore'
+ and 'replace' as well as any other name registered with
+ codecs.register_error that can handle UnicodeDecodeErrors.
Decode the bytearray using the codec registered for encoding.
[clinic start generated code]*/
@@ -2109,7 +2114,7 @@ Decode the bytearray using the codec registered for encoding.
static PyObject *
bytearray_decode_impl(PyByteArrayObject *self, const char *encoding,
const char *errors)
-/*[clinic end generated code: output=f57d43f4a00b42c5 input=f28d8f903020257b]*/
+/*[clinic end generated code: output=f57d43f4a00b42c5 input=f2f539b09781a267]*/
{
if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding();
@@ -2135,14 +2140,15 @@ bytearray.join
Concatenate any number of bytes/bytearray objects.
-The bytearray whose method is called is inserted in between each pair.
+The bytearray whose method is called is inserted in between each
+pair.
The result is returned as a new bytearray object.
[clinic start generated code]*/
static PyObject *
bytearray_join(PyByteArrayObject *self, PyObject *iterable_of_bytes)
-/*[clinic end generated code: output=a8516370bf68ae08 input=aba6b1f9b30fcb8e]*/
+/*[clinic end generated code: output=a8516370bf68ae08 input=866170ddeab25355]*/
{
self->ob_exports++; // this protects `self` from being cleared/resized if `iterable_of_bytes` is a custom iterator
PyObject* ret = stringlib_bytes_join((PyObject*)self, iterable_of_bytes);
@@ -2157,13 +2163,13 @@ bytearray.splitlines
Return a list of the lines in the bytearray, breaking at line boundaries.
-Line breaks are not included in the resulting list unless keepends is given and
-true.
+Line breaks are not included in the resulting list unless keepends
+is given and true.
[clinic start generated code]*/
static PyObject *
bytearray_splitlines_impl(PyByteArrayObject *self, int keepends)
-/*[clinic end generated code: output=4223c94b895f6ad9 input=66b2dcdea8d093bf]*/
+/*[clinic end generated code: output=4223c94b895f6ad9 input=f9fcab8a2a9b1432]*/
{
return stringlib_splitlines(
(PyObject*) self, PyByteArray_AS_STRING(self),
@@ -2181,12 +2187,13 @@ bytearray.fromhex
Create a bytearray object from a string of hexadecimal numbers.
Spaces between two numbers are accepted.
-Example: bytearray.fromhex('B9 01EF') -> bytearray(b'\\xb9\\x01\\xef')
+Example:
+ bytearray.fromhex('B9 01EF') -> bytearray(b'\\xb9\\x01\\xef')
[clinic start generated code]*/
static PyObject *
bytearray_fromhex_impl(PyTypeObject *type, PyObject *string)
-/*[clinic end generated code: output=8f0f0b6d30fb3ba0 input=f033a16d1fb21f48]*/
+/*[clinic end generated code: output=8f0f0b6d30fb3ba0 input=45fdeb2c74fd76fa]*/
{
PyObject *result = _PyBytes_FromHex(string, type == &PyByteArray_Type);
if (type != &PyByteArray_Type && result != NULL) {
@@ -2201,8 +2208,8 @@ bytearray.hex
sep: object = NULL
An optional single character or byte to separate hex bytes.
bytes_per_sep: int = 1
- How many bytes between separators. Positive values count from the
- right, negative values count from the left.
+ How many bytes between separators. Positive values count from
+ the right, negative values count from the left.
Create a string of hexadecimal numbers from a bytearray object.
@@ -2220,7 +2227,7 @@ Example:
static PyObject *
bytearray_hex_impl(PyByteArrayObject *self, PyObject *sep, int bytes_per_sep)
-/*[clinic end generated code: output=29c4e5ef72c565a0 input=808667e49bcccb54]*/
+/*[clinic end generated code: output=29c4e5ef72c565a0 input=ad961bc88df6473a]*/
{
char* argbuf = PyByteArray_AS_STRING(self);
Py_ssize_t arglen = PyByteArray_GET_SIZE(self);
diff --git a/contrib/tools/python3/Objects/bytes_methods.c b/contrib/tools/python3/Objects/bytes_methods.c
index 981aa571643..d4b33f20f34 100644
--- a/contrib/tools/python3/Objects/bytes_methods.c
+++ b/contrib/tools/python3/Objects/bytes_methods.c
@@ -328,8 +328,8 @@ _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len)
PyDoc_STRVAR_shared(_Py_title__doc__,
"B.title() -> copy of B\n\
\n\
-Return a titlecased version of B, i.e. ASCII words start with uppercase\n\
-characters, all remaining cased characters have lowercase.");
+Return a titlecased version of B, i.e. ASCII words start with\n\
+uppercase characters, all remaining cased characters have lowercase.");
void
_Py_bytes_title(char *result, const char *s, Py_ssize_t len)
diff --git a/contrib/tools/python3/Objects/bytesobject.c b/contrib/tools/python3/Objects/bytesobject.c
index d891121589f..af6ca7270b0 100644
--- a/contrib/tools/python3/Objects/bytesobject.c
+++ b/contrib/tools/python3/Objects/bytesobject.c
@@ -1752,8 +1752,8 @@ bytes.split
sep: object = None
The delimiter according which to split the bytes.
- None (the default value) means split on ASCII whitespace characters
- (space, tab, return, newline, formfeed, vertical tab).
+ None (the default value) means split on ASCII whitespace
+ characters (space, tab, return, newline, formfeed, vertical tab).
maxsplit: Py_ssize_t = -1
Maximum number of splits to do.
-1 (the default value) means no limit.
@@ -1763,7 +1763,7 @@ Return a list of the sections in the bytes, using sep as the delimiter.
static PyObject *
bytes_split_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit)
-/*[clinic end generated code: output=52126b5844c1d8ef input=8b809b39074abbfa]*/
+/*[clinic end generated code: output=52126b5844c1d8ef input=9c0faeffc870f672]*/
{
Py_ssize_t len = PyBytes_GET_SIZE(self), n;
const char *s = PyBytes_AS_STRING(self), *sub;
@@ -1792,17 +1792,17 @@ bytes.partition
Partition the bytes into three parts using the given separator.
-This will search for the separator sep in the bytes. If the separator is found,
-returns a 3-tuple containing the part before the separator, the separator
-itself, and the part after it.
+This will search for the separator sep in the bytes. If the
+separator is found, returns a 3-tuple containing the part before the
+separator, the separator itself, and the part after it.
-If the separator is not found, returns a 3-tuple containing the original bytes
-object and two empty bytes objects.
+If the separator is not found, returns a 3-tuple containing the
+original bytes object and two empty bytes objects.
[clinic start generated code]*/
static PyObject *
bytes_partition_impl(PyBytesObject *self, Py_buffer *sep)
-/*[clinic end generated code: output=f532b392a17ff695 input=61cca95519406099]*/
+/*[clinic end generated code: output=f532b392a17ff695 input=2e6e551ea4f8b95a]*/
{
return stringlib_partition(
(PyObject*) self,
@@ -1819,17 +1819,18 @@ bytes.rpartition
Partition the bytes into three parts using the given separator.
-This will search for the separator sep in the bytes, starting at the end. If
-the separator is found, returns a 3-tuple containing the part before the
-separator, the separator itself, and the part after it.
+This will search for the separator sep in the bytes, starting at the
+end. If the separator is found, returns a 3-tuple containing the
+part before the separator, the separator itself, and the part after
+it.
-If the separator is not found, returns a 3-tuple containing two empty bytes
-objects and the original bytes object.
+If the separator is not found, returns a 3-tuple containing two
+empty bytes objects and the original bytes object.
[clinic start generated code]*/
static PyObject *
bytes_rpartition_impl(PyBytesObject *self, Py_buffer *sep)
-/*[clinic end generated code: output=191b114cbb028e50 input=d78db010c8cfdbe1]*/
+/*[clinic end generated code: output=191b114cbb028e50 input=f7d24f722a5470a4]*/
{
return stringlib_rpartition(
(PyObject*) self,
@@ -1843,12 +1844,13 @@ bytes.rsplit = bytes.split
Return a list of the sections in the bytes, using sep as the delimiter.
-Splitting is done starting at the end of the bytes and working to the front.
+Splitting is done starting at the end of the bytes and working to
+the front.
[clinic start generated code]*/
static PyObject *
bytes_rsplit_impl(PyBytesObject *self, PyObject *sep, Py_ssize_t maxsplit)
-/*[clinic end generated code: output=ba698d9ea01e1c8f input=0f86c9f28f7d7b7b]*/
+/*[clinic end generated code: output=ba698d9ea01e1c8f input=7fd643d4337b6a9b]*/
{
Py_ssize_t len = PyBytes_GET_SIZE(self), n;
const char *s = PyBytes_AS_STRING(self), *sub;
@@ -2063,12 +2065,13 @@ bytes.strip
Strip leading and trailing bytes contained in the argument.
-If the argument is omitted or None, strip leading and trailing ASCII whitespace.
+If the argument is omitted or None, strip leading and trailing ASCII
+whitespace.
[clinic start generated code]*/
static PyObject *
bytes_strip_impl(PyBytesObject *self, PyObject *bytes)
-/*[clinic end generated code: output=c7c228d3bd104a1b input=8a354640e4e0b3ef]*/
+/*[clinic end generated code: output=c7c228d3bd104a1b input=9ffea5f752032bd0]*/
{
return do_argstrip(self, BOTHSTRIP, bytes);
}
@@ -2136,14 +2139,15 @@ bytes.translate
Return a copy with each character mapped by the given translation table.
-All characters occurring in the optional argument delete are removed.
-The remaining characters are mapped through the given translation table.
+All characters occurring in the optional argument delete are
+removed. The remaining characters are mapped through the given
+translation table.
[clinic start generated code]*/
static PyObject *
bytes_translate_impl(PyBytesObject *self, PyObject *table,
PyObject *deletechars)
-/*[clinic end generated code: output=43be3437f1956211 input=0ecdf159f654233c]*/
+/*[clinic end generated code: output=43be3437f1956211 input=4e4460a981d768c5]*/
{
const char *input;
char *output;
@@ -2265,15 +2269,15 @@ bytes.maketrans
Return a translation table usable for the bytes or bytearray translate method.
-The returned table will be one where each byte in frm is mapped to the byte at
-the same position in to.
+The returned table will be one where each byte in frm is mapped to
+the byte at the same position in to.
The bytes objects frm and to must be of the same length.
[clinic start generated code]*/
static PyObject *
bytes_maketrans_impl(Py_buffer *frm, Py_buffer *to)
-/*[clinic end generated code: output=a36f6399d4b77f6f input=a3bd00d430a0979f]*/
+/*[clinic end generated code: output=a36f6399d4b77f6f input=c88bcc17621f785d]*/
{
return _Py_bytes_maketrans(frm, to);
}
@@ -2315,13 +2319,14 @@ bytes.removeprefix as bytes_removeprefix
Return a bytes object with the given prefix string removed if present.
-If the bytes starts with the prefix string, return bytes[len(prefix):].
-Otherwise, return a copy of the original bytes.
+If the bytes starts with the prefix string, return
+bytes[len(prefix):]. Otherwise, return a copy of the original
+bytes.
[clinic start generated code]*/
static PyObject *
bytes_removeprefix_impl(PyBytesObject *self, Py_buffer *prefix)
-/*[clinic end generated code: output=f006865331a06ab6 input=0c93bac817a8502c]*/
+/*[clinic end generated code: output=f006865331a06ab6 input=8f371f9421b8addd]*/
{
const char *self_start = PyBytes_AS_STRING(self);
Py_ssize_t self_len = PyBytes_GET_SIZE(self);
@@ -2351,14 +2356,14 @@ bytes.removesuffix as bytes_removesuffix
Return a bytes object with the given suffix string removed if present.
-If the bytes ends with the suffix string and that suffix is not empty,
-return bytes[:-len(prefix)]. Otherwise, return a copy of the original
-bytes.
+If the bytes ends with the suffix string and that suffix is not
+empty, return bytes[:-len(prefix)]. Otherwise, return a copy of the
+original bytes.
[clinic start generated code]*/
static PyObject *
bytes_removesuffix_impl(PyBytesObject *self, Py_buffer *suffix)
-/*[clinic end generated code: output=d887d308e3242eeb input=9f4e1da8c637bbf1]*/
+/*[clinic end generated code: output=d887d308e3242eeb input=35eada0260d1171b]*/
{
const char *self_start = PyBytes_AS_STRING(self);
Py_ssize_t self_len = PyBytes_GET_SIZE(self);
@@ -2436,11 +2441,11 @@ bytes.decode
encoding: str(c_default="NULL") = 'utf-8'
The encoding with which to decode the bytes.
errors: str(c_default="NULL") = 'strict'
- The error handling scheme to use for the handling of decoding errors.
- The default is 'strict' meaning that decoding errors raise a
- UnicodeDecodeError. Other possible values are 'ignore' and 'replace'
- as well as any other name registered with codecs.register_error that
- can handle UnicodeDecodeErrors.
+ The error handling scheme to use for the handling of decoding
+ errors. The default is 'strict' meaning that decoding errors
+ raise a UnicodeDecodeError. Other possible values are 'ignore'
+ and 'replace' as well as any other name registered with
+ codecs.register_error that can handle UnicodeDecodeErrors.
Decode the bytes using the codec registered for encoding.
[clinic start generated code]*/
@@ -2448,7 +2453,7 @@ Decode the bytes using the codec registered for encoding.
static PyObject *
bytes_decode_impl(PyBytesObject *self, const char *encoding,
const char *errors)
-/*[clinic end generated code: output=5649a53dde27b314 input=958174769d2a40ca]*/
+/*[clinic end generated code: output=5649a53dde27b314 input=94e9b8524f1d7f37]*/
{
return PyUnicode_FromEncodedObject((PyObject*)self, encoding, errors);
}
@@ -2461,13 +2466,13 @@ bytes.splitlines
Return a list of the lines in the bytes, breaking at line boundaries.
-Line breaks are not included in the resulting list unless keepends is given and
-true.
+Line breaks are not included in the resulting list unless keepends
+is given and true.
[clinic start generated code]*/
static PyObject *
bytes_splitlines_impl(PyBytesObject *self, int keepends)
-/*[clinic end generated code: output=3484149a5d880ffb input=5d7b898af2fe55c0]*/
+/*[clinic end generated code: output=3484149a5d880ffb input=8b7b6915be775bcf]*/
{
return stringlib_splitlines(
(PyObject*) self, PyBytes_AS_STRING(self),
@@ -2579,9 +2584,10 @@ bytes.hex
sep: object = NULL
An optional single character or byte to separate hex bytes.
+
bytes_per_sep: int = 1
- How many bytes between separators. Positive values count from the
- right, negative values count from the left.
+ How many bytes between separators. Positive values count from
+ the right, negative values count from the left.
Create a string of hexadecimal numbers from a bytes object.
@@ -2599,7 +2605,7 @@ Example:
static PyObject *
bytes_hex_impl(PyBytesObject *self, PyObject *sep, int bytes_per_sep)
-/*[clinic end generated code: output=1f134da504064139 input=1a21282b1f1ae595]*/
+/*[clinic end generated code: output=1f134da504064139 input=67d7bb5f70f0d6f2]*/
{
const char *argbuf = PyBytes_AS_STRING(self);
Py_ssize_t arglen = PyBytes_GET_SIZE(self);
diff --git a/contrib/tools/python3/Objects/clinic/bytearrayobject.c.h b/contrib/tools/python3/Objects/clinic/bytearrayobject.c.h
index c748c53e1c0..c61cceb59bd 100644
--- a/contrib/tools/python3/Objects/clinic/bytearrayobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/bytearrayobject.c.h
@@ -573,8 +573,9 @@ PyDoc_STRVAR(bytearray_translate__doc__,
" table\n"
" Translation table, which must be a bytes object of length 256.\n"
"\n"
-"All characters occurring in the optional argument delete are removed.\n"
-"The remaining characters are mapped through the given translation table.");
+"All characters occurring in the optional argument delete are\n"
+"removed. The remaining characters are mapped through the given\n"
+"translation table.");
#define BYTEARRAY_TRANSLATE_METHODDEF \
{"translate", _PyCFunction_CAST(bytearray_translate), METH_FASTCALL|METH_KEYWORDS, bytearray_translate__doc__},
@@ -639,8 +640,8 @@ PyDoc_STRVAR(bytearray_maketrans__doc__,
"\n"
"Return a translation table usable for the bytes or bytearray translate method.\n"
"\n"
-"The returned table will be one where each byte in frm is mapped to the byte at\n"
-"the same position in to.\n"
+"The returned table will be one where each byte in frm is mapped to\n"
+"the byte at the same position in to.\n"
"\n"
"The bytes objects frm and to must be of the same length.");
@@ -757,8 +758,8 @@ PyDoc_STRVAR(bytearray_split__doc__,
"\n"
" sep\n"
" The delimiter according which to split the bytearray.\n"
-" None (the default value) means split on ASCII whitespace characters\n"
-" (space, tab, return, newline, formfeed, vertical tab).\n"
+" None (the default value) means split on ASCII whitespace\n"
+" characters (space, tab, return, newline, formfeed, vertical tab).\n"
" maxsplit\n"
" Maximum number of splits to do.\n"
" -1 (the default value) means no limit.");
@@ -842,12 +843,13 @@ PyDoc_STRVAR(bytearray_partition__doc__,
"\n"
"Partition the bytearray into three parts using the given separator.\n"
"\n"
-"This will search for the separator sep in the bytearray. If the separator is\n"
-"found, returns a 3-tuple containing the part before the separator, the\n"
-"separator itself, and the part after it as new bytearray objects.\n"
+"This will search for the separator sep in the bytearray. If the\n"
+"separator is found, returns a 3-tuple containing the part before the\n"
+"separator, the separator itself, and the part after it as new\n"
+"bytearray objects.\n"
"\n"
-"If the separator is not found, returns a 3-tuple containing the copy of the\n"
-"original bytearray object and two empty bytearray objects.");
+"If the separator is not found, returns a 3-tuple containing the copy\n"
+"of the original bytearray object and two empty bytearray objects.");
#define BYTEARRAY_PARTITION_METHODDEF \
{"partition", (PyCFunction)bytearray_partition, METH_O, bytearray_partition__doc__},
@@ -858,13 +860,14 @@ PyDoc_STRVAR(bytearray_rpartition__doc__,
"\n"
"Partition the bytearray into three parts using the given separator.\n"
"\n"
-"This will search for the separator sep in the bytearray, starting at the end.\n"
-"If the separator is found, returns a 3-tuple containing the part before the\n"
-"separator, the separator itself, and the part after it as new bytearray\n"
-"objects.\n"
+"This will search for the separator sep in the bytearray, starting at\n"
+"the end. If the separator is found, returns a 3-tuple containing\n"
+"the part before the separator, the separator itself, and the part\n"
+"after it as new bytearray objects.\n"
"\n"
-"If the separator is not found, returns a 3-tuple containing two empty bytearray\n"
-"objects and the copy of the original bytearray object.");
+"If the separator is not found, returns a 3-tuple containing two\n"
+"empty bytearray objects and the copy of the original bytearray\n"
+"object.");
#define BYTEARRAY_RPARTITION_METHODDEF \
{"rpartition", (PyCFunction)bytearray_rpartition, METH_O, bytearray_rpartition__doc__},
@@ -877,13 +880,14 @@ PyDoc_STRVAR(bytearray_rsplit__doc__,
"\n"
" sep\n"
" The delimiter according which to split the bytearray.\n"
-" None (the default value) means split on ASCII whitespace characters\n"
-" (space, tab, return, newline, formfeed, vertical tab).\n"
+" None (the default value) means split on ASCII whitespace\n"
+" characters (space, tab, return, newline, formfeed, vertical tab).\n"
" maxsplit\n"
" Maximum number of splits to do.\n"
" -1 (the default value) means no limit.\n"
"\n"
-"Splitting is done starting at the end of the bytearray and working to the front.");
+"Splitting is done starting at the end of the bytearray and working\n"
+"to the front.");
#define BYTEARRAY_RSPLIT_METHODDEF \
{"rsplit", _PyCFunction_CAST(bytearray_rsplit), METH_FASTCALL|METH_KEYWORDS, bytearray_rsplit__doc__},
@@ -1151,7 +1155,8 @@ PyDoc_STRVAR(bytearray_strip__doc__,
"\n"
"Strip leading and trailing bytes contained in the argument.\n"
"\n"
-"If the argument is omitted or None, strip leading and trailing ASCII whitespace.");
+"If the argument is omitted or None, strip leading and trailing ASCII\n"
+"whitespace.");
#define BYTEARRAY_STRIP_METHODDEF \
{"strip", _PyCFunction_CAST(bytearray_strip), METH_FASTCALL, bytearray_strip__doc__},
@@ -1256,11 +1261,11 @@ PyDoc_STRVAR(bytearray_decode__doc__,
" encoding\n"
" The encoding with which to decode the bytearray.\n"
" errors\n"
-" The error handling scheme to use for the handling of decoding errors.\n"
-" The default is \'strict\' meaning that decoding errors raise a\n"
-" UnicodeDecodeError. Other possible values are \'ignore\' and \'replace\'\n"
-" as well as any other name registered with codecs.register_error that\n"
-" can handle UnicodeDecodeErrors.");
+" The error handling scheme to use for the handling of decoding\n"
+" errors. The default is \'strict\' meaning that decoding errors\n"
+" raise a UnicodeDecodeError. Other possible values are \'ignore\'\n"
+" and \'replace\' as well as any other name registered with\n"
+" codecs.register_error that can handle UnicodeDecodeErrors.");
#define BYTEARRAY_DECODE_METHODDEF \
{"decode", _PyCFunction_CAST(bytearray_decode), METH_FASTCALL|METH_KEYWORDS, bytearray_decode__doc__},
@@ -1354,7 +1359,8 @@ PyDoc_STRVAR(bytearray_join__doc__,
"\n"
"Concatenate any number of bytes/bytearray objects.\n"
"\n"
-"The bytearray whose method is called is inserted in between each pair.\n"
+"The bytearray whose method is called is inserted in between each\n"
+"pair.\n"
"\n"
"The result is returned as a new bytearray object.");
@@ -1367,8 +1373,8 @@ PyDoc_STRVAR(bytearray_splitlines__doc__,
"\n"
"Return a list of the lines in the bytearray, breaking at line boundaries.\n"
"\n"
-"Line breaks are not included in the resulting list unless keepends is given and\n"
-"true.");
+"Line breaks are not included in the resulting list unless keepends\n"
+"is given and true.");
#define BYTEARRAY_SPLITLINES_METHODDEF \
{"splitlines", _PyCFunction_CAST(bytearray_splitlines), METH_FASTCALL|METH_KEYWORDS, bytearray_splitlines__doc__},
@@ -1434,7 +1440,8 @@ PyDoc_STRVAR(bytearray_fromhex__doc__,
"Create a bytearray object from a string of hexadecimal numbers.\n"
"\n"
"Spaces between two numbers are accepted.\n"
-"Example: bytearray.fromhex(\'B9 01EF\') -> bytearray(b\'\\\\xb9\\\\x01\\\\xef\')");
+"Example:\n"
+" bytearray.fromhex(\'B9 01EF\') -> bytearray(b\'\\\\xb9\\\\x01\\\\xef\')");
#define BYTEARRAY_FROMHEX_METHODDEF \
{"fromhex", (PyCFunction)bytearray_fromhex, METH_O|METH_CLASS, bytearray_fromhex__doc__},
@@ -1468,8 +1475,8 @@ PyDoc_STRVAR(bytearray_hex__doc__,
" sep\n"
" An optional single character or byte to separate hex bytes.\n"
" bytes_per_sep\n"
-" How many bytes between separators. Positive values count from the\n"
-" right, negative values count from the left.\n"
+" How many bytes between separators. Positive values count from\n"
+" the right, negative values count from the left.\n"
"\n"
"Example:\n"
">>> value = bytearray([0xb9, 0x01, 0xef])\n"
@@ -1616,4 +1623,4 @@ bytearray_sizeof(PyByteArrayObject *self, PyObject *Py_UNUSED(ignored))
{
return bytearray_sizeof_impl(self);
}
-/*[clinic end generated code: output=5f861b02e3fa278b input=a9049054013a1b77]*/
+/*[clinic end generated code: output=0ba624d41653ce07 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/clinic/bytesobject.c.h b/contrib/tools/python3/Objects/clinic/bytesobject.c.h
index 0b4b3750173..01dc77bbbf3 100644
--- a/contrib/tools/python3/Objects/clinic/bytesobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/bytesobject.c.h
@@ -35,8 +35,8 @@ PyDoc_STRVAR(bytes_split__doc__,
"\n"
" sep\n"
" The delimiter according which to split the bytes.\n"
-" None (the default value) means split on ASCII whitespace characters\n"
-" (space, tab, return, newline, formfeed, vertical tab).\n"
+" None (the default value) means split on ASCII whitespace\n"
+" characters (space, tab, return, newline, formfeed, vertical tab).\n"
" maxsplit\n"
" Maximum number of splits to do.\n"
" -1 (the default value) means no limit.");
@@ -119,12 +119,12 @@ PyDoc_STRVAR(bytes_partition__doc__,
"\n"
"Partition the bytes into three parts using the given separator.\n"
"\n"
-"This will search for the separator sep in the bytes. If the separator is found,\n"
-"returns a 3-tuple containing the part before the separator, the separator\n"
-"itself, and the part after it.\n"
+"This will search for the separator sep in the bytes. If the\n"
+"separator is found, returns a 3-tuple containing the part before the\n"
+"separator, the separator itself, and the part after it.\n"
"\n"
-"If the separator is not found, returns a 3-tuple containing the original bytes\n"
-"object and two empty bytes objects.");
+"If the separator is not found, returns a 3-tuple containing the\n"
+"original bytes object and two empty bytes objects.");
#define BYTES_PARTITION_METHODDEF \
{"partition", (PyCFunction)bytes_partition, METH_O, bytes_partition__doc__},
@@ -158,12 +158,13 @@ PyDoc_STRVAR(bytes_rpartition__doc__,
"\n"
"Partition the bytes into three parts using the given separator.\n"
"\n"
-"This will search for the separator sep in the bytes, starting at the end. If\n"
-"the separator is found, returns a 3-tuple containing the part before the\n"
-"separator, the separator itself, and the part after it.\n"
+"This will search for the separator sep in the bytes, starting at the\n"
+"end. If the separator is found, returns a 3-tuple containing the\n"
+"part before the separator, the separator itself, and the part after\n"
+"it.\n"
"\n"
-"If the separator is not found, returns a 3-tuple containing two empty bytes\n"
-"objects and the original bytes object.");
+"If the separator is not found, returns a 3-tuple containing two\n"
+"empty bytes objects and the original bytes object.");
#define BYTES_RPARTITION_METHODDEF \
{"rpartition", (PyCFunction)bytes_rpartition, METH_O, bytes_rpartition__doc__},
@@ -199,13 +200,14 @@ PyDoc_STRVAR(bytes_rsplit__doc__,
"\n"
" sep\n"
" The delimiter according which to split the bytes.\n"
-" None (the default value) means split on ASCII whitespace characters\n"
-" (space, tab, return, newline, formfeed, vertical tab).\n"
+" None (the default value) means split on ASCII whitespace\n"
+" characters (space, tab, return, newline, formfeed, vertical tab).\n"
" maxsplit\n"
" Maximum number of splits to do.\n"
" -1 (the default value) means no limit.\n"
"\n"
-"Splitting is done starting at the end of the bytes and working to the front.");
+"Splitting is done starting at the end of the bytes and working to\n"
+"the front.");
#define BYTES_RSPLIT_METHODDEF \
{"rsplit", _PyCFunction_CAST(bytes_rsplit), METH_FASTCALL|METH_KEYWORDS, bytes_rsplit__doc__},
@@ -504,7 +506,8 @@ PyDoc_STRVAR(bytes_strip__doc__,
"\n"
"Strip leading and trailing bytes contained in the argument.\n"
"\n"
-"If the argument is omitted or None, strip leading and trailing ASCII whitespace.");
+"If the argument is omitted or None, strip leading and trailing ASCII\n"
+"whitespace.");
#define BYTES_STRIP_METHODDEF \
{"strip", _PyCFunction_CAST(bytes_strip), METH_FASTCALL, bytes_strip__doc__},
@@ -658,8 +661,9 @@ PyDoc_STRVAR(bytes_translate__doc__,
" table\n"
" Translation table, which must be a bytes object of length 256.\n"
"\n"
-"All characters occurring in the optional argument delete are removed.\n"
-"The remaining characters are mapped through the given translation table.");
+"All characters occurring in the optional argument delete are\n"
+"removed. The remaining characters are mapped through the given\n"
+"translation table.");
#define BYTES_TRANSLATE_METHODDEF \
{"translate", _PyCFunction_CAST(bytes_translate), METH_FASTCALL|METH_KEYWORDS, bytes_translate__doc__},
@@ -724,8 +728,8 @@ PyDoc_STRVAR(bytes_maketrans__doc__,
"\n"
"Return a translation table usable for the bytes or bytearray translate method.\n"
"\n"
-"The returned table will be one where each byte in frm is mapped to the byte at\n"
-"the same position in to.\n"
+"The returned table will be one where each byte in frm is mapped to\n"
+"the byte at the same position in to.\n"
"\n"
"The bytes objects frm and to must be of the same length.");
@@ -840,8 +844,9 @@ PyDoc_STRVAR(bytes_removeprefix__doc__,
"\n"
"Return a bytes object with the given prefix string removed if present.\n"
"\n"
-"If the bytes starts with the prefix string, return bytes[len(prefix):].\n"
-"Otherwise, return a copy of the original bytes.");
+"If the bytes starts with the prefix string, return\n"
+"bytes[len(prefix):]. Otherwise, return a copy of the original\n"
+"bytes.");
#define BYTES_REMOVEPREFIX_METHODDEF \
{"removeprefix", (PyCFunction)bytes_removeprefix, METH_O, bytes_removeprefix__doc__},
@@ -875,9 +880,9 @@ PyDoc_STRVAR(bytes_removesuffix__doc__,
"\n"
"Return a bytes object with the given suffix string removed if present.\n"
"\n"
-"If the bytes ends with the suffix string and that suffix is not empty,\n"
-"return bytes[:-len(prefix)]. Otherwise, return a copy of the original\n"
-"bytes.");
+"If the bytes ends with the suffix string and that suffix is not\n"
+"empty, return bytes[:-len(prefix)]. Otherwise, return a copy of the\n"
+"original bytes.");
#define BYTES_REMOVESUFFIX_METHODDEF \
{"removesuffix", (PyCFunction)bytes_removesuffix, METH_O, bytes_removesuffix__doc__},
@@ -1016,11 +1021,11 @@ PyDoc_STRVAR(bytes_decode__doc__,
" encoding\n"
" The encoding with which to decode the bytes.\n"
" errors\n"
-" The error handling scheme to use for the handling of decoding errors.\n"
-" The default is \'strict\' meaning that decoding errors raise a\n"
-" UnicodeDecodeError. Other possible values are \'ignore\' and \'replace\'\n"
-" as well as any other name registered with codecs.register_error that\n"
-" can handle UnicodeDecodeErrors.");
+" The error handling scheme to use for the handling of decoding\n"
+" errors. The default is \'strict\' meaning that decoding errors\n"
+" raise a UnicodeDecodeError. Other possible values are \'ignore\'\n"
+" and \'replace\' as well as any other name registered with\n"
+" codecs.register_error that can handle UnicodeDecodeErrors.");
#define BYTES_DECODE_METHODDEF \
{"decode", _PyCFunction_CAST(bytes_decode), METH_FASTCALL|METH_KEYWORDS, bytes_decode__doc__},
@@ -1114,8 +1119,8 @@ PyDoc_STRVAR(bytes_splitlines__doc__,
"\n"
"Return a list of the lines in the bytes, breaking at line boundaries.\n"
"\n"
-"Line breaks are not included in the resulting list unless keepends is given and\n"
-"true.");
+"Line breaks are not included in the resulting list unless keepends\n"
+"is given and true.");
#define BYTES_SPLITLINES_METHODDEF \
{"splitlines", _PyCFunction_CAST(bytes_splitlines), METH_FASTCALL|METH_KEYWORDS, bytes_splitlines__doc__},
@@ -1215,8 +1220,8 @@ PyDoc_STRVAR(bytes_hex__doc__,
" sep\n"
" An optional single character or byte to separate hex bytes.\n"
" bytes_per_sep\n"
-" How many bytes between separators. Positive values count from the\n"
-" right, negative values count from the left.\n"
+" How many bytes between separators. Positive values count from\n"
+" the right, negative values count from the left.\n"
"\n"
"Example:\n"
">>> value = b\'\\xb9\\x01\\xef\'\n"
@@ -1384,4 +1389,4 @@ skip_optional_pos:
exit:
return return_value;
}
-/*[clinic end generated code: output=d6801c6001e57f91 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=d2bb8823b8a6a75b input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/clinic/codeobject.c.h b/contrib/tools/python3/Objects/clinic/codeobject.c.h
index 68e2d7f528c..3883a726be4 100644
--- a/contrib/tools/python3/Objects/clinic/codeobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/codeobject.c.h
@@ -411,7 +411,8 @@ PyDoc_STRVAR(code__varname_from_oparg__doc__,
"\n"
"(internal-only) Return the local variable name for the given oparg.\n"
"\n"
-"WARNING: this method is for internal use only and may change or go away.");
+"WARNING: this method is for internal use only and may change or go\n"
+"away.");
#define CODE__VARNAME_FROM_OPARG_METHODDEF \
{"_varname_from_oparg", _PyCFunction_CAST(code__varname_from_oparg), METH_FASTCALL|METH_KEYWORDS, code__varname_from_oparg__doc__},
@@ -464,4 +465,4 @@ code__varname_from_oparg(PyCodeObject *self, PyObject *const *args, Py_ssize_t n
exit:
return return_value;
}
-/*[clinic end generated code: output=d604263a3ca72a0f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ffe4f70404970c51 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/clinic/floatobject.c.h b/contrib/tools/python3/Objects/clinic/floatobject.c.h
index d104b071890..1e6b29d3054 100644
--- a/contrib/tools/python3/Objects/clinic/floatobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/floatobject.c.h
@@ -255,9 +255,9 @@ PyDoc_STRVAR(float___getformat____doc__,
"\n"
"It exists mainly to be used in Python\'s test suite.\n"
"\n"
-"This function returns whichever of \'unknown\', \'IEEE, big-endian\' or \'IEEE,\n"
-"little-endian\' best describes the format of floating-point numbers used by the\n"
-"C type named by typestr.");
+"This function returns whichever of \'unknown\', \'IEEE, big-endian\' or\n"
+"\'IEEE, little-endian\' best describes the format of floating-point\n"
+"numbers used by the C type named by typestr.");
#define FLOAT___GETFORMAT___METHODDEF \
{"__getformat__", (PyCFunction)float___getformat__, METH_O|METH_CLASS, float___getformat____doc__},
@@ -318,4 +318,4 @@ float___format__(PyObject *self, PyObject *arg)
exit:
return return_value;
}
-/*[clinic end generated code: output=d8bbcd83977d516f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=87a117517a970173 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/clinic/listobject.c.h b/contrib/tools/python3/Objects/clinic/listobject.c.h
index 588e021fb71..1b251fd9cc7 100644
--- a/contrib/tools/python3/Objects/clinic/listobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/listobject.c.h
@@ -187,11 +187,11 @@ PyDoc_STRVAR(list_sort__doc__,
"\n"
"Sort the list in ascending order and return None.\n"
"\n"
-"The sort is in-place (i.e. the list itself is modified) and stable (i.e. the\n"
-"order of two equal elements is maintained).\n"
+"The sort is in-place (i.e. the list itself is modified) and stable\n"
+"(i.e. the order of two equal elements is maintained).\n"
"\n"
-"If a key function is given, apply it once to each list item and sort them,\n"
-"ascending or descending, according to their function values.\n"
+"If a key function is given, apply it once to each list item and sort\n"
+"them, ascending or descending, according to their function values.\n"
"\n"
"The reverse flag can be set to sort in descending order.");
@@ -439,4 +439,4 @@ list___reversed__(PyListObject *self, PyObject *Py_UNUSED(ignored))
{
return list___reversed___impl(self);
}
-/*[clinic end generated code: output=854957a1d4a89bbd input=a9049054013a1b77]*/
+/*[clinic end generated code: output=005658119324f9ae input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/clinic/longobject.c.h b/contrib/tools/python3/Objects/clinic/longobject.c.h
index 56bc3864582..06d2b4538bc 100644
--- a/contrib/tools/python3/Objects/clinic/longobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/longobject.c.h
@@ -259,19 +259,20 @@ PyDoc_STRVAR(int_to_bytes__doc__,
"Return an array of bytes representing an integer.\n"
"\n"
" length\n"
-" Length of bytes object to use. An OverflowError is raised if the\n"
-" integer is not representable with the given number of bytes. Default\n"
-" is length 1.\n"
+" Length of bytes object to use. An OverflowError is raised if\n"
+" the integer is not representable with the given number of bytes.\n"
+" Default is length 1.\n"
" byteorder\n"
-" The byte order used to represent the integer. If byteorder is \'big\',\n"
-" the most significant byte is at the beginning of the byte array. If\n"
-" byteorder is \'little\', the most significant byte is at the end of the\n"
-" byte array. To request the native byte order of the host system, use\n"
-" sys.byteorder as the byte order value. Default is to use \'big\'.\n"
+" The byte order used to represent the integer. If byteorder is\n"
+" \'big\', the most significant byte is at the beginning of the byte\n"
+" array. If byteorder is \'little\', the most significant byte is at\n"
+" the end of the byte array. To request the native byte order of\n"
+" the host system, use sys.byteorder as the byte order value.\n"
+" Default is to use \'big\'.\n"
" signed\n"
-" Determines whether two\'s complement is used to represent the integer.\n"
-" If signed is False and a negative integer is given, an OverflowError\n"
-" is raised.");
+" Determines whether two\'s complement is used to represent the\n"
+" integer. If signed is False and a negative integer is given,\n"
+" an OverflowError is raised.");
#define INT_TO_BYTES_METHODDEF \
{"to_bytes", _PyCFunction_CAST(int_to_bytes), METH_FASTCALL|METH_KEYWORDS, int_to_bytes__doc__},
@@ -372,17 +373,19 @@ PyDoc_STRVAR(int_from_bytes__doc__,
"\n"
" bytes\n"
" Holds the array of bytes to convert. The argument must either\n"
-" support the buffer protocol or be an iterable object producing bytes.\n"
-" Bytes and bytearray are examples of built-in objects that support the\n"
-" buffer protocol.\n"
+" support the buffer protocol or be an iterable object producing\n"
+" bytes. Bytes and bytearray are examples of built-in objects that\n"
+" support the buffer protocol.\n"
" byteorder\n"
-" The byte order used to represent the integer. If byteorder is \'big\',\n"
-" the most significant byte is at the beginning of the byte array. If\n"
-" byteorder is \'little\', the most significant byte is at the end of the\n"
-" byte array. To request the native byte order of the host system, use\n"
-" sys.byteorder as the byte order value. Default is to use \'big\'.\n"
+" The byte order used to represent the integer. If byteorder is\n"
+" \'big\', the most significant byte is at the beginning of the byte\n"
+" array. If byteorder is \'little\', the most significant byte is at\n"
+" the end of the byte array. To request the native byte order of\n"
+" the host system, use sys.byteorder as the byte order value.\n"
+" Default is to use \'big\'.\n"
" signed\n"
-" Indicates whether two\'s complement is used to represent the integer.");
+" Indicates whether two\'s complement is used to represent the\n"
+" integer.");
#define INT_FROM_BYTES_METHODDEF \
{"from_bytes", _PyCFunction_CAST(int_from_bytes), METH_FASTCALL|METH_KEYWORDS|METH_CLASS, int_from_bytes__doc__},
@@ -476,4 +479,4 @@ int_is_integer(PyObject *self, PyObject *Py_UNUSED(ignored))
{
return int_is_integer_impl(self);
}
-/*[clinic end generated code: output=2ba2d8dcda9b99da input=a9049054013a1b77]*/
+/*[clinic end generated code: output=2ccde4b93141d1a1 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/clinic/memoryobject.c.h b/contrib/tools/python3/Objects/clinic/memoryobject.c.h
index f199434dacb..9f6541dfbc2 100644
--- a/contrib/tools/python3/Objects/clinic/memoryobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/memoryobject.c.h
@@ -249,11 +249,12 @@ PyDoc_STRVAR(memoryview_tobytes__doc__,
"\n"
"Return the data in the buffer as a byte string.\n"
"\n"
-"Order can be {\'C\', \'F\', \'A\'}. When order is \'C\' or \'F\', the data of the\n"
-"original array is converted to C or Fortran order. For contiguous views,\n"
-"\'A\' returns an exact copy of the physical memory. In particular, in-memory\n"
-"Fortran order is preserved. For non-contiguous views, the data is converted\n"
-"to C first. order=None is the same as order=\'C\'.");
+"Order can be {\'C\', \'F\', \'A\'}. When order is \'C\' or \'F\', the data of\n"
+"the original array is converted to C or Fortran order. For\n"
+"contiguous views, \'A\' returns an exact copy of the physical memory.\n"
+"In particular, in-memory Fortran order is preserved. For\n"
+"non-contiguous views, the data is converted to C first. order=None\n"
+"is the same as order=\'C\'.");
#define MEMORYVIEW_TOBYTES_METHODDEF \
{"tobytes", _PyCFunction_CAST(memoryview_tobytes), METH_FASTCALL|METH_KEYWORDS, memoryview_tobytes__doc__},
@@ -335,8 +336,8 @@ PyDoc_STRVAR(memoryview_hex__doc__,
" sep\n"
" An optional single character or byte to separate hex bytes.\n"
" bytes_per_sep\n"
-" How many bytes between separators. Positive values count from the\n"
-" right, negative values count from the left.\n"
+" How many bytes between separators. Positive values count from\n"
+" the right, negative values count from the left.\n"
"\n"
"Example:\n"
">>> value = memoryview(b\'\\xb9\\x01\\xef\')\n"
@@ -413,4 +414,4 @@ skip_optional_pos:
exit:
return return_value;
}
-/*[clinic end generated code: output=7e76a09106921ba2 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=5e6eb7b47a172cf6 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/clinic/odictobject.c.h b/contrib/tools/python3/Objects/clinic/odictobject.c.h
index 5ef53806569..6ba432ccc0c 100644
--- a/contrib/tools/python3/Objects/clinic/odictobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/odictobject.c.h
@@ -207,7 +207,8 @@ PyDoc_STRVAR(OrderedDict_popitem__doc__,
"\n"
"Remove and return a (key, value) pair from the dictionary.\n"
"\n"
-"Pairs are returned in LIFO order if last is true or FIFO order if false.");
+"Pairs are returned in LIFO order if last is true or FIFO order if\n"
+"false.");
#define ORDEREDDICT_POPITEM_METHODDEF \
{"popitem", _PyCFunction_CAST(OrderedDict_popitem), METH_FASTCALL|METH_KEYWORDS, OrderedDict_popitem__doc__},
@@ -332,4 +333,4 @@ skip_optional_pos:
exit:
return return_value;
}
-/*[clinic end generated code: output=eff78d2a3f9379bd input=a9049054013a1b77]*/
+/*[clinic end generated code: output=1441f72b8624d808 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/clinic/unicodeobject.c.h b/contrib/tools/python3/Objects/clinic/unicodeobject.c.h
index 1db304e7063..62192443a1c 100644
--- a/contrib/tools/python3/Objects/clinic/unicodeobject.c.h
+++ b/contrib/tools/python3/Objects/clinic/unicodeobject.c.h
@@ -33,8 +33,8 @@ PyDoc_STRVAR(unicode_title__doc__,
"\n"
"Return a version of the string where each word is titlecased.\n"
"\n"
-"More specifically, words start with uppercased characters and all remaining\n"
-"cased characters have lower case.");
+"More specifically, words start with uppercased characters and all\n"
+"remaining cased characters have lower case.");
#define UNICODE_TITLE_METHODDEF \
{"title", (PyCFunction)unicode_title, METH_NOARGS, unicode_title__doc__},
@@ -54,8 +54,8 @@ PyDoc_STRVAR(unicode_capitalize__doc__,
"\n"
"Return a capitalized version of the string.\n"
"\n"
-"More specifically, make the first character have upper case and the rest lower\n"
-"case.");
+"More specifically, make the first character have upper case and the\n"
+"rest lower case.");
#define UNICODE_CAPITALIZE_METHODDEF \
{"capitalize", (PyCFunction)unicode_capitalize, METH_NOARGS, unicode_capitalize__doc__},
@@ -93,7 +93,8 @@ PyDoc_STRVAR(unicode_center__doc__,
"\n"
"Return a centered string of length width.\n"
"\n"
-"Padding is done using the specified fill character (default is a space).");
+"Padding is done using the specified fill character (default is\n"
+"a space).");
#define UNICODE_CENTER_METHODDEF \
{"center", _PyCFunction_CAST(unicode_center), METH_FASTCALL, unicode_center__doc__},
@@ -142,7 +143,8 @@ PyDoc_STRVAR(unicode_count__doc__,
"\n"
"Return the number of non-overlapping occurrences of substring sub in string S[start:end].\n"
"\n"
-"Optional arguments start and end are interpreted as in slice notation.");
+"Optional arguments start and end are interpreted as in slice\n"
+"notation.");
#define UNICODE_COUNT_METHODDEF \
{"count", _PyCFunction_CAST(unicode_count), METH_FASTCALL, unicode_count__doc__},
@@ -202,8 +204,8 @@ PyDoc_STRVAR(unicode_encode__doc__,
" errors\n"
" The error handling scheme to use for encoding errors.\n"
" The default is \'strict\' meaning that encoding errors raise a\n"
-" UnicodeEncodeError. Other possible values are \'ignore\', \'replace\' and\n"
-" \'xmlcharrefreplace\' as well as any other name registered with\n"
+" UnicodeEncodeError. Other possible values are \'ignore\', \'replace\'\n"
+" and \'xmlcharrefreplace\' as well as any other name registered with\n"
" codecs.register_error that can handle UnicodeEncodeErrors.");
#define UNICODE_ENCODE_METHODDEF \
@@ -362,8 +364,8 @@ PyDoc_STRVAR(unicode_find__doc__,
"\n"
"Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n"
"\n"
-"Optional arguments start and end are interpreted as in slice notation.\n"
-"Return -1 on failure.");
+"Optional arguments start and end are interpreted as in slice\n"
+"notation. Return -1 on failure.");
#define UNICODE_FIND_METHODDEF \
{"find", _PyCFunction_CAST(unicode_find), METH_FASTCALL, unicode_find__doc__},
@@ -418,8 +420,8 @@ PyDoc_STRVAR(unicode_index__doc__,
"\n"
"Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].\n"
"\n"
-"Optional arguments start and end are interpreted as in slice notation.\n"
-"Raises ValueError when the substring is not found.");
+"Optional arguments start and end are interpreted as in slice\n"
+"notation. Raises ValueError when the substring is not found.");
#define UNICODE_INDEX_METHODDEF \
{"index", _PyCFunction_CAST(unicode_index), METH_FASTCALL, unicode_index__doc__},
@@ -495,8 +497,8 @@ PyDoc_STRVAR(unicode_islower__doc__,
"\n"
"Return True if the string is a lowercase string, False otherwise.\n"
"\n"
-"A string is lowercase if all cased characters in the string are lowercase and\n"
-"there is at least one cased character in the string.");
+"A string is lowercase if all cased characters in the string are\n"
+"lowercase and there is at least one cased character in the string.");
#define UNICODE_ISLOWER_METHODDEF \
{"islower", (PyCFunction)unicode_islower, METH_NOARGS, unicode_islower__doc__},
@@ -516,8 +518,8 @@ PyDoc_STRVAR(unicode_isupper__doc__,
"\n"
"Return True if the string is an uppercase string, False otherwise.\n"
"\n"
-"A string is uppercase if all cased characters in the string are uppercase and\n"
-"there is at least one cased character in the string.");
+"A string is uppercase if all cased characters in the string are\n"
+"uppercase and there is at least one cased character in the string.");
#define UNICODE_ISUPPER_METHODDEF \
{"isupper", (PyCFunction)unicode_isupper, METH_NOARGS, unicode_isupper__doc__},
@@ -558,8 +560,8 @@ PyDoc_STRVAR(unicode_isspace__doc__,
"\n"
"Return True if the string is a whitespace string, False otherwise.\n"
"\n"
-"A string is whitespace if all characters in the string are whitespace and there\n"
-"is at least one character in the string.");
+"A string is whitespace if all characters in the string are\n"
+"whitespace and there is at least one character in the string.");
#define UNICODE_ISSPACE_METHODDEF \
{"isspace", (PyCFunction)unicode_isspace, METH_NOARGS, unicode_isspace__doc__},
@@ -579,8 +581,8 @@ PyDoc_STRVAR(unicode_isalpha__doc__,
"\n"
"Return True if the string is an alphabetic string, False otherwise.\n"
"\n"
-"A string is alphabetic if all characters in the string are alphabetic and there\n"
-"is at least one character in the string.");
+"A string is alphabetic if all characters in the string are\n"
+"alphabetic and there is at least one character in the string.");
#define UNICODE_ISALPHA_METHODDEF \
{"isalpha", (PyCFunction)unicode_isalpha, METH_NOARGS, unicode_isalpha__doc__},
@@ -600,8 +602,8 @@ PyDoc_STRVAR(unicode_isalnum__doc__,
"\n"
"Return True if the string is an alpha-numeric string, False otherwise.\n"
"\n"
-"A string is alpha-numeric if all characters in the string are alpha-numeric and\n"
-"there is at least one character in the string.");
+"A string is alpha-numeric if all characters in the string are\n"
+"alpha-numeric and there is at least one character in the string.");
#define UNICODE_ISALNUM_METHODDEF \
{"isalnum", (PyCFunction)unicode_isalnum, METH_NOARGS, unicode_isalnum__doc__},
@@ -621,8 +623,8 @@ PyDoc_STRVAR(unicode_isdecimal__doc__,
"\n"
"Return True if the string is a decimal string, False otherwise.\n"
"\n"
-"A string is a decimal string if all characters in the string are decimal and\n"
-"there is at least one character in the string.");
+"A string is a decimal string if all characters in the string are\n"
+"decimal and there is at least one character in the string.");
#define UNICODE_ISDECIMAL_METHODDEF \
{"isdecimal", (PyCFunction)unicode_isdecimal, METH_NOARGS, unicode_isdecimal__doc__},
@@ -642,8 +644,8 @@ PyDoc_STRVAR(unicode_isdigit__doc__,
"\n"
"Return True if the string is a digit string, False otherwise.\n"
"\n"
-"A string is a digit string if all characters in the string are digits and there\n"
-"is at least one character in the string.");
+"A string is a digit string if all characters in the string are\n"
+"digits and there is at least one character in the string.");
#define UNICODE_ISDIGIT_METHODDEF \
{"isdigit", (PyCFunction)unicode_isdigit, METH_NOARGS, unicode_isdigit__doc__},
@@ -663,8 +665,8 @@ PyDoc_STRVAR(unicode_isnumeric__doc__,
"\n"
"Return True if the string is a numeric string, False otherwise.\n"
"\n"
-"A string is numeric if all characters in the string are numeric and there is at\n"
-"least one character in the string.");
+"A string is numeric if all characters in the string are numeric and\n"
+"there is at least one character in the string.");
#define UNICODE_ISNUMERIC_METHODDEF \
{"isnumeric", (PyCFunction)unicode_isnumeric, METH_NOARGS, unicode_isnumeric__doc__},
@@ -684,8 +686,8 @@ PyDoc_STRVAR(unicode_isidentifier__doc__,
"\n"
"Return True if the string is a valid Python identifier, False otherwise.\n"
"\n"
-"Call keyword.iskeyword(s) to test whether string s is a reserved identifier,\n"
-"such as \"def\" or \"class\".");
+"Call keyword.iskeyword(s) to test whether string s is a reserved\n"
+"identifier, such as \"def\" or \"class\".");
#define UNICODE_ISIDENTIFIER_METHODDEF \
{"isidentifier", (PyCFunction)unicode_isidentifier, METH_NOARGS, unicode_isidentifier__doc__},
@@ -725,8 +727,8 @@ PyDoc_STRVAR(unicode_join__doc__,
"\n"
"Concatenate any number of strings.\n"
"\n"
-"The string whose method is called is inserted in between each given string.\n"
-"The result is returned as a new string.\n"
+"The string whose method is called is inserted in between each given\n"
+"string. The result is returned as a new string.\n"
"\n"
"Example: \'.\'.join([\'ab\', \'pq\', \'rs\']) -> \'ab.pq.rs\'");
@@ -739,7 +741,8 @@ PyDoc_STRVAR(unicode_ljust__doc__,
"\n"
"Return a left-justified string of length width.\n"
"\n"
-"Padding is done using the specified fill character (default is a space).");
+"Padding is done using the specified fill character (default is\n"
+"a space).");
#define UNICODE_LJUST_METHODDEF \
{"ljust", _PyCFunction_CAST(unicode_ljust), METH_FASTCALL, unicode_ljust__doc__},
@@ -999,8 +1002,9 @@ PyDoc_STRVAR(unicode_removeprefix__doc__,
"\n"
"Return a str with the given prefix string removed if present.\n"
"\n"
-"If the string starts with the prefix string, return string[len(prefix):].\n"
-"Otherwise, return a copy of the original string.");
+"If the string starts with the prefix string, return\n"
+"string[len(prefix):]. Otherwise, return a copy of the original\n"
+"string.");
#define UNICODE_REMOVEPREFIX_METHODDEF \
{"removeprefix", (PyCFunction)unicode_removeprefix, METH_O, unicode_removeprefix__doc__},
@@ -1031,9 +1035,9 @@ PyDoc_STRVAR(unicode_removesuffix__doc__,
"\n"
"Return a str with the given suffix string removed if present.\n"
"\n"
-"If the string ends with the suffix string and that suffix is not empty,\n"
-"return string[:-len(suffix)]. Otherwise, return a copy of the original\n"
-"string.");
+"If the string ends with the suffix string and that suffix is not\n"
+"empty, return string[:-len(suffix)]. Otherwise, return a copy of\n"
+"the original string.");
#define UNICODE_REMOVESUFFIX_METHODDEF \
{"removesuffix", (PyCFunction)unicode_removesuffix, METH_O, unicode_removesuffix__doc__},
@@ -1064,8 +1068,8 @@ PyDoc_STRVAR(unicode_rfind__doc__,
"\n"
"Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n"
"\n"
-"Optional arguments start and end are interpreted as in slice notation.\n"
-"Return -1 on failure.");
+"Optional arguments start and end are interpreted as in slice\n"
+"notation. Return -1 on failure.");
#define UNICODE_RFIND_METHODDEF \
{"rfind", _PyCFunction_CAST(unicode_rfind), METH_FASTCALL, unicode_rfind__doc__},
@@ -1120,8 +1124,8 @@ PyDoc_STRVAR(unicode_rindex__doc__,
"\n"
"Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].\n"
"\n"
-"Optional arguments start and end are interpreted as in slice notation.\n"
-"Raises ValueError when the substring is not found.");
+"Optional arguments start and end are interpreted as in slice\n"
+"notation. Raises ValueError when the substring is not found.");
#define UNICODE_RINDEX_METHODDEF \
{"rindex", _PyCFunction_CAST(unicode_rindex), METH_FASTCALL, unicode_rindex__doc__},
@@ -1176,7 +1180,8 @@ PyDoc_STRVAR(unicode_rjust__doc__,
"\n"
"Return a right-justified string of length width.\n"
"\n"
-"Padding is done using the specified fill character (default is a space).");
+"Padding is done using the specified fill character (default is\n"
+"a space).");
#define UNICODE_RJUST_METHODDEF \
{"rjust", _PyCFunction_CAST(unicode_rjust), METH_FASTCALL, unicode_rjust__doc__},
@@ -1228,18 +1233,18 @@ PyDoc_STRVAR(unicode_split__doc__,
" sep\n"
" The separator used to split the string.\n"
"\n"
-" When set to None (the default value), will split on any whitespace\n"
-" character (including \\n \\r \\t \\f and spaces) and will discard\n"
-" empty strings from the result.\n"
+" When set to None (the default value), will split on any\n"
+" whitespace character (including \\n \\r \\t \\f and spaces) and\n"
+" will discard empty strings from the result.\n"
" maxsplit\n"
" Maximum number of splits.\n"
" -1 (the default value) means no limit.\n"
"\n"
"Splitting starts at the front of the string and works to the end.\n"
"\n"
-"Note, str.split() is mainly useful for data that has been intentionally\n"
-"delimited. With natural text that includes punctuation, consider using\n"
-"the regular expression module.");
+"Note, str.split() is mainly useful for data that has been\n"
+"intentionally delimited. With natural text that includes\n"
+"punctuation, consider using the regular expression module.");
#define UNICODE_SPLIT_METHODDEF \
{"split", _PyCFunction_CAST(unicode_split), METH_FASTCALL|METH_KEYWORDS, unicode_split__doc__},
@@ -1319,12 +1324,12 @@ PyDoc_STRVAR(unicode_partition__doc__,
"\n"
"Partition the string into three parts using the given separator.\n"
"\n"
-"This will search for the separator in the string. If the separator is found,\n"
-"returns a 3-tuple containing the part before the separator, the separator\n"
-"itself, and the part after it.\n"
+"This will search for the separator in the string. If the separator\n"
+"is found, returns a 3-tuple containing the part before the\n"
+"separator, the separator itself, and the part after it.\n"
"\n"
-"If the separator is not found, returns a 3-tuple containing the original string\n"
-"and two empty strings.");
+"If the separator is not found, returns a 3-tuple containing\n"
+"the original string and two empty strings.");
#define UNICODE_PARTITION_METHODDEF \
{"partition", (PyCFunction)unicode_partition, METH_O, unicode_partition__doc__},
@@ -1335,12 +1340,13 @@ PyDoc_STRVAR(unicode_rpartition__doc__,
"\n"
"Partition the string into three parts using the given separator.\n"
"\n"
-"This will search for the separator in the string, starting at the end. If\n"
-"the separator is found, returns a 3-tuple containing the part before the\n"
-"separator, the separator itself, and the part after it.\n"
+"This will search for the separator in the string, starting at the\n"
+"end. If the separator is found, returns a 3-tuple containing the\n"
+"part before the separator, the separator itself, and the part after\n"
+"it.\n"
"\n"
-"If the separator is not found, returns a 3-tuple containing two empty strings\n"
-"and the original string.");
+"If the separator is not found, returns a 3-tuple containing two\n"
+"empty strings and the original string.");
#define UNICODE_RPARTITION_METHODDEF \
{"rpartition", (PyCFunction)unicode_rpartition, METH_O, unicode_rpartition__doc__},
@@ -1354,9 +1360,9 @@ PyDoc_STRVAR(unicode_rsplit__doc__,
" sep\n"
" The separator used to split the string.\n"
"\n"
-" When set to None (the default value), will split on any whitespace\n"
-" character (including \\n \\r \\t \\f and spaces) and will discard\n"
-" empty strings from the result.\n"
+" When set to None (the default value), will split on any\n"
+" whitespace character (including \\n \\r \\t \\f and spaces) and\n"
+" will discard empty strings from the result.\n"
" maxsplit\n"
" Maximum number of splits.\n"
" -1 (the default value) means no limit.\n"
@@ -1441,8 +1447,8 @@ PyDoc_STRVAR(unicode_splitlines__doc__,
"\n"
"Return a list of the lines in the string, breaking at line boundaries.\n"
"\n"
-"Line breaks are not included in the resulting list unless keepends is given and\n"
-"true.");
+"Line breaks are not included in the resulting list unless keepends\n"
+"is given and true.");
#define UNICODE_SPLITLINES_METHODDEF \
{"splitlines", _PyCFunction_CAST(unicode_splitlines), METH_FASTCALL|METH_KEYWORDS, unicode_splitlines__doc__},
@@ -1525,13 +1531,14 @@ PyDoc_STRVAR(unicode_maketrans__doc__,
"\n"
"Return a translation table usable for str.translate().\n"
"\n"
-"If there is only one argument, it must be a dictionary mapping Unicode\n"
-"ordinals (integers) or characters to Unicode ordinals, strings or None.\n"
-"Character keys will be then converted to ordinals.\n"
-"If there are two arguments, they must be strings of equal length, and\n"
-"in the resulting dictionary, each character in x will be mapped to the\n"
-"character at the same position in y. If there is a third argument, it\n"
-"must be a string, whose characters will be mapped to None in the result.");
+"If there is only one argument, it must be a dictionary mapping\n"
+"Unicode ordinals (integers) or characters to Unicode ordinals,\n"
+"strings or None. Character keys will be then converted to ordinals.\n"
+"If there are two arguments, they must be strings of equal length,\n"
+"and in the resulting dictionary, each character in x will be mapped\n"
+"to the character at the same position in y. If there is a third\n"
+"argument, it must be a string, whose characters will be mapped to\n"
+"None in the result.");
#define UNICODE_MAKETRANS_METHODDEF \
{"maketrans", _PyCFunction_CAST(unicode_maketrans), METH_FASTCALL|METH_STATIC, unicode_maketrans__doc__},
@@ -1581,12 +1588,13 @@ PyDoc_STRVAR(unicode_translate__doc__,
"Replace each character in the string using the given translation table.\n"
"\n"
" table\n"
-" Translation table, which must be a mapping of Unicode ordinals to\n"
-" Unicode ordinals, strings, or None.\n"
+" Translation table, which must be a mapping of Unicode ordinals\n"
+" to Unicode ordinals, strings, or None.\n"
"\n"
-"The table must implement lookup/indexing via __getitem__, for instance a\n"
-"dictionary or list. If this operation raises LookupError, the character is\n"
-"left untouched. Characters mapped to None are deleted.");
+"The table must implement lookup/indexing via __getitem__, for\n"
+"instance a dictionary or list. If this operation raises\n"
+"LookupError, the character is left untouched. Characters mapped to\n"
+"None are deleted.");
#define UNICODE_TRANSLATE_METHODDEF \
{"translate", (PyCFunction)unicode_translate, METH_O, unicode_translate__doc__},
@@ -1887,4 +1895,4 @@ skip_optional_pos:
exit:
return return_value;
}
-/*[clinic end generated code: output=b7d75c4898e8198d input=a9049054013a1b77]*/
+/*[clinic end generated code: output=88f8309f41babf81 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Objects/codeobject.c b/contrib/tools/python3/Objects/codeobject.c
index 8a0b1027b94..1e4e96abbca 100644
--- a/contrib/tools/python3/Objects/codeobject.c
+++ b/contrib/tools/python3/Objects/codeobject.c
@@ -2355,12 +2355,13 @@ code._varname_from_oparg
(internal-only) Return the local variable name for the given oparg.
-WARNING: this method is for internal use only and may change or go away.
+WARNING: this method is for internal use only and may change or go
+away.
[clinic start generated code]*/
static PyObject *
code__varname_from_oparg_impl(PyCodeObject *self, int oparg)
-/*[clinic end generated code: output=1fd1130413184206 input=c5fa3ee9bac7d4ca]*/
+/*[clinic end generated code: output=1fd1130413184206 input=6ba7d6df0d566463]*/
{
PyObject *name = PyTuple_GetItem(self->co_localsplusnames, oparg);
if (name == NULL) {
diff --git a/contrib/tools/python3/Objects/descrobject.c b/contrib/tools/python3/Objects/descrobject.c
index 0560d066851..7d3f0e40567 100644
--- a/contrib/tools/python3/Objects/descrobject.c
+++ b/contrib/tools/python3/Objects/descrobject.c
@@ -1177,7 +1177,7 @@ static PyMethodDef mappingproxy_methods[] = {
{"copy", mappingproxy_copy, METH_NOARGS,
PyDoc_STR("D.copy() -> a shallow copy of D")},
{"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
- PyDoc_STR("See PEP 585")},
+ PyDoc_STR("mappingproxy objects are generic over two types, signifying (respectively) the types of their keys and values")},
{"__reversed__", mappingproxy_reversed, METH_NOARGS,
PyDoc_STR("D.__reversed__() -> reverse iterator")},
{0}
diff --git a/contrib/tools/python3/Objects/dictobject.c b/contrib/tools/python3/Objects/dictobject.c
index 843ece535be..12dd7bbdeec 100644
--- a/contrib/tools/python3/Objects/dictobject.c
+++ b/contrib/tools/python3/Objects/dictobject.c
@@ -4695,7 +4695,8 @@ static PyMethodDef mapp_methods[] = {
DICT_CLEAR_METHODDEF
DICT_COPY_METHODDEF
DICT___REVERSED___METHODDEF
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("dicts are generic over two types, signifying (respectively) the types of their keys and values")},
{NULL, NULL} /* sentinel */
};
diff --git a/contrib/tools/python3/Objects/enumobject.c b/contrib/tools/python3/Objects/enumobject.c
index bffe7172a39..5f21bfa326f 100644
--- a/contrib/tools/python3/Objects/enumobject.c
+++ b/contrib/tools/python3/Objects/enumobject.c
@@ -283,7 +283,7 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
static PyMethodDef enum_methods[] = {
{"__reduce__", (PyCFunction)enum_reduce, METH_NOARGS, reduce_doc},
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS, PyDoc_STR("'enumerate' objects are generic over the type of their values")},
{NULL, NULL} /* sentinel */
};
diff --git a/contrib/tools/python3/Objects/exceptions.c b/contrib/tools/python3/Objects/exceptions.c
index 1eb2a3bbe24..81242e4405d 100644
--- a/contrib/tools/python3/Objects/exceptions.c
+++ b/contrib/tools/python3/Objects/exceptions.c
@@ -1541,7 +1541,8 @@ static PyMemberDef BaseExceptionGroup_members[] = {
static PyMethodDef BaseExceptionGroup_methods[] = {
{"__class_getitem__", (PyCFunction)Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS,
+ PyDoc_STR("Exception groups are generic over the type of their contained exceptions")},
{"derive", (PyCFunction)BaseExceptionGroup_derive, METH_O},
{"split", (PyCFunction)BaseExceptionGroup_split, METH_O},
{"subgroup", (PyCFunction)BaseExceptionGroup_subgroup, METH_O},
@@ -3933,4 +3934,3 @@ _PyException_AddNote(PyObject *exc, PyObject *note)
Py_XDECREF(r);
return res;
}
-
diff --git a/contrib/tools/python3/Objects/floatobject.c b/contrib/tools/python3/Objects/floatobject.c
index 986edd597d6..21c47a4bbf8 100644
--- a/contrib/tools/python3/Objects/floatobject.c
+++ b/contrib/tools/python3/Objects/floatobject.c
@@ -1718,14 +1718,14 @@ You probably don't want to use this function.
It exists mainly to be used in Python's test suite.
-This function returns whichever of 'unknown', 'IEEE, big-endian' or 'IEEE,
-little-endian' best describes the format of floating-point numbers used by the
-C type named by typestr.
+This function returns whichever of 'unknown', 'IEEE, big-endian' or
+'IEEE, little-endian' best describes the format of floating-point
+numbers used by the C type named by typestr.
[clinic start generated code]*/
static PyObject *
float___getformat___impl(PyTypeObject *type, const char *typestr)
-/*[clinic end generated code: output=2bfb987228cc9628 input=90d5e246409a246e]*/
+/*[clinic end generated code: output=2bfb987228cc9628 input=933cc4bdcf8fa8d3]*/
{
float_format_type r;
diff --git a/contrib/tools/python3/Objects/genericaliasobject.c b/contrib/tools/python3/Objects/genericaliasobject.c
index 8e59b3884cf..bbb4f77d4a9 100644
--- a/contrib/tools/python3/Objects/genericaliasobject.c
+++ b/contrib/tools/python3/Objects/genericaliasobject.c
@@ -278,7 +278,6 @@ _Py_make_parameters(PyObject *args)
len += needed;
if (_PyTuple_Resize(&parameters, len) < 0) {
Py_DECREF(subparams);
- Py_DECREF(parameters);
return NULL;
}
}
@@ -444,6 +443,9 @@ _Py_subs_parameters(PyObject *self, PyObject *args, PyObject *parameters, PyObje
self);
}
item = _unpack_args(item);
+ if (item == NULL) {
+ return NULL;
+ }
for (Py_ssize_t i = 0; i < nparams; i++) {
PyObject *param = PyTuple_GET_ITEM(parameters, i);
PyObject *prepare, *tmp;
@@ -636,7 +638,7 @@ ga_vectorcall(PyObject *self, PyObject *const *args,
size_t nargsf, PyObject *kwnames)
{
gaobject *alias = (gaobject *) self;
- PyObject *obj = PyVectorcall_Function(alias->origin)(alias->origin, args, nargsf, kwnames);
+ PyObject *obj = PyObject_Vectorcall(alias->origin, args, nargsf, kwnames);
return set_orig_class(obj, self);
}
diff --git a/contrib/tools/python3/Objects/genobject.c b/contrib/tools/python3/Objects/genobject.c
index b19ff252ddb..2d9f89dbc34 100644
--- a/contrib/tools/python3/Objects/genobject.c
+++ b/contrib/tools/python3/Objects/genobject.c
@@ -797,7 +797,8 @@ static PyMethodDef gen_methods[] = {
{"throw",_PyCFunction_CAST(gen_throw), METH_FASTCALL, throw_doc},
{"close",(PyCFunction)gen_close, METH_NOARGS, close_doc},
{"__sizeof__", (PyCFunction)gen_sizeof, METH_NOARGS, sizeof__doc__},
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("generators are generic over the types of their yield, send, and return values")},
{NULL, NULL} /* Sentinel */
};
@@ -1150,7 +1151,8 @@ static PyMethodDef coro_methods[] = {
{"throw",_PyCFunction_CAST(gen_throw), METH_FASTCALL, coro_throw_doc},
{"close",(PyCFunction)gen_close, METH_NOARGS, coro_close_doc},
{"__sizeof__", (PyCFunction)gen_sizeof, METH_NOARGS, sizeof__doc__},
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("coroutines are generic over the types of their yield, send, and return values")},
{NULL, NULL} /* Sentinel */
};
@@ -1564,7 +1566,7 @@ static PyMethodDef async_gen_methods[] = {
{"aclose", (PyCFunction)async_gen_aclose, METH_NOARGS, async_aclose_doc},
{"__sizeof__", (PyCFunction)gen_sizeof, METH_NOARGS, sizeof__doc__},
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS, PyDoc_STR("async generators are generic over the types of their yield and send values")},
{NULL, NULL} /* Sentinel */
};
diff --git a/contrib/tools/python3/Objects/listobject.c b/contrib/tools/python3/Objects/listobject.c
index f5acc5c1bef..591ea3a956e 100644
--- a/contrib/tools/python3/Objects/listobject.c
+++ b/contrib/tools/python3/Objects/listobject.c
@@ -2875,18 +2875,18 @@ list.sort
Sort the list in ascending order and return None.
-The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
-order of two equal elements is maintained).
+The sort is in-place (i.e. the list itself is modified) and stable
+(i.e. the order of two equal elements is maintained).
-If a key function is given, apply it once to each list item and sort them,
-ascending or descending, according to their function values.
+If a key function is given, apply it once to each list item and sort
+them, ascending or descending, according to their function values.
The reverse flag can be set to sort in descending order.
[clinic start generated code]*/
static PyObject *
list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse)
-/*[clinic end generated code: output=57b9f9c5e23fbe42 input=667bf25d0e3a3676]*/
+/*[clinic end generated code: output=57b9f9c5e23fbe42 input=c145526281e1fb9f]*/
{
MergeState ms;
Py_ssize_t nremaining;
@@ -3532,7 +3532,8 @@ static PyMethodDef list_methods[] = {
LIST_COUNT_METHODDEF
LIST_REVERSE_METHODDEF
LIST_SORT_METHODDEF
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("lists are generic over the type of their contents")},
{NULL, NULL} /* sentinel */
};
diff --git a/contrib/tools/python3/Objects/longobject.c b/contrib/tools/python3/Objects/longobject.c
index 4942c57f1ac..63de665c9fb 100644
--- a/contrib/tools/python3/Objects/longobject.c
+++ b/contrib/tools/python3/Objects/longobject.c
@@ -6321,20 +6321,21 @@ int_as_integer_ratio_impl(PyObject *self)
int.to_bytes
length: Py_ssize_t = 1
- Length of bytes object to use. An OverflowError is raised if the
- integer is not representable with the given number of bytes. Default
- is length 1.
+ Length of bytes object to use. An OverflowError is raised if
+ the integer is not representable with the given number of bytes.
+ Default is length 1.
byteorder: unicode(c_default="NULL") = "big"
- The byte order used to represent the integer. If byteorder is 'big',
- the most significant byte is at the beginning of the byte array. If
- byteorder is 'little', the most significant byte is at the end of the
- byte array. To request the native byte order of the host system, use
- sys.byteorder as the byte order value. Default is to use 'big'.
+ The byte order used to represent the integer. If byteorder is
+ 'big', the most significant byte is at the beginning of the byte
+ array. If byteorder is 'little', the most significant byte is at
+ the end of the byte array. To request the native byte order of
+ the host system, use sys.byteorder as the byte order value.
+ Default is to use 'big'.
*
signed as is_signed: bool = False
- Determines whether two's complement is used to represent the integer.
- If signed is False and a negative integer is given, an OverflowError
- is raised.
+ Determines whether two's complement is used to represent the
+ integer. If signed is False and a negative integer is given,
+ an OverflowError is raised.
Return an array of bytes representing an integer.
[clinic start generated code]*/
@@ -6342,7 +6343,7 @@ Return an array of bytes representing an integer.
static PyObject *
int_to_bytes_impl(PyObject *self, Py_ssize_t length, PyObject *byteorder,
int is_signed)
-/*[clinic end generated code: output=89c801df114050a3 input=a0103d0e9ad85c2b]*/
+/*[clinic end generated code: output=89c801df114050a3 input=661d7e615a4f132d]*/
{
int little_endian;
PyObject *bytes;
@@ -6385,18 +6386,20 @@ int.from_bytes
bytes as bytes_obj: object
Holds the array of bytes to convert. The argument must either
- support the buffer protocol or be an iterable object producing bytes.
- Bytes and bytearray are examples of built-in objects that support the
- buffer protocol.
+ support the buffer protocol or be an iterable object producing
+ bytes. Bytes and bytearray are examples of built-in objects that
+ support the buffer protocol.
byteorder: unicode(c_default="NULL") = "big"
- The byte order used to represent the integer. If byteorder is 'big',
- the most significant byte is at the beginning of the byte array. If
- byteorder is 'little', the most significant byte is at the end of the
- byte array. To request the native byte order of the host system, use
- sys.byteorder as the byte order value. Default is to use 'big'.
+ The byte order used to represent the integer. If byteorder is
+ 'big', the most significant byte is at the beginning of the byte
+ array. If byteorder is 'little', the most significant byte is at
+ the end of the byte array. To request the native byte order of
+ the host system, use sys.byteorder as the byte order value.
+ Default is to use 'big'.
*
signed as is_signed: bool = False
- Indicates whether two's complement is used to represent the integer.
+ Indicates whether two's complement is used to represent the
+ integer.
Return the integer represented by the given array of bytes.
[clinic start generated code]*/
@@ -6404,7 +6407,7 @@ Return the integer represented by the given array of bytes.
static PyObject *
int_from_bytes_impl(PyTypeObject *type, PyObject *bytes_obj,
PyObject *byteorder, int is_signed)
-/*[clinic end generated code: output=efc5d68e31f9314f input=2ff527997fe7b0c5]*/
+/*[clinic end generated code: output=efc5d68e31f9314f input=95801e50b942e164]*/
{
int little_endian;
PyObject *long_obj, *bytes;
@@ -6533,7 +6536,8 @@ If x is not a number or if base is given, then x must be a string,\n\
bytes, or bytearray instance representing an integer literal in the\n\
given base. The literal can be preceded by '+' or '-' and be surrounded\n\
by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\n\
-Base 0 means to interpret the base from the string as an integer literal.\n\
+Base 0 means to interpret the base from the string as an integer\n\
+iteral.\n\
>>> int('0b100', base=0)\n\
4");
diff --git a/contrib/tools/python3/Objects/memoryobject.c b/contrib/tools/python3/Objects/memoryobject.c
index 535e0b3c1dc..d7586a2a458 100644
--- a/contrib/tools/python3/Objects/memoryobject.c
+++ b/contrib/tools/python3/Objects/memoryobject.c
@@ -1653,6 +1653,10 @@ fix_error_int(const char *fmt)
return -1;
}
+// UNPACK_TO_BOOL: Return 0 if PTR represents "false", and 1 otherwise.
+static const _Bool bool_false = 0;
+#define UNPACK_TO_BOOL(PTR) (memcmp((PTR), &bool_false, sizeof(_Bool)) != 0)
+
/* Accept integer objects or objects with an __index__() method. */
static long
pylong_as_ld(PyObject *item)
@@ -1788,7 +1792,7 @@ unpack_single(PyMemoryViewObject *self, const char *ptr, const char *fmt)
case 'l': UNPACK_SINGLE(ld, ptr, long); goto convert_ld;
/* boolean */
- case '?': UNPACK_SINGLE(ld, ptr, _Bool); goto convert_bool;
+ case '?': ld = UNPACK_TO_BOOL(ptr); goto convert_bool;
/* unsigned integers */
case 'H': UNPACK_SINGLE(lu, ptr, unsigned short); goto convert_lu;
@@ -2252,16 +2256,17 @@ memoryview.tobytes
Return the data in the buffer as a byte string.
-Order can be {'C', 'F', 'A'}. When order is 'C' or 'F', the data of the
-original array is converted to C or Fortran order. For contiguous views,
-'A' returns an exact copy of the physical memory. In particular, in-memory
-Fortran order is preserved. For non-contiguous views, the data is converted
-to C first. order=None is the same as order='C'.
+Order can be {'C', 'F', 'A'}. When order is 'C' or 'F', the data of
+the original array is converted to C or Fortran order. For
+contiguous views, 'A' returns an exact copy of the physical memory.
+In particular, in-memory Fortran order is preserved. For
+non-contiguous views, the data is converted to C first. order=None
+is the same as order='C'.
[clinic start generated code]*/
static PyObject *
memoryview_tobytes_impl(PyMemoryViewObject *self, const char *order)
-/*[clinic end generated code: output=1288b62560a32a23 input=0efa3ddaeda573a8]*/
+/*[clinic end generated code: output=1288b62560a32a23 input=119c70aa91791dc8]*/
{
Py_buffer *src = VIEW_ADDR(self);
char ord = 'C';
@@ -2301,8 +2306,8 @@ memoryview.hex
sep: object = NULL
An optional single character or byte to separate hex bytes.
bytes_per_sep: int = 1
- How many bytes between separators. Positive values count from the
- right, negative values count from the left.
+ How many bytes between separators. Positive values count from
+ the right, negative values count from the left.
Return the data in the buffer as a str of hexadecimal numbers.
@@ -2321,7 +2326,7 @@ Example:
static PyObject *
memoryview_hex_impl(PyMemoryViewObject *self, PyObject *sep,
int bytes_per_sep)
-/*[clinic end generated code: output=430ca760f94f3ca7 input=539f6a3a5fb56946]*/
+/*[clinic end generated code: output=430ca760f94f3ca7 input=94c2495f886c786b]*/
{
Py_buffer *src = VIEW_ADDR(self);
PyObject *bytes;
@@ -2835,7 +2840,7 @@ unpack_cmp(const char *p, const char *q, char fmt,
case 'l': CMP_SINGLE(p, q, long); return equal;
/* boolean */
- case '?': CMP_SINGLE(p, q, _Bool); return equal;
+ case '?': return UNPACK_TO_BOOL(p) == UNPACK_TO_BOOL(q);
/* unsigned integers */
case 'H': CMP_SINGLE(p, q, unsigned short); return equal;
diff --git a/contrib/tools/python3/Objects/odictobject.c b/contrib/tools/python3/Objects/odictobject.c
index ca5f7c8d3a8..70fd9f5a0f6 100644
--- a/contrib/tools/python3/Objects/odictobject.c
+++ b/contrib/tools/python3/Objects/odictobject.c
@@ -1128,12 +1128,13 @@ OrderedDict.popitem
Remove and return a (key, value) pair from the dictionary.
-Pairs are returned in LIFO order if last is true or FIFO order if false.
+Pairs are returned in LIFO order if last is true or FIFO order if
+false.
[clinic start generated code]*/
static PyObject *
OrderedDict_popitem_impl(PyODictObject *self, int last)
-/*[clinic end generated code: output=98e7d986690d49eb input=d992ac5ee8305e1a]*/
+/*[clinic end generated code: output=98e7d986690d49eb input=9cc253963e351588]*/
{
PyObject *key, *value, *item = NULL;
_ODictNode *node;
diff --git a/contrib/tools/python3/Objects/setobject.c b/contrib/tools/python3/Objects/setobject.c
index 891987e3519..0743870cec8 100644
--- a/contrib/tools/python3/Objects/setobject.c
+++ b/contrib/tools/python3/Objects/setobject.c
@@ -2416,7 +2416,8 @@ static PyMethodDef set_methods[] = {
SET_SYMMETRIC_DIFFERENCE_UPDATE_METHODDEF
SET_UNION_METHODDEF
SET_UPDATE_METHODDEF
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("sets are generic over the type of their elements")},
{NULL, NULL} /* sentinel */
};
@@ -2519,7 +2520,8 @@ static PyMethodDef frozenset_methods[] = {
SET___SIZEOF___METHODDEF
SET_SYMMETRIC_DIFFERENCE_METHODDEF
SET_UNION_METHODDEF
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS,
+ PyDoc_STR("frozensets are generic over the type of their elements")},
{NULL, NULL} /* sentinel */
};
diff --git a/contrib/tools/python3/Objects/sliceobject.c b/contrib/tools/python3/Objects/sliceobject.c
index 245bea98d58..5b034597275 100644
--- a/contrib/tools/python3/Objects/sliceobject.c
+++ b/contrib/tools/python3/Objects/sliceobject.c
@@ -360,7 +360,9 @@ PyDoc_STRVAR(slice_doc,
"slice(stop)\n\
slice(start, stop[, step])\n\
\n\
-Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).");
+Create a slice object.\n\
+\n\
+This is used for extended slicing (e.g. a[0:10:2]).");
static void
slice_dealloc(PySliceObject *r)
diff --git a/contrib/tools/python3/Objects/tupleobject.c b/contrib/tools/python3/Objects/tupleobject.c
index 818814b663d..42c94c8b1e0 100644
--- a/contrib/tools/python3/Objects/tupleobject.c
+++ b/contrib/tools/python3/Objects/tupleobject.c
@@ -827,11 +827,17 @@ tuple___getnewargs___impl(PyTupleObject *self)
return Py_BuildValue("(N)", tupleslice(self, 0, Py_SIZE(self)));
}
+
+PyDoc_STRVAR(tuple_class_getitem_doc,
+"Tuples are generic over the types of their contents.\n\n\
+For example, use ``tuple[int, str]`` for a pair whose first element is an int and second element is a string.\n\n\
+Tuples also support the form ``tuple[T, ...]`` to indicate an arbitrary length tuple of elements of type T.");
+
static PyMethodDef tuple_methods[] = {
TUPLE___GETNEWARGS___METHODDEF
TUPLE_INDEX_METHODDEF
TUPLE_COUNT_METHODDEF
- {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, tuple_class_getitem_doc},
{NULL, NULL} /* sentinel */
};
diff --git a/contrib/tools/python3/Objects/typeobject.c b/contrib/tools/python3/Objects/typeobject.c
index 098f0a34c6e..cb62cd5fde0 100644
--- a/contrib/tools/python3/Objects/typeobject.c
+++ b/contrib/tools/python3/Objects/typeobject.c
@@ -5409,6 +5409,15 @@ void
_PyType_SetFlagsRecursive(PyTypeObject *self, unsigned long mask, unsigned long flags)
{
BEGIN_TYPE_LOCK();
+ /* Ideally, changing flags and invalidating the old version tag would
+ happen in one step. For this backport, keep it simple and invalidate
+ first while holding TYPE_LOCK. Immutable types are skipped because
+ set_flags_recursive() does not modify them. */
+ if (!PyType_HasFeature(self, Py_TPFLAGS_IMMUTABLETYPE) &&
+ (self->tp_flags & mask) != flags)
+ {
+ type_modified_unlocked(self);
+ }
set_flags_recursive(self, mask, flags);
END_TYPE_LOCK();
}
@@ -11499,7 +11508,8 @@ PyDoc_STRVAR(super_doc,
"super() -> same as super(__class__, <first argument>)\n"
"super(type) -> unbound super object\n"
"super(type, obj) -> bound super object; requires isinstance(obj, type)\n"
-"super(type, type2) -> bound super object; requires issubclass(type2, type)\n"
+"super(type, type2) -> bound super object; requires\n"
+" issubclass(type2, type)\n"
"Typical use to call a cooperative superclass method:\n"
"class C(B):\n"
" def meth(self, arg):\n"
diff --git a/contrib/tools/python3/Objects/unicodeobject.c b/contrib/tools/python3/Objects/unicodeobject.c
index d6320dc192f..5e2900d52b3 100644
--- a/contrib/tools/python3/Objects/unicodeobject.c
+++ b/contrib/tools/python3/Objects/unicodeobject.c
@@ -10648,13 +10648,13 @@ str.title as unicode_title
Return a version of the string where each word is titlecased.
-More specifically, words start with uppercased characters and all remaining
-cased characters have lower case.
+More specifically, words start with uppercased characters and all
+remaining cased characters have lower case.
[clinic start generated code]*/
static PyObject *
unicode_title_impl(PyObject *self)
-/*[clinic end generated code: output=c75ae03809574902 input=fa945d669b26e683]*/
+/*[clinic end generated code: output=c75ae03809574902 input=2a07e2c7df94627a]*/
{
return case_operation(self, do_title);
}
@@ -10664,13 +10664,13 @@ str.capitalize as unicode_capitalize
Return a capitalized version of the string.
-More specifically, make the first character have upper case and the rest lower
-case.
+More specifically, make the first character have upper case and the
+rest lower case.
[clinic start generated code]*/
static PyObject *
unicode_capitalize_impl(PyObject *self)
-/*[clinic end generated code: output=e49a4c333cdb7667 input=f4cbf1016938da6d]*/
+/*[clinic end generated code: output=e49a4c333cdb7667 input=e50e50ed45a654cf]*/
{
if (PyUnicode_GET_LENGTH(self) == 0)
return unicode_result_unchanged(self);
@@ -10724,12 +10724,13 @@ str.center as unicode_center
Return a centered string of length width.
-Padding is done using the specified fill character (default is a space).
+Padding is done using the specified fill character (default is
+a space).
[clinic start generated code]*/
static PyObject *
unicode_center_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar)
-/*[clinic end generated code: output=420c8859effc7c0c input=b42b247eb26e6519]*/
+/*[clinic end generated code: output=420c8859effc7c0c input=df91017dfd186a78]*/
{
Py_ssize_t marg, left;
@@ -11337,13 +11338,14 @@ str.count as unicode_count -> Py_ssize_t
Return the number of non-overlapping occurrences of substring sub in string S[start:end].
-Optional arguments start and end are interpreted as in slice notation.
+Optional arguments start and end are interpreted as in slice
+notation.
[clinic start generated code]*/
static Py_ssize_t
unicode_count_impl(PyObject *str, PyObject *substr, Py_ssize_t start,
Py_ssize_t end)
-/*[clinic end generated code: output=8fcc3aef0b18edbf input=6f168ffd94be8785]*/
+/*[clinic end generated code: output=8fcc3aef0b18edbf input=0db5f2367599b50d]*/
{
assert(PyUnicode_Check(str));
assert(PyUnicode_Check(substr));
@@ -11416,8 +11418,8 @@ str.encode as unicode_encode
errors: str(c_default="NULL") = 'strict'
The error handling scheme to use for encoding errors.
The default is 'strict' meaning that encoding errors raise a
- UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
- 'xmlcharrefreplace' as well as any other name registered with
+ UnicodeEncodeError. Other possible values are 'ignore', 'replace'
+ and 'xmlcharrefreplace' as well as any other name registered with
codecs.register_error that can handle UnicodeEncodeErrors.
Encode the string using the codec registered for encoding.
@@ -11425,7 +11427,7 @@ Encode the string using the codec registered for encoding.
static PyObject *
unicode_encode_impl(PyObject *self, const char *encoding, const char *errors)
-/*[clinic end generated code: output=bf78b6e2a9470e3c input=f0a9eb293d08fe02]*/
+/*[clinic end generated code: output=bf78b6e2a9470e3c input=b85a9645cb33b729]*/
{
return PyUnicode_AsEncodedString(self, encoding, errors);
}
@@ -11521,14 +11523,14 @@ str.find as unicode_find = str.count
Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].
-Optional arguments start and end are interpreted as in slice notation.
-Return -1 on failure.
+Optional arguments start and end are interpreted as in slice
+notation. Return -1 on failure.
[clinic start generated code]*/
static Py_ssize_t
unicode_find_impl(PyObject *str, PyObject *substr, Py_ssize_t start,
Py_ssize_t end)
-/*[clinic end generated code: output=51dbe6255712e278 input=4a89d2d68ef57256]*/
+/*[clinic end generated code: output=51dbe6255712e278 input=6be5f4af6fc545d8]*/
{
Py_ssize_t result = any_find_slice(str, substr, start, end, 1);
if (result < 0) {
@@ -11584,14 +11586,14 @@ str.index as unicode_index = str.count
Return the lowest index in S where substring sub is found, such that sub is contained within S[start:end].
-Optional arguments start and end are interpreted as in slice notation.
-Raises ValueError when the substring is not found.
+Optional arguments start and end are interpreted as in slice
+notation. Raises ValueError when the substring is not found.
[clinic start generated code]*/
static Py_ssize_t
unicode_index_impl(PyObject *str, PyObject *substr, Py_ssize_t start,
Py_ssize_t end)
-/*[clinic end generated code: output=77558288837cdf40 input=d986aeac0be14a1c]*/
+/*[clinic end generated code: output=77558288837cdf40 input=39f29462607c38cf]*/
{
Py_ssize_t result = any_find_slice(str, substr, start, end, 1);
if (result == -1) {
@@ -11624,13 +11626,13 @@ str.islower as unicode_islower
Return True if the string is a lowercase string, False otherwise.
-A string is lowercase if all cased characters in the string are lowercase and
-there is at least one cased character in the string.
+A string is lowercase if all cased characters in the string are
+lowercase and there is at least one cased character in the string.
[clinic start generated code]*/
static PyObject *
unicode_islower_impl(PyObject *self)
-/*[clinic end generated code: output=dbd41995bd005b81 input=acec65ac6821ae47]*/
+/*[clinic end generated code: output=dbd41995bd005b81 input=1879b48dfc628366]*/
{
Py_ssize_t i, length;
int kind;
@@ -11667,13 +11669,13 @@ str.isupper as unicode_isupper
Return True if the string is an uppercase string, False otherwise.
-A string is uppercase if all cased characters in the string are uppercase and
-there is at least one cased character in the string.
+A string is uppercase if all cased characters in the string are
+uppercase and there is at least one cased character in the string.
[clinic start generated code]*/
static PyObject *
unicode_isupper_impl(PyObject *self)
-/*[clinic end generated code: output=049209c8e7f15f59 input=e9b1feda5d17f2d3]*/
+/*[clinic end generated code: output=049209c8e7f15f59 input=77d29904aef0e3a0]*/
{
Py_ssize_t i, length;
int kind;
@@ -11766,13 +11768,13 @@ str.isspace as unicode_isspace
Return True if the string is a whitespace string, False otherwise.
-A string is whitespace if all characters in the string are whitespace and there
-is at least one character in the string.
+A string is whitespace if all characters in the string are
+whitespace and there is at least one character in the string.
[clinic start generated code]*/
static PyObject *
unicode_isspace_impl(PyObject *self)
-/*[clinic end generated code: output=163a63bfa08ac2b9 input=fe462cb74f8437d8]*/
+/*[clinic end generated code: output=163a63bfa08ac2b9 input=29e09560fc23fbeb]*/
{
Py_ssize_t i, length;
int kind;
@@ -11804,13 +11806,13 @@ str.isalpha as unicode_isalpha
Return True if the string is an alphabetic string, False otherwise.
-A string is alphabetic if all characters in the string are alphabetic and there
-is at least one character in the string.
+A string is alphabetic if all characters in the string are
+alphabetic and there is at least one character in the string.
[clinic start generated code]*/
static PyObject *
unicode_isalpha_impl(PyObject *self)
-/*[clinic end generated code: output=cc81b9ac3883ec4f input=d0fd18a96cbca5eb]*/
+/*[clinic end generated code: output=cc81b9ac3883ec4f input=9906a07f3e04892e]*/
{
Py_ssize_t i, length;
int kind;
@@ -11841,13 +11843,13 @@ str.isalnum as unicode_isalnum
Return True if the string is an alpha-numeric string, False otherwise.
-A string is alpha-numeric if all characters in the string are alpha-numeric and
-there is at least one character in the string.
+A string is alpha-numeric if all characters in the string are
+alpha-numeric and there is at least one character in the string.
[clinic start generated code]*/
static PyObject *
unicode_isalnum_impl(PyObject *self)
-/*[clinic end generated code: output=a5a23490ffc3660c input=5c6579bf2e04758c]*/
+/*[clinic end generated code: output=a5a23490ffc3660c input=fd90c03fd83af0c7]*/
{
int kind;
const void *data;
@@ -11880,13 +11882,13 @@ str.isdecimal as unicode_isdecimal
Return True if the string is a decimal string, False otherwise.
-A string is a decimal string if all characters in the string are decimal and
-there is at least one character in the string.
+A string is a decimal string if all characters in the string are
+decimal and there is at least one character in the string.
[clinic start generated code]*/
static PyObject *
unicode_isdecimal_impl(PyObject *self)
-/*[clinic end generated code: output=fb2dcdb62d3fc548 input=336bc97ab4c8268f]*/
+/*[clinic end generated code: output=fb2dcdb62d3fc548 input=63b0453c48cad0af]*/
{
Py_ssize_t i, length;
int kind;
@@ -11917,13 +11919,13 @@ str.isdigit as unicode_isdigit
Return True if the string is a digit string, False otherwise.
-A string is a digit string if all characters in the string are digits and there
-is at least one character in the string.
+A string is a digit string if all characters in the string are
+digits and there is at least one character in the string.
[clinic start generated code]*/
static PyObject *
unicode_isdigit_impl(PyObject *self)
-/*[clinic end generated code: output=10a6985311da6858 input=901116c31deeea4c]*/
+/*[clinic end generated code: output=10a6985311da6858 input=353b03747b062e4b]*/
{
Py_ssize_t i, length;
int kind;
@@ -11955,13 +11957,13 @@ str.isnumeric as unicode_isnumeric
Return True if the string is a numeric string, False otherwise.
-A string is numeric if all characters in the string are numeric and there is at
-least one character in the string.
+A string is numeric if all characters in the string are numeric and
+there is at least one character in the string.
[clinic start generated code]*/
static PyObject *
unicode_isnumeric_impl(PyObject *self)
-/*[clinic end generated code: output=9172a32d9013051a input=722507db976f826c]*/
+/*[clinic end generated code: output=9172a32d9013051a input=83b2a072ed7aff48]*/
{
Py_ssize_t i, length;
int kind;
@@ -12035,13 +12037,13 @@ str.isidentifier as unicode_isidentifier
Return True if the string is a valid Python identifier, False otherwise.
-Call keyword.iskeyword(s) to test whether string s is a reserved identifier,
-such as "def" or "class".
+Call keyword.iskeyword(s) to test whether string s is a reserved
+identifier, such as "def" or "class".
[clinic start generated code]*/
static PyObject *
unicode_isidentifier_impl(PyObject *self)
-/*[clinic end generated code: output=fe585a9666572905 input=2d807a104f21c0c5]*/
+/*[clinic end generated code: output=fe585a9666572905 input=82e830f25b2a7945]*/
{
return PyBool_FromLong(PyUnicode_IsIdentifier(self));
}
@@ -12087,15 +12089,15 @@ str.join as unicode_join
Concatenate any number of strings.
-The string whose method is called is inserted in between each given string.
-The result is returned as a new string.
+The string whose method is called is inserted in between each given
+string. The result is returned as a new string.
Example: '.'.join(['ab', 'pq', 'rs']) -> 'ab.pq.rs'
[clinic start generated code]*/
static PyObject *
unicode_join(PyObject *self, PyObject *iterable)
-/*[clinic end generated code: output=6857e7cecfe7bf98 input=2f70422bfb8fa189]*/
+/*[clinic end generated code: output=6857e7cecfe7bf98 input=fd330a11ee845fb2]*/
{
return PyUnicode_Join(self, iterable);
}
@@ -12115,12 +12117,13 @@ str.ljust as unicode_ljust
Return a left-justified string of length width.
-Padding is done using the specified fill character (default is a space).
+Padding is done using the specified fill character (default is
+a space).
[clinic start generated code]*/
static PyObject *
unicode_ljust_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar)
-/*[clinic end generated code: output=1cce0e0e0a0b84b3 input=3ab599e335e60a32]*/
+/*[clinic end generated code: output=1cce0e0e0a0b84b3 input=8a55f06694c20ed6]*/
{
if (PyUnicode_GET_LENGTH(self) >= width)
return unicode_result_unchanged(self);
@@ -12470,13 +12473,14 @@ str.removeprefix as unicode_removeprefix
Return a str with the given prefix string removed if present.
-If the string starts with the prefix string, return string[len(prefix):].
-Otherwise, return a copy of the original string.
+If the string starts with the prefix string, return
+string[len(prefix):]. Otherwise, return a copy of the original
+string.
[clinic start generated code]*/
static PyObject *
unicode_removeprefix_impl(PyObject *self, PyObject *prefix)
-/*[clinic end generated code: output=f1e5945e9763bcb9 input=27ec40b99a37eb88]*/
+/*[clinic end generated code: output=f1e5945e9763bcb9 input=90d162724944bfa7]*/
{
int match = tailmatch(self, prefix, 0, PY_SSIZE_T_MAX, -1);
if (match == -1) {
@@ -12497,14 +12501,14 @@ str.removesuffix as unicode_removesuffix
Return a str with the given suffix string removed if present.
-If the string ends with the suffix string and that suffix is not empty,
-return string[:-len(suffix)]. Otherwise, return a copy of the original
-string.
+If the string ends with the suffix string and that suffix is not
+empty, return string[:-len(suffix)]. Otherwise, return a copy of
+the original string.
[clinic start generated code]*/
static PyObject *
unicode_removesuffix_impl(PyObject *self, PyObject *suffix)
-/*[clinic end generated code: output=d36629e227636822 input=12cc32561e769be4]*/
+/*[clinic end generated code: output=d36629e227636822 input=6efc96152d4bfcd5]*/
{
int match = tailmatch(self, suffix, 0, PY_SSIZE_T_MAX, +1);
if (match == -1) {
@@ -12684,14 +12688,14 @@ str.rfind as unicode_rfind = str.count
Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].
-Optional arguments start and end are interpreted as in slice notation.
-Return -1 on failure.
+Optional arguments start and end are interpreted as in slice
+notation. Return -1 on failure.
[clinic start generated code]*/
static Py_ssize_t
unicode_rfind_impl(PyObject *str, PyObject *substr, Py_ssize_t start,
Py_ssize_t end)
-/*[clinic end generated code: output=880b29f01dd014c8 input=898361fb71f59294]*/
+/*[clinic end generated code: output=880b29f01dd014c8 input=130dfb5a94532dd6]*/
{
Py_ssize_t result = any_find_slice(str, substr, start, end, -1);
if (result < 0) {
@@ -12705,14 +12709,14 @@ str.rindex as unicode_rindex = str.count
Return the highest index in S where substring sub is found, such that sub is contained within S[start:end].
-Optional arguments start and end are interpreted as in slice notation.
-Raises ValueError when the substring is not found.
+Optional arguments start and end are interpreted as in slice
+notation. Raises ValueError when the substring is not found.
[clinic start generated code]*/
static Py_ssize_t
unicode_rindex_impl(PyObject *str, PyObject *substr, Py_ssize_t start,
Py_ssize_t end)
-/*[clinic end generated code: output=5f3aef124c867fe1 input=35943dead6c1ea9d]*/
+/*[clinic end generated code: output=5f3aef124c867fe1 input=97a766ba968a214e]*/
{
Py_ssize_t result = any_find_slice(str, substr, start, end, -1);
if (result == -1) {
@@ -12733,12 +12737,13 @@ str.rjust as unicode_rjust
Return a right-justified string of length width.
-Padding is done using the specified fill character (default is a space).
+Padding is done using the specified fill character (default is
+a space).
[clinic start generated code]*/
static PyObject *
unicode_rjust_impl(PyObject *self, Py_ssize_t width, Py_UCS4 fillchar)
-/*[clinic end generated code: output=804a1a57fbe8d5cf input=d05f550b5beb1f72]*/
+/*[clinic end generated code: output=804a1a57fbe8d5cf input=1256a8d659589907]*/
{
if (PyUnicode_GET_LENGTH(self) >= width)
return unicode_result_unchanged(self);
@@ -12761,9 +12766,9 @@ str.split as unicode_split
sep: object = None
The separator used to split the string.
- When set to None (the default value), will split on any whitespace
- character (including \n \r \t \f and spaces) and will discard
- empty strings from the result.
+ When set to None (the default value), will split on any
+ whitespace character (including \n \r \t \f and spaces) and
+ will discard empty strings from the result.
maxsplit: Py_ssize_t = -1
Maximum number of splits.
-1 (the default value) means no limit.
@@ -12772,15 +12777,15 @@ Return a list of the substrings in the string, using sep as the separator string
Splitting starts at the front of the string and works to the end.
-Note, str.split() is mainly useful for data that has been intentionally
-delimited. With natural text that includes punctuation, consider using
-the regular expression module.
+Note, str.split() is mainly useful for data that has been
+intentionally delimited. With natural text that includes
+punctuation, consider using the regular expression module.
[clinic start generated code]*/
static PyObject *
unicode_split_impl(PyObject *self, PyObject *sep, Py_ssize_t maxsplit)
-/*[clinic end generated code: output=3a65b1db356948dc input=a29bcc0c7a5af0eb]*/
+/*[clinic end generated code: output=3a65b1db356948dc input=9dc157701983897d]*/
{
if (sep == Py_None)
return split(self, NULL, maxsplit);
@@ -12904,17 +12909,17 @@ str.partition as unicode_partition
Partition the string into three parts using the given separator.
-This will search for the separator in the string. If the separator is found,
-returns a 3-tuple containing the part before the separator, the separator
-itself, and the part after it.
+This will search for the separator in the string. If the separator
+is found, returns a 3-tuple containing the part before the
+separator, the separator itself, and the part after it.
-If the separator is not found, returns a 3-tuple containing the original string
-and two empty strings.
+If the separator is not found, returns a 3-tuple containing
+the original string and two empty strings.
[clinic start generated code]*/
static PyObject *
unicode_partition(PyObject *self, PyObject *sep)
-/*[clinic end generated code: output=e4ced7bd253ca3c4 input=f29b8d06c63e50be]*/
+/*[clinic end generated code: output=e4ced7bd253ca3c4 input=e45faa8c26270cb1]*/
{
return PyUnicode_Partition(self, sep);
}
@@ -12924,17 +12929,18 @@ str.rpartition as unicode_rpartition = str.partition
Partition the string into three parts using the given separator.
-This will search for the separator in the string, starting at the end. If
-the separator is found, returns a 3-tuple containing the part before the
-separator, the separator itself, and the part after it.
+This will search for the separator in the string, starting at the
+end. If the separator is found, returns a 3-tuple containing the
+part before the separator, the separator itself, and the part after
+it.
-If the separator is not found, returns a 3-tuple containing two empty strings
-and the original string.
+If the separator is not found, returns a 3-tuple containing two
+empty strings and the original string.
[clinic start generated code]*/
static PyObject *
unicode_rpartition(PyObject *self, PyObject *sep)
-/*[clinic end generated code: output=1aa13cf1156572aa input=c4b7db3ef5cf336a]*/
+/*[clinic end generated code: output=1aa13cf1156572aa input=53a7f8cb19975b7c]*/
{
return PyUnicode_RPartition(self, sep);
}
@@ -12978,13 +12984,13 @@ str.splitlines as unicode_splitlines
Return a list of the lines in the string, breaking at line boundaries.
-Line breaks are not included in the resulting list unless keepends is given and
-true.
+Line breaks are not included in the resulting list unless keepends
+is given and true.
[clinic start generated code]*/
static PyObject *
unicode_splitlines_impl(PyObject *self, int keepends)
-/*[clinic end generated code: output=f664dcdad153ec40 input=ba6ad05ee85d2b55]*/
+/*[clinic end generated code: output=f664dcdad153ec40 input=bf780246bee5462b]*/
{
return PyUnicode_Splitlines(self, keepends);
}
@@ -13023,18 +13029,19 @@ str.maketrans as unicode_maketrans
Return a translation table usable for str.translate().
-If there is only one argument, it must be a dictionary mapping Unicode
-ordinals (integers) or characters to Unicode ordinals, strings or None.
-Character keys will be then converted to ordinals.
-If there are two arguments, they must be strings of equal length, and
-in the resulting dictionary, each character in x will be mapped to the
-character at the same position in y. If there is a third argument, it
-must be a string, whose characters will be mapped to None in the result.
+If there is only one argument, it must be a dictionary mapping
+Unicode ordinals (integers) or characters to Unicode ordinals,
+strings or None. Character keys will be then converted to ordinals.
+If there are two arguments, they must be strings of equal length,
+and in the resulting dictionary, each character in x will be mapped
+to the character at the same position in y. If there is a third
+argument, it must be a string, whose characters will be mapped to
+None in the result.
[clinic start generated code]*/
static PyObject *
unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z)
-/*[clinic end generated code: output=a925c89452bd5881 input=7bfbf529a293c6c5]*/
+/*[clinic end generated code: output=a925c89452bd5881 input=66bc00a1b4258a6e]*/
{
PyObject *new = NULL, *key, *value;
Py_ssize_t i = 0;
@@ -13142,20 +13149,21 @@ unicode_maketrans_impl(PyObject *x, PyObject *y, PyObject *z)
str.translate as unicode_translate
table: object
- Translation table, which must be a mapping of Unicode ordinals to
- Unicode ordinals, strings, or None.
+ Translation table, which must be a mapping of Unicode ordinals
+ to Unicode ordinals, strings, or None.
/
Replace each character in the string using the given translation table.
-The table must implement lookup/indexing via __getitem__, for instance a
-dictionary or list. If this operation raises LookupError, the character is
-left untouched. Characters mapped to None are deleted.
+The table must implement lookup/indexing via __getitem__, for
+instance a dictionary or list. If this operation raises
+LookupError, the character is left untouched. Characters mapped to
+None are deleted.
[clinic start generated code]*/
static PyObject *
unicode_translate(PyObject *self, PyObject *table)
-/*[clinic end generated code: output=3cb448ff2fd96bf3 input=6d38343db63d8eb0]*/
+/*[clinic end generated code: output=3cb448ff2fd96bf3 input=9874c06808f58900]*/
{
return _PyUnicode_TranslateCharmap(self, table, "ignore");
}
diff --git a/contrib/tools/python3/Objects/weakrefobject.c b/contrib/tools/python3/Objects/weakrefobject.c
index 61f05514a48..f45522c29a1 100644
--- a/contrib/tools/python3/Objects/weakrefobject.c
+++ b/contrib/tools/python3/Objects/weakrefobject.c
@@ -486,7 +486,8 @@ static PyMemberDef weakref_members[] = {
static PyMethodDef weakref_methods[] = {
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS,
+ PyDoc_STR("Weakrefs are generic over the type of the referenced object.")},
{NULL} /* Sentinel */
};
diff --git a/contrib/tools/python3/PC/clinic/_wmimodule.cpp.h b/contrib/tools/python3/PC/clinic/_wmimodule.cpp.h
index fccf3d795d5..73d93ed9eaf 100644
--- a/contrib/tools/python3/PC/clinic/_wmimodule.cpp.h
+++ b/contrib/tools/python3/PC/clinic/_wmimodule.cpp.h
@@ -14,8 +14,8 @@ PyDoc_STRVAR(_wmi_exec_query__doc__,
"\n"
"Runs a WMI query against the local machine.\n"
"\n"
-"This returns a single string with \'name=value\' pairs in a flat array separated\n"
-"by null characters.");
+"This returns a single string with \'name=value\' pairs in a flat array\n"
+"separated by null characters.");
#define _WMI_EXEC_QUERY_METHODDEF \
{"exec_query", _PyCFunction_CAST(_wmi_exec_query), METH_FASTCALL|METH_KEYWORDS, _wmi_exec_query__doc__},
@@ -69,4 +69,4 @@ _wmi_exec_query(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj
exit:
return return_value;
}
-/*[clinic end generated code: output=ba04920d127f3ceb input=a9049054013a1b77]*/
+/*[clinic end generated code: output=fefbbab59fa1584b input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Parser/lexer/state.c b/contrib/tools/python3/Parser/lexer/state.c
index 1665debea30..7d3b9e9ae59 100644
--- a/contrib/tools/python3/Parser/lexer/state.c
+++ b/contrib/tools/python3/Parser/lexer/state.c
@@ -15,8 +15,11 @@ _PyTokenizer_tok_new(void)
struct tok_state *tok = (struct tok_state *)PyMem_Calloc(
1,
sizeof(struct tok_state));
- if (tok == NULL)
+ if (tok == NULL) {
+ PyErr_NoMemory();
return NULL;
+ }
+
tok->buf = tok->cur = tok->inp = NULL;
tok->fp_interactive = 0;
tok->interactive_src_start = NULL;
diff --git a/contrib/tools/python3/Parser/tokenizer/file_tokenizer.c b/contrib/tools/python3/Parser/tokenizer/file_tokenizer.c
index 2750527da48..3e711eb8792 100644
--- a/contrib/tools/python3/Parser/tokenizer/file_tokenizer.c
+++ b/contrib/tools/python3/Parser/tokenizer/file_tokenizer.c
@@ -355,6 +355,7 @@ _PyTokenizer_FromFile(FILE *fp, const char* enc,
return NULL;
if ((tok->buf = (char *)PyMem_Malloc(BUFSIZ)) == NULL) {
_PyTokenizer_Free(tok);
+ PyErr_NoMemory();
return NULL;
}
tok->cur = tok->inp = tok->buf;
diff --git a/contrib/tools/python3/Parser/tokenizer/helpers.c b/contrib/tools/python3/Parser/tokenizer/helpers.c
index bd1b49d0127..4461b91b6f1 100644
--- a/contrib/tools/python3/Parser/tokenizer/helpers.c
+++ b/contrib/tools/python3/Parser/tokenizer/helpers.c
@@ -183,6 +183,7 @@ _PyTokenizer_new_string(const char *s, Py_ssize_t len, struct tok_state *tok)
char* result = (char *)PyMem_Malloc(len + 1);
if (!result) {
tok->done = E_NOMEM;
+ PyErr_NoMemory();
return NULL;
}
memcpy(result, s, len);
@@ -216,6 +217,7 @@ _PyTokenizer_translate_newlines(const char *s, int exec_input, int preserve_crlf
buf = PyMem_Malloc(needed_length);
if (buf == NULL) {
tok->done = E_NOMEM;
+ PyErr_NoMemory();
return NULL;
}
for (current = buf; *s; s++, current++) {
diff --git a/contrib/tools/python3/Parser/tokenizer/readline_tokenizer.c b/contrib/tools/python3/Parser/tokenizer/readline_tokenizer.c
index a2637af9902..b325cbd6d1c 100644
--- a/contrib/tools/python3/Parser/tokenizer/readline_tokenizer.c
+++ b/contrib/tools/python3/Parser/tokenizer/readline_tokenizer.c
@@ -114,6 +114,7 @@ _PyTokenizer_FromReadline(PyObject* readline, const char* enc,
return NULL;
if ((tok->buf = (char *)PyMem_Malloc(BUFSIZ)) == NULL) {
_PyTokenizer_Free(tok);
+ PyErr_NoMemory();
return NULL;
}
tok->cur = tok->inp = tok->buf;
diff --git a/contrib/tools/python3/Python/asm_trampoline.S b/contrib/tools/python3/Python/asm_trampoline.S
index a14e68c0e81..2513cde4e76 100644
--- a/contrib/tools/python3/Python/asm_trampoline.S
+++ b/contrib/tools/python3/Python/asm_trampoline.S
@@ -1,3 +1,5 @@
+#include "asm_trampoline_aarch64.h"
+
.text
.globl _Py_trampoline_func_start
# The following assembly is equivalent to:
@@ -21,10 +23,12 @@ _Py_trampoline_func_start:
#if defined(__aarch64__) && defined(__AARCH64EL__) && !defined(__ILP32__)
// ARM64 little endian, 64bit ABI
// generate with aarch64-linux-gnu-gcc 12.1
+ SIGN_LR
stp x29, x30, [sp, -16]!
mov x29, sp
blr x3
ldp x29, x30, [sp], 16
+ VERIFY_LR
ret
#endif
#ifdef __riscv
diff --git a/contrib/tools/python3/Python/asm_trampoline_aarch64.h b/contrib/tools/python3/Python/asm_trampoline_aarch64.h
new file mode 100644
index 00000000000..bc83aa460b6
--- /dev/null
+++ b/contrib/tools/python3/Python/asm_trampoline_aarch64.h
@@ -0,0 +1,56 @@
+#ifndef ASM_TRAMPOLINE_AARCH_64_H_
+#define ASM_TRAMPOLINE_AARCH_64_H_
+
+/*
+ * References:
+ * - https://developer.arm.com/documentation/101028/0012/5--Feature-test-macros
+ * - https://github.com/ARM-software/abi-aa/blob/main/aaelf64/aaelf64.rst
+ */
+
+#if defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1
+ #define BTI_J hint 36 /* bti j: for jumps, IE br instructions */
+ #define BTI_C hint 34 /* bti c: for calls, IE bl instructions */
+ #define GNU_PROPERTY_AARCH64_BTI 1 /* bit 0 GNU Notes is for BTI support */
+#else
+ #define BTI_J
+ #define BTI_C
+ #define GNU_PROPERTY_AARCH64_BTI 0
+#endif
+
+#if defined(__ARM_FEATURE_PAC_DEFAULT)
+ #if __ARM_FEATURE_PAC_DEFAULT & 1
+ #define SIGN_LR hint 25 /* paciasp: sign with the A key */
+ #define VERIFY_LR hint 29 /* autiasp: verify with the A key */
+ #elif __ARM_FEATURE_PAC_DEFAULT & 2
+ #define SIGN_LR hint 27 /* pacibsp: sign with the b key */
+ #define VERIFY_LR hint 31 /* autibsp: verify with the b key */
+ #endif
+ #define GNU_PROPERTY_AARCH64_POINTER_AUTH 2 /* bit 1 GNU Notes is for PAC support */
+#else
+ #define SIGN_LR BTI_C
+ #define VERIFY_LR
+ #define GNU_PROPERTY_AARCH64_POINTER_AUTH 0
+#endif
+
+#if defined(__ARM_FEATURE_GCS_DEFAULT) && __ARM_FEATURE_GCS_DEFAULT == 1
+ #define GNU_PROPERTY_AARCH64_GCS 4 /* bit 2 GNU Notes is for GCS support */
+#else
+ #define GNU_PROPERTY_AARCH64_GCS 0
+#endif
+
+/* Add the BTI, PAC and GCS support to GNU Notes section */
+#if GNU_PROPERTY_AARCH64_BTI != 0 || GNU_PROPERTY_AARCH64_POINTER_AUTH != 0 || GNU_PROPERTY_AARCH64_GCS != 0
+ .pushsection .note.gnu.property, "a"; /* Start a new allocatable section */
+ .balign 8; /* align it on a byte boundry */
+ .long 4; /* size of "GNU\0" */
+ .long 0x10; /* size of descriptor */
+ .long 0x5; /* NT_GNU_PROPERTY_TYPE_0 */
+ .asciz "GNU";
+ .long 0xc0000000; /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */
+ .long 4; /* Four bytes of data */
+ .long (GNU_PROPERTY_AARCH64_BTI|GNU_PROPERTY_AARCH64_POINTER_AUTH|GNU_PROPERTY_AARCH64_GCS); /* BTI, PAC or GCS is enabled */
+ .long 0; /* padding for 8 byte alignment */
+ .popsection; /* end the section */
+#endif
+
+#endif
diff --git a/contrib/tools/python3/Python/assemble.c b/contrib/tools/python3/Python/assemble.c
index 35453277dd8..288d786461b 100644
--- a/contrib/tools/python3/Python/assemble.c
+++ b/contrib/tools/python3/Python/assemble.c
@@ -80,9 +80,9 @@ assemble_init(struct assembler *a, int firstlineno)
}
return SUCCESS;
error:
- Py_XDECREF(a->a_bytecode);
- Py_XDECREF(a->a_linetable);
- Py_XDECREF(a->a_except_table);
+ Py_CLEAR(a->a_bytecode);
+ Py_CLEAR(a->a_linetable);
+ Py_CLEAR(a->a_except_table);
return ERROR;
}
diff --git a/contrib/tools/python3/Python/bltinmodule.c b/contrib/tools/python3/Python/bltinmodule.c
index bcf7e7355da..e107c997e71 100644
--- a/contrib/tools/python3/Python/bltinmodule.c
+++ b/contrib/tools/python3/Python/bltinmodule.c
@@ -264,15 +264,16 @@ should be a list of names to emulate ``from name import ...``, or an
empty list to emulate ``import name``.
When importing a module from a package, note that __import__('A.B', ...)
returns package A when fromlist is empty, but its submodule B when
-fromlist is not empty. The level argument is used to determine whether to
-perform absolute or relative imports: 0 is absolute, while a positive number
-is the number of parent directories to search relative to the current module.
+fromlist is not empty. The level argument is used to determine whether
+to perform absolute or relative imports: 0 is absolute, while a positive
+number is the number of parent directories to search relative to the
+current module.
[clinic start generated code]*/
static PyObject *
builtin___import___impl(PyObject *module, PyObject *name, PyObject *globals,
PyObject *locals, PyObject *fromlist, int level)
-/*[clinic end generated code: output=4febeda88a0cd245 input=73f4b960ea5b9dd6]*/
+/*[clinic end generated code: output=4febeda88a0cd245 input=e3096a230383f72d]*/
{
return PyImport_ImportModuleLevelObject(name, globals, locals,
fromlist, level);
@@ -622,8 +623,9 @@ PyDoc_STRVAR(filter_doc,
"filter(function, iterable, /)\n\
--\n\
\n\
-Return an iterator yielding those items of iterable for which function(item)\n\
-is true. If function is None, return the items that are true.");
+Return an iterator yielding those items of iterable for which\n\
+function(item) is true. If function is None, return the items that\n\
+are true.");
PyTypeObject PyFilter_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
@@ -743,23 +745,24 @@ compile as builtin_compile
Compile source into a code object that can be executed by exec() or eval().
-The source code may represent a Python module, statement or expression.
+The source code may represent a Python module, statement or
+expression.
The filename will be used for run-time error messages.
The mode must be 'exec' to compile a module, 'single' to compile a
single (interactive) statement, or 'eval' to compile an expression.
-The flags argument, if present, controls which future statements influence
-the compilation of the code.
+The flags argument, if present, controls which future statements
+influence the compilation of the code.
The dont_inherit argument, if true, stops the compilation inheriting
the effects of any future statements in effect in the code calling
-compile; if absent or false these statements do influence the compilation,
-in addition to any features explicitly specified.
+compile; if absent or false these statements do influence the
+compilation, in addition to any features explicitly specified.
[clinic start generated code]*/
static PyObject *
builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
const char *mode, int flags, int dont_inherit,
int optimize, int feature_version)
-/*[clinic end generated code: output=b0c09c84f116d3d7 input=8f0069edbdac381b]*/
+/*[clinic end generated code: output=b0c09c84f116d3d7 input=d69ec2180ff24031]*/
{
PyObject *source_copy;
const char *str;
@@ -903,10 +906,10 @@ PyDoc_STRVAR(dir_doc,
"dir([object]) -> list of strings\n"
"\n"
"If called without an argument, return the names in the current scope.\n"
-"Else, return an alphabetized list of names comprising (some of) the attributes\n"
-"of the given object, and of attributes reachable from it.\n"
-"If the object supplies a method named __dir__, it will be used; otherwise\n"
-"the default dir() logic is used and returns:\n"
+"Else, return an alphabetized list of names comprising (some of) the\n"
+"attributes of the given object, and of attributes reachable from it.\n"
+"If the object supplies a method named __dir__, it will be used;\n"
+"otherwise the default dir() logic is used and returns:\n"
" for a module object: the module's attributes.\n"
" for a class object: its attributes, and recursively the attributes\n"
" of its bases.\n"
@@ -1209,9 +1212,11 @@ builtin_getattr(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
PyDoc_STRVAR(getattr_doc,
"getattr(object, name[, default]) -> value\n\
\n\
-Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
-When a default argument is given, it is returned when the attribute doesn't\n\
-exist; without it, an exception is raised in that case.");
+Get a named attribute from an object.\n\
+\n\
+getattr(x, 'y') is equivalent to x.y.\n\
+When a default argument is given, it is returned when the attribute\n\
+doesn't exist; without it, an exception is raised in that case.");
/*[clinic input]
@@ -1219,13 +1224,13 @@ globals as builtin_globals
Return the dictionary containing the current scope's global variables.
-NOTE: Updates to this dictionary *will* affect name lookups in the current
-global scope and vice-versa.
+NOTE: Updates to this dictionary *will* affect name lookups in the
+current global scope and vice-versa.
[clinic start generated code]*/
static PyObject *
builtin_globals_impl(PyObject *module)
-/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
+/*[clinic end generated code: output=e5dd1527067b94d2 input=6d725a9b48d1eaeb]*/
{
PyObject *d;
@@ -1564,8 +1569,8 @@ builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
PyDoc_STRVAR(next_doc,
"next(iterator[, default])\n\
\n\
-Return the next item from the iterator. If default is given and the iterator\n\
-is exhausted, it is returned instead of raising StopIteration.");
+Return the next item from the iterator. If default is given and the\n\
+iterator is exhausted, it is returned instead of raising StopIteration.");
/*[clinic input]
@@ -1686,7 +1691,8 @@ iter(callable, sentinel) -> iterator\n\
\n\
Get an iterator from an object. In the first form, the argument must\n\
supply its own iterator, or be a sequence.\n\
-In the second form, the callable is called until it returns the sentinel.");
+In the second form, the callable is called until it returns the\n\
+sentinel.");
/*[clinic input]
@@ -1780,14 +1786,15 @@ locals as builtin_locals
Return a dictionary containing the current scope's local variables.
-NOTE: Whether or not updates to this dictionary will affect name lookups in
-the local scope and vice-versa is *implementation dependent* and not
-covered by any backwards compatibility guarantees.
+NOTE: Whether or not updates to this dictionary will affect name
+lookups in the local scope and vice-versa is *implementation
+dependent* and not covered by any backwards compatibility
+guarantees.
[clinic start generated code]*/
static PyObject *
builtin_locals_impl(PyObject *module)
-/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
+/*[clinic end generated code: output=b46c94015ce11448 input=989cc75c22167c42]*/
{
return _PyEval_GetFrameLocals();
}
@@ -2033,14 +2040,14 @@ pow as builtin_pow
Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
-Some types, such as ints, are able to use a more efficient algorithm when
-invoked using the three argument form.
+Some types, such as ints, are able to use a more efficient algorithm
+when invoked using the three argument form.
[clinic start generated code]*/
static PyObject *
builtin_pow_impl(PyObject *module, PyObject *base, PyObject *exp,
PyObject *mod)
-/*[clinic end generated code: output=3ca1538221bbf15f input=435dbd48a12efb23]*/
+/*[clinic end generated code: output=3ca1538221bbf15f input=6133ded72c7db82e]*/
{
return PyNumber_Power(base, exp, mod);
}
@@ -2160,13 +2167,14 @@ Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
-If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
+If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise
+EOFError.
On *nix systems, readline is used if available.
[clinic start generated code]*/
static PyObject *
builtin_input_impl(PyObject *module, PyObject *prompt)
-/*[clinic end generated code: output=83db5a191e7a0d60 input=159c46d4ae40977e]*/
+/*[clinic end generated code: output=83db5a191e7a0d60 input=ebb939c954639427]*/
{
PyObject *fin = NULL;
PyObject *fout = NULL;
@@ -2434,13 +2442,14 @@ round as builtin_round
Round a number to a given precision in decimal digits.
-The return value is an integer if ndigits is omitted or None. Otherwise
-the return value has the same type as the number. ndigits may be negative.
+The return value is an integer if ndigits is omitted or None.
+Otherwise the return value has the same type as the number. ndigits
+may be negative.
[clinic start generated code]*/
static PyObject *
builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
-/*[clinic end generated code: output=ff0d9dd176c02ede input=275678471d7aca15]*/
+/*[clinic end generated code: output=ff0d9dd176c02ede input=bdcb7c67bf4a4320]*/
{
PyObject *round, *result;
@@ -2475,8 +2484,8 @@ sorted as builtin_sorted
Return a new list containing all items from the iterable in ascending order.
-A custom key function can be supplied to customize the sort order, and the
-reverse flag can be set to request the result in descending order.
+A custom key function can be supplied to customize the sort order, and
+the reverse flag can be set to request the result in descending order.
[end disabled clinic input]*/
PyDoc_STRVAR(builtin_sorted__doc__,
@@ -2561,13 +2570,13 @@ sum as builtin_sum
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
-This function is intended specifically for use with numeric values and may
-reject non-numeric types.
+This function is intended specifically for use with numeric values and
+may reject non-numeric types.
[clinic start generated code]*/
static PyObject *
builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
-/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
+/*[clinic end generated code: output=df758cec7d1d302f input=83d1bc7fd7f7ad3b]*/
{
PyObject *result = start;
PyObject *temp, *item, *iter;
@@ -2771,15 +2780,15 @@ isinstance as builtin_isinstance
Return whether an object is an instance of a class or of a subclass thereof.
-A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
-check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
-or ...`` etc.
+A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the
+target to check against. This is equivalent to ``isinstance(x, A) or
+isinstance(x, B) or ...`` etc.
[clinic start generated code]*/
static PyObject *
builtin_isinstance_impl(PyObject *module, PyObject *obj,
PyObject *class_or_tuple)
-/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
+/*[clinic end generated code: output=6faf01472c13b003 input=477d04768621c24b]*/
{
int retval;
@@ -2799,15 +2808,15 @@ issubclass as builtin_issubclass
Return whether 'cls' is derived from another class or is the same class.
-A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
-check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
-or ...``.
+A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the
+target to check against. This is equivalent to ``issubclass(x, A) or
+issubclass(x, B) or ...``.
[clinic start generated code]*/
static PyObject *
builtin_issubclass_impl(PyObject *module, PyObject *cls,
PyObject *class_or_tuple)
-/*[clinic end generated code: output=358412410cd7a250 input=a24b9f3d58c370d6]*/
+/*[clinic end generated code: output=358412410cd7a250 input=a91ce96345a6705d]*/
{
int retval;
@@ -3032,13 +3041,13 @@ PyDoc_STRVAR(zip_doc,
"zip(*iterables, strict=False)\n\
--\n\
\n\
-The zip object yields n-length tuples, where n is the number of iterables\n\
-passed as positional arguments to zip(). The i-th element in every tuple\n\
-comes from the i-th iterable argument to zip(). This continues until the\n\
-shortest argument is exhausted.\n\
+The zip object yields n-length tuples, where n is the number of\n\
+iterables passed as positional arguments to zip(). The i-th element\n\
+in every tuple comes from the i-th iterable argument to zip(). This\n\
+continues until the shortest argument is exhausted.\n\
\n\
-If strict is true and one of the arguments is exhausted before the others,\n\
-raise a ValueError.\n\
+If strict is true and one of the arguments is exhausted before the\n\
+others, raise a ValueError.\n\
\n\
>>> list(zip('abcdefg', range(3), range(4)))\n\
[('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]");
diff --git a/contrib/tools/python3/Python/clinic/bltinmodule.c.h b/contrib/tools/python3/Python/clinic/bltinmodule.c.h
index 370cf3c929b..9a956a3f238 100644
--- a/contrib/tools/python3/Python/clinic/bltinmodule.c.h
+++ b/contrib/tools/python3/Python/clinic/bltinmodule.c.h
@@ -25,9 +25,10 @@ PyDoc_STRVAR(builtin___import____doc__,
"empty list to emulate ``import name``.\n"
"When importing a module from a package, note that __import__(\'A.B\', ...)\n"
"returns package A when fromlist is empty, but its submodule B when\n"
-"fromlist is not empty. The level argument is used to determine whether to\n"
-"perform absolute or relative imports: 0 is absolute, while a positive number\n"
-"is the number of parent directories to search relative to the current module.");
+"fromlist is not empty. The level argument is used to determine whether\n"
+"to perform absolute or relative imports: 0 is absolute, while a positive\n"
+"number is the number of parent directories to search relative to the\n"
+"current module.");
#define BUILTIN___IMPORT___METHODDEF \
{"__import__", _PyCFunction_CAST(builtin___import__), METH_FASTCALL|METH_KEYWORDS, builtin___import____doc__},
@@ -240,16 +241,17 @@ PyDoc_STRVAR(builtin_compile__doc__,
"\n"
"Compile source into a code object that can be executed by exec() or eval().\n"
"\n"
-"The source code may represent a Python module, statement or expression.\n"
+"The source code may represent a Python module, statement or\n"
+"expression.\n"
"The filename will be used for run-time error messages.\n"
"The mode must be \'exec\' to compile a module, \'single\' to compile a\n"
"single (interactive) statement, or \'eval\' to compile an expression.\n"
-"The flags argument, if present, controls which future statements influence\n"
-"the compilation of the code.\n"
+"The flags argument, if present, controls which future statements\n"
+"influence the compilation of the code.\n"
"The dont_inherit argument, if true, stops the compilation inheriting\n"
"the effects of any future statements in effect in the code calling\n"
-"compile; if absent or false these statements do influence the compilation,\n"
-"in addition to any features explicitly specified.");
+"compile; if absent or false these statements do influence the\n"
+"compilation, in addition to any features explicitly specified.");
#define BUILTIN_COMPILE_METHODDEF \
{"compile", _PyCFunction_CAST(builtin_compile), METH_FASTCALL|METH_KEYWORDS, builtin_compile__doc__},
@@ -568,8 +570,8 @@ PyDoc_STRVAR(builtin_globals__doc__,
"\n"
"Return the dictionary containing the current scope\'s global variables.\n"
"\n"
-"NOTE: Updates to this dictionary *will* affect name lookups in the current\n"
-"global scope and vice-versa.");
+"NOTE: Updates to this dictionary *will* affect name lookups in the\n"
+"current global scope and vice-versa.");
#define BUILTIN_GLOBALS_METHODDEF \
{"globals", (PyCFunction)builtin_globals, METH_NOARGS, builtin_globals__doc__},
@@ -780,9 +782,10 @@ PyDoc_STRVAR(builtin_locals__doc__,
"\n"
"Return a dictionary containing the current scope\'s local variables.\n"
"\n"
-"NOTE: Whether or not updates to this dictionary will affect name lookups in\n"
-"the local scope and vice-versa is *implementation dependent* and not\n"
-"covered by any backwards compatibility guarantees.");
+"NOTE: Whether or not updates to this dictionary will affect name\n"
+"lookups in the local scope and vice-versa is *implementation\n"
+"dependent* and not covered by any backwards compatibility\n"
+"guarantees.");
#define BUILTIN_LOCALS_METHODDEF \
{"locals", (PyCFunction)builtin_locals, METH_NOARGS, builtin_locals__doc__},
@@ -829,8 +832,8 @@ PyDoc_STRVAR(builtin_pow__doc__,
"\n"
"Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments\n"
"\n"
-"Some types, such as ints, are able to use a more efficient algorithm when\n"
-"invoked using the three argument form.");
+"Some types, such as ints, are able to use a more efficient algorithm\n"
+"when invoked using the three argument form.");
#define BUILTIN_POW_METHODDEF \
{"pow", _PyCFunction_CAST(builtin_pow), METH_FASTCALL|METH_KEYWORDS, builtin_pow__doc__},
@@ -997,7 +1000,8 @@ PyDoc_STRVAR(builtin_input__doc__,
"The prompt string, if given, is printed to standard output without a\n"
"trailing newline before reading input.\n"
"\n"
-"If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.\n"
+"If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise\n"
+"EOFError.\n"
"On *nix systems, readline is used if available.");
#define BUILTIN_INPUT_METHODDEF \
@@ -1043,8 +1047,9 @@ PyDoc_STRVAR(builtin_round__doc__,
"\n"
"Round a number to a given precision in decimal digits.\n"
"\n"
-"The return value is an integer if ndigits is omitted or None. Otherwise\n"
-"the return value has the same type as the number. ndigits may be negative.");
+"The return value is an integer if ndigits is omitted or None.\n"
+"Otherwise the return value has the same type as the number. ndigits\n"
+"may be negative.");
#define BUILTIN_ROUND_METHODDEF \
{"round", _PyCFunction_CAST(builtin_round), METH_FASTCALL|METH_KEYWORDS, builtin_round__doc__},
@@ -1109,8 +1114,8 @@ PyDoc_STRVAR(builtin_sum__doc__,
"Return the sum of a \'start\' value (default: 0) plus an iterable of numbers\n"
"\n"
"When the iterable is empty, return the start value.\n"
-"This function is intended specifically for use with numeric values and may\n"
-"reject non-numeric types.");
+"This function is intended specifically for use with numeric values and\n"
+"may reject non-numeric types.");
#define BUILTIN_SUM_METHODDEF \
{"sum", _PyCFunction_CAST(builtin_sum), METH_FASTCALL|METH_KEYWORDS, builtin_sum__doc__},
@@ -1174,9 +1179,9 @@ PyDoc_STRVAR(builtin_isinstance__doc__,
"\n"
"Return whether an object is an instance of a class or of a subclass thereof.\n"
"\n"
-"A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to\n"
-"check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)\n"
-"or ...`` etc.");
+"A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the\n"
+"target to check against. This is equivalent to ``isinstance(x, A) or\n"
+"isinstance(x, B) or ...`` etc.");
#define BUILTIN_ISINSTANCE_METHODDEF \
{"isinstance", _PyCFunction_CAST(builtin_isinstance), METH_FASTCALL, builtin_isinstance__doc__},
@@ -1209,9 +1214,9 @@ PyDoc_STRVAR(builtin_issubclass__doc__,
"\n"
"Return whether \'cls\' is derived from another class or is the same class.\n"
"\n"
-"A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to\n"
-"check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)\n"
-"or ...``.");
+"A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the\n"
+"target to check against. This is equivalent to ``issubclass(x, A) or\n"
+"issubclass(x, B) or ...``.");
#define BUILTIN_ISSUBCLASS_METHODDEF \
{"issubclass", _PyCFunction_CAST(builtin_issubclass), METH_FASTCALL, builtin_issubclass__doc__},
@@ -1237,4 +1242,4 @@ builtin_issubclass(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=39173c70790d9cd0 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=8829159dfea1f8ad input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Python/clinic/context.c.h b/contrib/tools/python3/Python/clinic/context.c.h
index 997ac6f6338..9d00b088026 100644
--- a/contrib/tools/python3/Python/clinic/context.c.h
+++ b/contrib/tools/python3/Python/clinic/context.c.h
@@ -10,8 +10,8 @@ PyDoc_STRVAR(_contextvars_Context_get__doc__,
"\n"
"Return the value for `key` if `key` has the value in the context object.\n"
"\n"
-"If `key` does not exist, return `default`. If `default` is not given,\n"
-"return None.");
+"If `key` does not exist, return `default`. If `default` is not\n"
+"given, return None.");
#define _CONTEXTVARS_CONTEXT_GET_METHODDEF \
{"get", _PyCFunction_CAST(_contextvars_Context_get), METH_FASTCALL, _contextvars_Context_get__doc__},
@@ -122,10 +122,12 @@ PyDoc_STRVAR(_contextvars_ContextVar_get__doc__,
"\n"
"Return a value for the context variable for the current context.\n"
"\n"
-"If there is no value for the variable in the current context, the method will:\n"
-" * return the value of the default argument of the method, if provided; or\n"
-" * return the default value for the context variable, if it was created\n"
-" with one; or\n"
+"If there is no value for the variable in the current context, the\n"
+"method will:\n"
+" * return the value of the default argument of the method, if\n"
+" provided; or\n"
+" * return the default value for the context variable, if it was\n"
+" created with one; or\n"
" * raise a LookupError.");
#define _CONTEXTVARS_CONTEXTVAR_GET_METHODDEF \
@@ -160,10 +162,11 @@ PyDoc_STRVAR(_contextvars_ContextVar_set__doc__,
"\n"
"Call to set a new value for the context variable in the current context.\n"
"\n"
-"The required value argument is the new value for the context variable.\n"
+"The required value argument is the new value for the context\n"
+"variable.\n"
"\n"
-"Returns a Token object that can be used to restore the variable to its previous\n"
-"value via the `ContextVar.reset()` method.");
+"Returns a Token object that can be used to restore the variable to\n"
+"its previous value via the `ContextVar.reset()` method.");
#define _CONTEXTVARS_CONTEXTVAR_SET_METHODDEF \
{"set", (PyCFunction)_contextvars_ContextVar_set, METH_O, _contextvars_ContextVar_set__doc__},
@@ -174,9 +177,9 @@ PyDoc_STRVAR(_contextvars_ContextVar_reset__doc__,
"\n"
"Reset the context variable.\n"
"\n"
-"The variable is reset to the value it had before the `ContextVar.set()` that\n"
-"created the token was used.");
+"The variable is reset to the value it had before the\n"
+"`ContextVar.set()` that created the token was used.");
#define _CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF \
{"reset", (PyCFunction)_contextvars_ContextVar_reset, METH_O, _contextvars_ContextVar_reset__doc__},
-/*[clinic end generated code: output=b667826178444c3f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ddcd15dcce797d4a input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Python/clinic/import.c.h b/contrib/tools/python3/Python/clinic/import.c.h
index 5edeaef656e..4dcaac46fc3 100644
--- a/contrib/tools/python3/Python/clinic/import.c.h
+++ b/contrib/tools/python3/Python/clinic/import.c.h
@@ -34,8 +34,9 @@ PyDoc_STRVAR(_imp_acquire_lock__doc__,
"\n"
"Acquires the interpreter\'s import lock for the current thread.\n"
"\n"
-"This lock should be used by import hooks to ensure thread-safety when importing\n"
-"modules. On platforms without threads, this function does nothing.");
+"This lock should be used by import hooks to ensure thread-safety when\n"
+"importing modules. On platforms without threads, this function does\n"
+"nothing.");
#define _IMP_ACQUIRE_LOCK_METHODDEF \
{"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__},
@@ -623,4 +624,4 @@ exit:
#ifndef _IMP_EXEC_DYNAMIC_METHODDEF
#define _IMP_EXEC_DYNAMIC_METHODDEF
#endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */
-/*[clinic end generated code: output=dbd63707bd40b07c input=a9049054013a1b77]*/
+/*[clinic end generated code: output=2e8d0a877136c038 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Python/clinic/marshal.c.h b/contrib/tools/python3/Python/clinic/marshal.c.h
index c19a3ed5050..b251d290830 100644
--- a/contrib/tools/python3/Python/clinic/marshal.c.h
+++ b/contrib/tools/python3/Python/clinic/marshal.c.h
@@ -189,8 +189,8 @@ PyDoc_STRVAR(marshal_dumps__doc__,
" allow_code\n"
" Allow to write code objects.\n"
"\n"
-"Raise a ValueError exception if value has (or contains an object that has) an\n"
-"unsupported type.");
+"Raise a ValueError exception if value has (or contains an object that\n"
+"has) an unsupported type.");
#define MARSHAL_DUMPS_METHODDEF \
{"dumps", _PyCFunction_CAST(marshal_dumps), METH_FASTCALL|METH_KEYWORDS, marshal_dumps__doc__},
@@ -271,8 +271,8 @@ PyDoc_STRVAR(marshal_loads__doc__,
" allow_code\n"
" Allow to load code objects.\n"
"\n"
-"If no valid value is found, raise EOFError, ValueError or TypeError. Extra\n"
-"bytes in the input are ignored.");
+"If no valid value is found, raise EOFError, ValueError or TypeError.\n"
+"Extra bytes in the input are ignored.");
#define MARSHAL_LOADS_METHODDEF \
{"loads", _PyCFunction_CAST(marshal_loads), METH_FASTCALL|METH_KEYWORDS, marshal_loads__doc__},
@@ -339,4 +339,4 @@ exit:
return return_value;
}
-/*[clinic end generated code: output=1575b9a3ae48ad3d input=a9049054013a1b77]*/
+/*[clinic end generated code: output=c26d748754801cfc input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Python/clinic/sysmodule.c.h b/contrib/tools/python3/Python/clinic/sysmodule.c.h
index 8277d286cf5..95e33ea5205 100644
--- a/contrib/tools/python3/Python/clinic/sysmodule.c.h
+++ b/contrib/tools/python3/Python/clinic/sysmodule.c.h
@@ -1305,7 +1305,8 @@ PyDoc_STRVAR(sys__stats_dump__doc__,
"\n"
"Dump stats to file, and clears the stats.\n"
"\n"
-"Return False if no statistics were not dumped because stats gathering was off.");
+"Return False if no statistics were not dumped because stats gathering\n"
+"was off.");
#define SYS__STATS_DUMP_METHODDEF \
{"_stats_dump", (PyCFunction)sys__stats_dump, METH_NOARGS, sys__stats_dump__doc__},
@@ -1614,4 +1615,4 @@ exit:
#ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
#define SYS_GETANDROIDAPILEVEL_METHODDEF
#endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
-/*[clinic end generated code: output=9cc9069aef1482bc input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ea92bafc107d8521 input=a9049054013a1b77]*/
diff --git a/contrib/tools/python3/Python/compile.c b/contrib/tools/python3/Python/compile.c
index 8f8b6773440..4ab1280e91d 100644
--- a/contrib/tools/python3/Python/compile.c
+++ b/contrib/tools/python3/Python/compile.c
@@ -7844,6 +7844,7 @@ _PyCompile_CodeGen(PyObject *ast, PyObject *filename, PyCompilerFlags *pflags,
{
PyObject *res = NULL;
PyObject *metadata = NULL;
+ PyObject *consts_list = NULL;
if (!PyAST_Check(ast)) {
PyErr_SetString(PyExc_TypeError, "expected an AST");
@@ -7889,7 +7890,6 @@ _PyCompile_CodeGen(PyObject *ast, PyObject *filename, PyCompilerFlags *pflags,
SET_MATADATA_ITEM("name", umd->u_name);
SET_MATADATA_ITEM("qualname", umd->u_qualname);
- SET_MATADATA_ITEM("consts", umd->u_consts);
SET_MATADATA_ITEM("names", umd->u_names);
SET_MATADATA_ITEM("varnames", umd->u_varnames);
SET_MATADATA_ITEM("cellvars", umd->u_cellvars);
@@ -7915,12 +7915,21 @@ _PyCompile_CodeGen(PyObject *ast, PyObject *filename, PyCompilerFlags *pflags,
}
if (_PyInstructionSequence_ApplyLabelMap(INSTR_SEQUENCE(c)) < 0) {
- return NULL;
+ goto finally;
+ }
+ /* After add_return_at_end: const indices match final instruction stream. */
+ consts_list = consts_dict_keys_inorder(umd->u_consts);
+ if (consts_list == NULL) {
+ goto finally;
+ }
+ if (PyDict_SetItemString(metadata, "consts", consts_list) < 0) {
+ goto finally;
}
/* Allocate a copy of the instruction sequence on the heap */
res = PyTuple_Pack(2, INSTR_SEQUENCE(c), metadata);
finally:
+ Py_XDECREF(consts_list);
Py_XDECREF(metadata);
compiler_exit_scope(c);
compiler_free(c);
@@ -7935,6 +7944,10 @@ _PyCompile_OptimizeCfg(PyObject *seq, PyObject *consts, int nlocals)
PyErr_SetString(PyExc_ValueError, "expected an instruction sequence");
return NULL;
}
+ if (!PyList_Check(consts)) {
+ PyErr_SetString(PyExc_TypeError, "consts must be a list");
+ return NULL;
+ }
PyObject *const_cache = PyDict_New();
if (const_cache == NULL) {
return NULL;
diff --git a/contrib/tools/python3/Python/context.c b/contrib/tools/python3/Python/context.c
index 1b2797b8af5..bc8b45cf6f1 100644
--- a/contrib/tools/python3/Python/context.c
+++ b/contrib/tools/python3/Python/context.c
@@ -556,14 +556,14 @@ _contextvars.Context.get
Return the value for `key` if `key` has the value in the context object.
-If `key` does not exist, return `default`. If `default` is not given,
-return None.
+If `key` does not exist, return `default`. If `default` is not
+given, return None.
[clinic start generated code]*/
static PyObject *
_contextvars_Context_get_impl(PyContext *self, PyObject *key,
PyObject *default_value)
-/*[clinic end generated code: output=0c54aa7664268189 input=c8eeb81505023995]*/
+/*[clinic end generated code: output=0c54aa7664268189 input=d1be897231334ea9]*/
{
if (context_check_key_type(key)) {
return NULL;
@@ -962,16 +962,18 @@ _contextvars.ContextVar.get
Return a value for the context variable for the current context.
-If there is no value for the variable in the current context, the method will:
- * return the value of the default argument of the method, if provided; or
- * return the default value for the context variable, if it was created
- with one; or
+If there is no value for the variable in the current context, the
+method will:
+ * return the value of the default argument of the method, if
+ provided; or
+ * return the default value for the context variable, if it was
+ created with one; or
* raise a LookupError.
[clinic start generated code]*/
static PyObject *
_contextvars_ContextVar_get_impl(PyContextVar *self, PyObject *default_value)
-/*[clinic end generated code: output=0746bd0aa2ced7bf input=30aa2ab9e433e401]*/
+/*[clinic end generated code: output=0746bd0aa2ced7bf input=83814c6aef4a9fe3]*/
{
PyObject *val;
if (PyContextVar_Get((PyObject *)self, default_value, &val) < 0) {
@@ -993,15 +995,16 @@ _contextvars.ContextVar.set
Call to set a new value for the context variable in the current context.
-The required value argument is the new value for the context variable.
+The required value argument is the new value for the context
+variable.
-Returns a Token object that can be used to restore the variable to its previous
-value via the `ContextVar.reset()` method.
+Returns a Token object that can be used to restore the variable to
+its previous value via the `ContextVar.reset()` method.
[clinic start generated code]*/
static PyObject *
_contextvars_ContextVar_set(PyContextVar *self, PyObject *value)
-/*[clinic end generated code: output=446ed5e820d6d60b input=c0a6887154227453]*/
+/*[clinic end generated code: output=446ed5e820d6d60b input=6ffee66796d67896]*/
{
return PyContextVar_Set((PyObject *)self, value);
}
@@ -1013,13 +1016,13 @@ _contextvars.ContextVar.reset
Reset the context variable.
-The variable is reset to the value it had before the `ContextVar.set()` that
-created the token was used.
+The variable is reset to the value it had before the
+`ContextVar.set()` that created the token was used.
[clinic start generated code]*/
static PyObject *
_contextvars_ContextVar_reset(PyContextVar *self, PyObject *token)
-/*[clinic end generated code: output=d4ee34d0742d62ee input=ebe2881e5af4ffda]*/
+/*[clinic end generated code: output=d4ee34d0742d62ee input=dd33cfcb18c00e37]*/
{
if (!PyContextToken_CheckExact(token)) {
PyErr_Format(PyExc_TypeError,
@@ -1045,7 +1048,8 @@ static PyMethodDef PyContextVar_methods[] = {
_CONTEXTVARS_CONTEXTVAR_SET_METHODDEF
_CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS,
+ PyDoc_STR("ContextVars are generic over the type of their contained values")},
{NULL, NULL}
};
@@ -1184,7 +1188,8 @@ static PyGetSetDef PyContextTokenType_getsetlist[] = {
static PyMethodDef PyContextTokenType_methods[] = {
{"__class_getitem__", Py_GenericAlias,
- METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ METH_O|METH_CLASS,
+ PyDoc_STR("Tokens are generic over the same type as the ContextVar which created them.")},
{NULL}
};
diff --git a/contrib/tools/python3/Python/flowgraph.c b/contrib/tools/python3/Python/flowgraph.c
index ecf510842ea..baba1f75b9c 100644
--- a/contrib/tools/python3/Python/flowgraph.c
+++ b/contrib/tools/python3/Python/flowgraph.c
@@ -1244,6 +1244,14 @@ get_const_value(int opcode, int oparg, PyObject *co_consts)
PyObject *constant = NULL;
assert(OPCODE_HAS_CONST(opcode));
if (opcode == LOAD_CONST) {
+ assert(PyList_Check(co_consts));
+ Py_ssize_t n = PyList_GET_SIZE(co_consts);
+ if (oparg < 0 || oparg >= n) {
+ PyErr_Format(PyExc_ValueError,
+ "LOAD_CONST index %d is out of range for consts (len=%zd)",
+ oparg, n);
+ return NULL;
+ }
constant = PyList_GET_ITEM(co_consts, oparg);
}
@@ -2032,6 +2040,7 @@ remove_unused_consts(basicblock *entryblock, PyObject *consts)
index_map = PyMem_Malloc(nconsts * sizeof(Py_ssize_t));
if (index_map == NULL) {
+ PyErr_NoMemory();
goto end;
}
for (Py_ssize_t i = 1; i < nconsts; i++) {
@@ -2045,6 +2054,12 @@ remove_unused_consts(basicblock *entryblock, PyObject *consts)
for (int i = 0; i < b->b_iused; i++) {
if (OPCODE_HAS_CONST(b->b_instr[i].i_opcode)) {
int index = b->b_instr[i].i_oparg;
+ if (index < 0 || index >= nconsts) {
+ PyErr_Format(PyExc_ValueError,
+ "LOAD_CONST index %d is out of range for consts (len=%zd)",
+ index, nconsts);
+ goto end;
+ }
index_map[index] = index;
}
}
@@ -2083,6 +2098,7 @@ remove_unused_consts(basicblock *entryblock, PyObject *consts)
/* adjust const indices in the bytecode */
reverse_index_map = PyMem_Malloc(nconsts * sizeof(Py_ssize_t));
if (reverse_index_map == NULL) {
+ PyErr_NoMemory();
goto end;
}
for (Py_ssize_t i = 0; i < nconsts; i++) {
diff --git a/contrib/tools/python3/Python/frozen_modules/_collections_abc.h b/contrib/tools/python3/Python/frozen_modules/_collections_abc.h
index 844f3b6fca5..1143d86f403 100644
--- a/contrib/tools/python3/Python/frozen_modules/_collections_abc.h
+++ b/contrib/tools/python3/Python/frozen_modules/_collections_abc.h
@@ -999,8 +999,8 @@ const unsigned char _Py_M___collections_abc[] = {
10,84,104,105,115,32,115,101,116,115,32,96,96,95,95,97,
114,103,115,95,95,96,96,32,116,111,32,97,32,116,117,112,
108,101,32,99,111,110,116,97,105,110,105,110,103,32,116,104,
- 101,32,102,108,97,116,116,101,110,101,100,32,96,96,97,114,
- 103,116,121,112,101,115,96,96,10,102,111,108,108,111,119,101,
+ 101,32,102,108,97,116,116,101,110,101,100,10,96,96,97,114,
+ 103,116,121,112,101,115,96,96,32,102,111,108,108,111,119,101,
100,32,98,121,32,96,96,114,101,115,117,108,116,116,121,112,
101,96,96,46,10,10,69,120,97,109,112,108,101,58,32,96,
96,67,97,108,108,97,98,108,101,91,91,105,110,116,44,32,
@@ -2231,711 +2231,711 @@ const unsigned char _Py_M___collections_abc[] = {
0,97,20,0,0,32,0,88,32,82,2,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,97,
1,0,0,101,0,85,2,115,2,31,0,36,0,102,0,61,
- 3,31,0,102,1,41,1,122,151,68,46,112,111,112,40,107,
+ 3,31,0,102,1,41,1,122,152,68,46,112,111,112,40,107,
91,44,100,93,41,32,45,62,32,118,44,32,114,101,109,111,
118,101,32,115,112,101,99,105,102,105,101,100,32,107,101,121,
32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,
- 99,111,114,114,101,115,112,111,110,100,105,110,103,32,118,97,
- 108,117,101,46,10,73,102,32,107,101,121,32,105,115,32,110,
- 111,116,32,102,111,117,110,100,44,32,100,32,105,115,32,114,
- 101,116,117,114,110,101,100,32,105,102,32,103,105,118,101,110,
- 44,32,111,116,104,101,114,119,105,115,101,32,75,101,121,69,
- 114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,
- 41,2,114,119,1,0,0,218,23,95,77,117,116,97,98,108,
- 101,77,97,112,112,105,110,103,95,95,109,97,114,107,101,114,
- 41,4,114,68,0,0,0,114,149,1,0,0,114,154,1,0,
- 0,114,102,0,0,0,115,4,0,0,0,32,32,32,32,114,
- 9,0,0,0,114,126,1,0,0,218,18,77,117,116,97,98,
- 108,101,77,97,112,112,105,110,103,46,112,111,112,177,3,0,
- 0,115,61,0,0,0,128,0,240,8,8,9,25,216,20,24,
- 145,73,136,69,240,12,0,17,21,144,9,216,19,24,136,76,
- 248,244,13,0,16,24,243,0,3,9,27,216,15,22,159,45,
- 153,45,210,15,39,216,16,21,216,19,26,138,78,240,7,3,
- 9,27,250,115,12,0,0,0,130,4,10,0,138,27,40,3,
- 167,1,40,3,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,5,0,0,0,3,0,0,0,243,104,0,0,0,149,0,
- 30,0,91,1,0,0,0,0,0,0,0,0,91,3,0,0,
- 0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,
- 53,1,0,0,0,0,0,0,110,1,88,1,5,0,0,0,
- 110,2,88,1,9,0,88,18,52,2,36,0,33,0,91,4,
+ 99,111,114,114,101,115,112,111,110,100,105,110,103,10,118,97,
+ 108,117,101,46,32,32,73,102,32,107,101,121,32,105,115,32,
+ 110,111,116,32,102,111,117,110,100,44,32,100,32,105,115,32,
+ 114,101,116,117,114,110,101,100,32,105,102,32,103,105,118,101,
+ 110,44,32,111,116,104,101,114,119,105,115,101,10,75,101,121,
+ 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,
+ 10,41,2,114,119,1,0,0,218,23,95,77,117,116,97,98,
+ 108,101,77,97,112,112,105,110,103,95,95,109,97,114,107,101,
+ 114,41,4,114,68,0,0,0,114,149,1,0,0,114,154,1,
+ 0,0,114,102,0,0,0,115,4,0,0,0,32,32,32,32,
+ 114,9,0,0,0,114,126,1,0,0,218,18,77,117,116,97,
+ 98,108,101,77,97,112,112,105,110,103,46,112,111,112,177,3,
+ 0,0,115,61,0,0,0,128,0,240,10,8,9,25,216,20,
+ 24,145,73,136,69,240,12,0,17,21,144,9,216,19,24,136,
+ 76,248,244,13,0,16,24,243,0,3,9,27,216,15,22,159,
+ 45,153,45,210,15,39,216,16,21,216,19,26,138,78,240,7,
+ 3,9,27,250,115,12,0,0,0,130,4,10,0,138,27,40,
+ 3,167,1,40,3,99,1,0,0,0,0,0,0,0,0,0,
+ 0,0,5,0,0,0,3,0,0,0,243,104,0,0,0,149,
+ 0,30,0,91,1,0,0,0,0,0,0,0,0,91,3,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,53,1,0,0,0,0,0,0,110,1,88,1,5,0,0,
+ 0,110,2,88,1,9,0,88,18,52,2,36,0,33,0,91,
+ 4,0,0,0,0,0,0,0,0,7,0,97,8,0,0,32,
+ 0,91,6,0,0,0,0,0,0,0,0,83,1,101,2,102,
+ 0,61,3,31,0,102,1,41,2,122,112,68,46,112,111,112,
+ 105,116,101,109,40,41,32,45,62,32,40,107,44,32,118,41,
+ 44,32,114,101,109,111,118,101,32,97,110,100,32,114,101,116,
+ 117,114,110,32,115,111,109,101,32,40,107,101,121,44,32,118,
+ 97,108,117,101,41,32,112,97,105,114,10,97,115,32,97,32,
+ 50,45,116,117,112,108,101,59,32,98,117,116,32,114,97,105,
+ 115,101,32,75,101,121,69,114,114,111,114,32,105,102,32,68,
+ 32,105,115,32,101,109,112,116,121,46,10,78,41,4,114,124,
+ 1,0,0,114,123,1,0,0,114,100,0,0,0,114,119,1,
+ 0,0,114,211,1,0,0,115,3,0,0,0,32,32,32,114,
+ 9,0,0,0,218,7,112,111,112,105,116,101,109,218,22,77,
+ 117,116,97,98,108,101,77,97,112,112,105,110,103,46,112,111,
+ 112,105,116,101,109,192,3,0,0,115,68,0,0,0,128,0,
+ 240,8,3,9,37,220,18,22,148,116,152,68,147,122,211,18,
+ 34,136,67,240,6,0,17,21,145,9,136,5,216,12,16,136,
+ 73,216,15,18,136,122,208,8,25,248,244,9,0,16,29,243,
+ 0,1,9,37,220,18,26,160,4,208,12,36,240,3,1,9,
+ 37,250,115,8,0,0,0,130,20,31,0,159,18,49,3,99,
+ 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+ 3,0,0,0,243,74,0,0,0,149,0,30,0,30,0,85,
+ 0,82,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,53,0,0,0,0,0,0,0,32,0,77,
+ 18,0,0,33,0,91,2,0,0,0,0,0,0,0,0,7,
+ 0,97,3,0,0,32,0,31,0,103,1,102,0,61,3,31,
+ 0,102,1,41,2,122,44,68,46,99,108,101,97,114,40,41,
+ 32,45,62,32,78,111,110,101,46,32,32,82,101,109,111,118,
+ 101,32,97,108,108,32,105,116,101,109,115,32,102,114,111,109,
+ 32,68,46,78,41,2,114,221,1,0,0,114,119,1,0,0,
+ 114,67,0,0,0,115,1,0,0,0,32,114,9,0,0,0,
+ 114,129,1,0,0,218,20,77,117,116,97,98,108,101,77,97,
+ 112,112,105,110,103,46,99,108,101,97,114,204,3,0,0,115,
+ 42,0,0,0,128,0,240,4,4,9,17,216,18,22,216,16,
+ 20,151,12,145,12,148,14,241,3,0,19,23,248,228,15,23,
+ 243,0,1,9,17,217,12,16,240,3,1,9,17,250,114,131,
+ 1,0,0,99,2,0,0,0,2,0,0,0,0,0,0,0,
+ 4,0,0,0,11,0,0,0,243,4,1,0,0,149,0,91,
+ 1,0,0,0,0,0,0,0,0,85,1,91,2,0,0,0,
+ 0,0,0,0,0,53,2,0,0,0,0,0,0,40,0,0,
+ 0,0,0,0,0,97,16,0,0,85,1,19,0,72,9,0,
+ 0,110,3,88,19,5,0,0,0,88,3,39,0,0,0,77,
+ 11,0,0,11,0,32,0,79,62,91,5,0,0,0,0,0,
+ 0,0,0,85,1,83,1,53,2,0,0,0,0,0,0,40,
+ 0,0,0,0,0,0,0,97,30,0,0,85,1,82,7,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,53,0,0,0,0,0,0,0,19,0,72,9,0,0,110,
+ 3,88,19,5,0,0,0,88,3,39,0,0,0,77,11,0,
+ 0,11,0,32,0,79,15,85,1,19,0,72,9,0,0,117,
+ 2,0,0,112,52,88,64,85,3,39,0,0,0,77,11,0,
+ 0,11,0,32,0,85,2,82,9,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,53,0,0,0,0,
+ 0,0,0,19,0,72,9,0,0,117,2,0,0,112,52,88,
+ 64,85,3,39,0,0,0,77,11,0,0,11,0,32,0,103,
+ 2,41,3,97,41,1,0,0,68,46,117,112,100,97,116,101,
+ 40,91,69,44,32,93,42,42,70,41,32,45,62,32,78,111,
+ 110,101,46,32,32,85,112,100,97,116,101,32,68,32,102,114,
+ 111,109,32,109,97,112,112,105,110,103,47,105,116,101,114,97,
+ 98,108,101,32,69,32,97,110,100,32,70,46,10,73,102,32,
+ 69,32,112,114,101,115,101,110,116,32,97,110,100,32,104,97,
+ 115,32,97,32,46,107,101,121,115,40,41,32,109,101,116,104,
+ 111,100,44,32,100,111,101,115,58,10,32,32,32,32,102,111,
+ 114,32,107,32,105,110,32,69,46,107,101,121,115,40,41,58,
+ 32,68,91,107,93,32,61,32,69,91,107,93,10,73,102,32,
+ 69,32,112,114,101,115,101,110,116,32,97,110,100,32,108,97,
+ 99,107,115,32,46,107,101,121,115,40,41,32,109,101,116,104,
+ 111,100,44,32,100,111,101,115,58,10,32,32,32,32,102,111,
+ 114,32,40,107,44,32,118,41,32,105,110,32,69,58,32,68,
+ 91,107,93,32,61,32,118,10,73,110,32,101,105,116,104,101,
+ 114,32,99,97,115,101,44,32,116,104,105,115,32,105,115,32,
+ 102,111,108,108,111,119,101,100,32,98,121,58,10,32,32,32,
+ 32,102,111,114,32,107,44,32,118,32,105,110,32,70,46,105,
+ 116,101,109,115,40,41,58,32,68,91,107,93,32,61,32,118,
+ 10,114,161,1,0,0,78,41,5,114,229,0,0,0,114,27,
+ 0,0,0,218,7,104,97,115,97,116,116,114,114,161,1,0,
+ 0,114,164,1,0,0,41,5,114,68,0,0,0,114,37,1,
+ 0,0,114,27,1,0,0,114,149,1,0,0,114,102,0,0,
+ 0,115,5,0,0,0,32,32,32,32,32,114,9,0,0,0,
+ 218,6,117,112,100,97,116,101,218,21,77,117,116,97,98,108,
+ 101,77,97,112,112,105,110,103,46,117,112,100,97,116,101,212,
+ 3,0,0,115,120,0,0,0,128,0,244,18,0,12,22,144,
+ 101,156,87,215,11,37,209,11,37,219,23,28,144,3,216,28,
+ 33,153,74,144,4,147,9,242,3,0,24,29,228,13,20,144,
+ 85,152,70,215,13,35,209,13,35,216,23,28,151,122,145,122,
+ 150,124,144,3,216,28,33,153,74,144,4,147,9,242,3,0,
+ 24,36,243,6,0,31,36,145,10,144,3,216,28,33,144,83,
+ 147,9,241,3,0,31,36,224,26,30,159,42,153,42,158,44,
+ 137,74,136,67,216,24,29,144,19,139,73,242,3,0,27,39,
+ 114,8,0,0,0,78,99,3,0,0,0,0,0,0,0,0,
+ 0,0,0,4,0,0,0,3,0,0,0,243,54,0,0,0,
+ 149,0,30,0,88,1,5,0,0,0,36,0,33,0,91,0,
0,0,0,0,0,0,0,0,7,0,97,8,0,0,32,0,
- 91,6,0,0,0,0,0,0,0,0,83,1,101,2,102,0,
- 61,3,31,0,102,1,41,2,122,112,68,46,112,111,112,105,
- 116,101,109,40,41,32,45,62,32,40,107,44,32,118,41,44,
- 32,114,101,109,111,118,101,32,97,110,100,32,114,101,116,117,
- 114,110,32,115,111,109,101,32,40,107,101,121,44,32,118,97,
- 108,117,101,41,32,112,97,105,114,10,97,115,32,97,32,50,
- 45,116,117,112,108,101,59,32,98,117,116,32,114,97,105,115,
- 101,32,75,101,121,69,114,114,111,114,32,105,102,32,68,32,
- 105,115,32,101,109,112,116,121,46,10,78,41,4,114,124,1,
- 0,0,114,123,1,0,0,114,100,0,0,0,114,119,1,0,
- 0,114,211,1,0,0,115,3,0,0,0,32,32,32,114,9,
- 0,0,0,218,7,112,111,112,105,116,101,109,218,22,77,117,
- 116,97,98,108,101,77,97,112,112,105,110,103,46,112,111,112,
- 105,116,101,109,191,3,0,0,115,68,0,0,0,128,0,240,
- 8,3,9,37,220,18,22,148,116,152,68,147,122,211,18,34,
- 136,67,240,6,0,17,21,145,9,136,5,216,12,16,136,73,
- 216,15,18,136,122,208,8,25,248,244,9,0,16,29,243,0,
- 1,9,37,220,18,26,160,4,208,12,36,240,3,1,9,37,
- 250,115,8,0,0,0,130,20,31,0,159,18,49,3,99,1,
- 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,
- 0,0,0,243,74,0,0,0,149,0,30,0,30,0,85,0,
- 82,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,53,0,0,0,0,0,0,0,32,0,77,18,
- 0,0,33,0,91,2,0,0,0,0,0,0,0,0,7,0,
- 97,3,0,0,32,0,31,0,103,1,102,0,61,3,31,0,
- 102,1,41,2,122,44,68,46,99,108,101,97,114,40,41,32,
- 45,62,32,78,111,110,101,46,32,32,82,101,109,111,118,101,
+ 88,32,85,1,39,0,0,0,31,0,85,2,36,0,102,0,
+ 61,3,31,0,102,1,41,1,122,64,68,46,115,101,116,100,
+ 101,102,97,117,108,116,40,107,91,44,100,93,41,32,45,62,
+ 32,68,46,103,101,116,40,107,44,100,41,44,32,97,108,115,
+ 111,32,115,101,116,32,68,91,107,93,61,100,32,105,102,32,
+ 107,32,110,111,116,32,105,110,32,68,114,147,1,0,0,114,
+ 153,1,0,0,115,3,0,0,0,32,32,32,114,9,0,0,
+ 0,218,10,115,101,116,100,101,102,97,117,108,116,218,25,77,
+ 117,116,97,98,108,101,77,97,112,112,105,110,103,46,115,101,
+ 116,100,101,102,97,117,108,116,233,3,0,0,115,42,0,0,
+ 0,128,0,240,4,3,9,32,216,19,23,145,57,208,12,28,
+ 248,220,15,23,243,0,1,9,32,216,24,31,144,19,138,73,
+ 216,15,22,136,14,240,5,1,9,32,250,115,12,0,0,0,
+ 130,3,6,0,134,14,24,3,151,1,24,3,41,1,114,7,
+ 0,0,0,114,6,0,0,0,41,17,114,78,0,0,0,114,
+ 79,0,0,0,114,80,0,0,0,114,81,0,0,0,114,4,
+ 1,0,0,114,82,0,0,0,114,4,0,0,0,114,212,1,
+ 0,0,114,215,1,0,0,218,6,111,98,106,101,99,116,114,
+ 218,1,0,0,114,126,1,0,0,114,221,1,0,0,114,129,
+ 1,0,0,114,227,1,0,0,114,230,1,0,0,114,84,0,
+ 0,0,114,7,0,0,0,114,8,0,0,0,114,9,0,0,
+ 0,114,28,0,0,0,114,28,0,0,0,156,3,0,0,115,
+ 89,0,0,0,134,0,241,2,6,5,8,240,16,0,17,19,
+ 128,73,224,5,19,241,2,1,5,23,243,3,0,6,20,240,
+ 2,1,5,23,240,6,0,6,20,241,2,1,5,23,243,3,
+ 0,6,20,240,2,1,5,23,241,6,0,16,22,139,120,128,
+ 72,224,31,39,244,0,13,5,25,242,30,10,5,26,242,24,
+ 6,5,17,244,16,19,5,30,247,42,6,5,23,114,8,0,
+ 0,0,114,28,0,0,0,99,0,0,0,0,0,0,0,0,
+ 0,0,0,0,2,0,0,0,0,0,0,0,243,82,0,0,
+ 0,149,0,92,0,114,1,83,0,114,2,83,1,114,3,83,
+ 2,114,4,83,3,114,5,83,4,114,6,92,7,83,5,26,
+ 0,53,0,0,0,0,0,0,0,114,8,83,6,26,0,114,
+ 9,83,7,26,0,114,10,83,8,26,0,114,11,83,12,83,
+ 10,26,0,106,1,114,12,83,11,26,0,114,13,83,3,114,
+ 14,103,9,41,13,114,33,0,0,0,105,247,3,0,0,122,
+ 126,65,108,108,32,116,104,101,32,111,112,101,114,97,116,105,
+ 111,110,115,32,111,110,32,97,32,114,101,97,100,45,111,110,
+ 108,121,32,115,101,113,117,101,110,99,101,46,10,10,67,111,
+ 110,99,114,101,116,101,32,115,117,98,99,108,97,115,115,101,
+ 115,32,109,117,115,116,32,111,118,101,114,114,105,100,101,32,
+ 95,95,110,101,119,95,95,32,111,114,32,95,95,105,110,105,
+ 116,95,95,44,10,95,95,103,101,116,105,116,101,109,95,95,
+ 44,32,97,110,100,32,95,95,108,101,110,95,95,46,10,114,
+ 7,0,0,0,233,32,0,0,0,99,2,0,0,0,0,0,
+ 0,0,0,0,0,0,1,0,0,0,3,0,0,0,243,14,
+ 0,0,0,149,0,91,0,0,0,0,0,0,0,0,0,101,
+ 1,114,6,0,0,0,169,1,218,10,73,110,100,101,120,69,
+ 114,114,111,114,169,2,114,68,0,0,0,218,5,105,110,100,
+ 101,120,115,2,0,0,0,32,32,114,9,0,0,0,114,0,
+ 1,0,0,218,20,83,101,113,117,101,110,99,101,46,95,95,
+ 103,101,116,105,116,101,109,95,95,3,4,0,0,243,8,0,
+ 0,0,128,0,228,14,24,208,8,24,114,8,0,0,0,99,
+ 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+ 35,0,0,0,243,80,0,0,0,35,0,32,0,149,0,83,
+ 1,110,1,30,0,30,0,88,1,5,0,0,0,110,2,85,
+ 2,118,0,149,1,32,0,85,1,83,2,45,13,0,0,110,
+ 1,77,15,0,0,33,0,91,0,0,0,0,0,0,0,0,
+ 0,7,0,97,3,0,0,32,0,31,0,103,0,102,0,61,
+ 3,31,0,102,1,55,3,102,1,41,3,78,114,2,0,0,
+ 0,114,37,0,0,0,114,236,1,0,0,41,3,114,68,0,
+ 0,0,218,1,105,114,200,1,0,0,115,3,0,0,0,32,
+ 32,32,114,9,0,0,0,114,165,0,0,0,218,17,83,101,
+ 113,117,101,110,99,101,46,95,95,105,116,101,114,95,95,7,
+ 4,0,0,115,63,0,0,0,233,0,128,0,216,12,13,136,
+ 1,240,2,6,9,19,216,18,22,216,20,24,145,71,144,1,
+ 216,22,23,146,7,216,16,17,144,81,145,6,144,1,241,7,
+ 0,19,23,248,244,8,0,16,26,243,0,1,9,19,217,12,
+ 18,240,3,1,9,19,252,115,24,0,0,0,130,3,38,1,
+ 134,16,22,0,150,10,35,3,160,2,38,1,162,1,35,3,
+ 163,3,38,1,99,2,0,0,0,0,0,0,0,0,0,0,
+ 0,3,0,0,0,3,0,0,0,243,44,0,0,0,149,0,
+ 85,0,19,0,72,14,0,0,110,2,88,33,76,0,100,7,
+ 0,0,88,33,58,88,0,0,100,2,0,0,77,14,0,0,
+ 32,0,103,1,11,0,32,0,103,2,114,158,1,0,0,114,
+ 7,0,0,0,41,3,114,68,0,0,0,114,102,0,0,0,
+ 114,200,1,0,0,115,3,0,0,0,32,32,32,114,9,0,
+ 0,0,114,205,0,0,0,218,21,83,101,113,117,101,110,99,
+ 101,46,95,95,99,111,110,116,97,105,110,115,95,95,17,4,
+ 0,0,115,29,0,0,0,128,0,219,17,21,136,65,216,15,
+ 16,138,122,152,81,157,90,217,23,27,241,5,0,18,22,240,
+ 6,0,16,21,114,8,0,0,0,99,1,0,0,0,0,0,
+ 0,0,0,0,0,0,7,0,0,0,35,0,0,0,243,96,
+ 0,0,0,35,0,32,0,149,0,91,1,0,0,0,0,0,
+ 0,0,0,91,3,0,0,0,0,0,0,0,0,91,5,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,53,1,0,0,0,0,0,0,53,1,0,0,0,0,0,
+ 0,19,0,72,9,0,0,110,1,88,1,5,0,0,0,118,
+ 0,149,5,32,0,77,11,0,0,11,0,32,0,103,0,55,
+ 3,102,1,114,6,0,0,0,41,3,218,8,114,101,118,101,
+ 114,115,101,100,218,5,114,97,110,103,101,114,231,0,0,0,
+ 41,2,114,68,0,0,0,114,243,1,0,0,115,2,0,0,
+ 0,32,32,114,9,0,0,0,114,180,0,0,0,218,21,83,
+ 101,113,117,101,110,99,101,46,95,95,114,101,118,101,114,115,
+ 101,100,95,95,23,4,0,0,115,36,0,0,0,233,0,128,
+ 0,220,17,25,156,37,164,3,160,68,163,9,211,26,42,214,
+ 17,43,136,65,216,18,22,145,39,140,77,242,3,0,18,44,
+ 249,115,4,0,0,0,130,44,46,1,78,99,4,0,0,0,
+ 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,
+ 243,254,0,0,0,149,0,85,2,98,30,0,0,85,2,83,
+ 1,58,18,0,0,97,24,0,0,91,1,0,0,0,0,0,
+ 0,0,0,91,3,0,0,0,0,0,0,0,0,85,0,53,
+ 1,0,0,0,0,0,0,85,2,45,0,0,0,83,1,53,
+ 2,0,0,0,0,0,0,110,2,85,3,98,20,0,0,85,
+ 3,83,1,58,18,0,0,97,14,0,0,85,3,91,3,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,45,13,0,0,110,3,85,2,110,4,85,3,98,5,0,
+ 0,88,67,58,18,0,0,97,33,0,0,30,0,88,4,5,
+ 0,0,0,110,5,88,81,76,0,100,5,0,0,88,81,58,
+ 88,0,0,97,2,0,0,85,4,36,0,85,4,83,2,45,
+ 13,0,0,110,4,85,3,99,2,0,0,77,26,0,0,88,
+ 67,58,18,0,0,97,2,0,0,77,33,0,0,91,6,0,
+ 0,0,0,0,0,0,0,101,1,33,0,91,4,0,0,0,
+ 0,0,0,0,0,7,0,97,8,0,0,32,0,31,0,91,
+ 6,0,0,0,0,0,0,0,0,101,1,102,0,61,3,31,
+ 0,102,1,41,3,122,190,83,46,105,110,100,101,120,40,118,
+ 97,108,117,101,44,32,91,115,116,97,114,116,44,32,91,115,
+ 116,111,112,93,93,41,32,45,62,32,105,110,116,101,103,101,
+ 114,32,45,45,32,114,101,116,117,114,110,32,102,105,114,115,
+ 116,32,105,110,100,101,120,32,111,102,10,118,97,108,117,101,
+ 46,32,32,82,97,105,115,101,115,32,86,97,108,117,101,69,
+ 114,114,111,114,32,105,102,32,116,104,101,32,118,97,108,117,
+ 101,32,105,115,32,110,111,116,32,112,114,101,115,101,110,116,
+ 46,10,10,83,117,112,112,111,114,116,105,110,103,32,115,116,
+ 97,114,116,32,97,110,100,32,115,116,111,112,32,97,114,103,
+ 117,109,101,110,116,115,32,105,115,32,111,112,116,105,111,110,
+ 97,108,44,32,98,117,116,10,114,101,99,111,109,109,101,110,
+ 100,101,100,46,10,114,2,0,0,0,114,37,0,0,0,41,
+ 4,218,3,109,97,120,114,231,0,0,0,114,237,1,0,0,
+ 218,10,86,97,108,117,101,69,114,114,111,114,41,6,114,68,
+ 0,0,0,114,102,0,0,0,218,5,115,116,97,114,116,218,
+ 4,115,116,111,112,114,243,1,0,0,114,200,1,0,0,115,
+ 6,0,0,0,32,32,32,32,32,32,114,9,0,0,0,114,
+ 239,1,0,0,218,14,83,101,113,117,101,110,99,101,46,105,
+ 110,100,101,120,27,4,0,0,115,161,0,0,0,128,0,240,
+ 14,0,12,17,209,11,28,160,21,168,17,163,25,220,20,23,
+ 156,3,152,68,155,9,160,69,209,24,41,168,49,211,20,45,
+ 136,69,216,11,15,209,11,27,160,4,160,113,163,8,216,12,
+ 16,148,67,152,4,147,73,209,12,29,136,68,224,12,17,136,
+ 1,216,14,18,137,108,152,97,155,104,240,2,3,13,22,216,
+ 20,24,145,71,144,1,240,6,0,16,17,138,122,152,81,155,
+ 90,216,23,24,144,8,216,12,13,144,17,137,70,136,65,240,
+ 15,0,15,19,139,108,152,97,157,104,244,16,0,15,25,208,
+ 8,24,248,244,11,0,20,30,243,0,1,13,22,216,16,21,
+ 244,8,0,15,25,208,8,24,240,11,1,13,22,250,115,18,
+ 0,0,0,193,4,4,65,42,0,193,42,10,65,60,3,193,
+ 59,1,65,60,3,99,2,0,0,0,0,0,0,0,0,0,
+ 0,0,4,0,0,0,3,0,0,0,243,46,0,0,0,94,
+ 1,149,0,91,1,0,0,0,0,0,0,0,0,85,1,52,
+ 1,83,1,26,0,106,8,85,0,19,0,53,0,0,0,0,
+ 0,0,0,53,1,0,0,0,0,0,0,36,0,41,2,122,
+ 66,83,46,99,111,117,110,116,40,118,97,108,117,101,41,32,
+ 45,62,32,105,110,116,101,103,101,114,32,45,45,32,114,101,
+ 116,117,114,110,32,110,117,109,98,101,114,32,111,102,32,111,
+ 99,99,117,114,114,101,110,99,101,115,32,111,102,32,118,97,
+ 108,117,101,99,1,0,0,0,0,0,0,0,0,0,0,0,
+ 3,0,0,0,51,0,0,0,243,64,0,0,0,62,1,35,
+ 0,32,0,149,0,85,0,19,0,72,19,0,0,111,17,84,
+ 2,76,0,100,8,0,0,85,1,84,2,58,88,0,0,100,
+ 2,0,0,77,15,0,0,83,0,118,0,149,5,32,0,77,
+ 21,0,0,11,0,32,0,103,1,55,3,102,1,41,2,114,
+ 37,0,0,0,78,114,7,0,0,0,41,3,114,12,1,0,
+ 0,114,200,1,0,0,114,102,0,0,0,115,3,0,0,0,
+ 32,32,128,114,9,0,0,0,114,15,1,0,0,218,33,83,
+ 101,113,117,101,110,99,101,46,99,111,117,110,116,46,60,108,
+ 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,
+ 52,4,0,0,115,29,0,0,0,248,233,0,128,0,208,18,
+ 63,154,100,152,17,168,53,162,106,176,65,184,21,177,74,151,
+ 49,145,49,154,100,249,115,8,0,0,0,131,14,30,1,149,
+ 9,30,1,41,1,218,3,115,117,109,114,101,0,0,0,115,
+ 2,0,0,0,32,96,114,9,0,0,0,218,5,99,111,117,
+ 110,116,218,14,83,101,113,117,101,110,99,101,46,99,111,117,
+ 110,116,50,4,0,0,115,20,0,0,0,248,128,0,228,15,
+ 18,212,18,63,153,100,211,18,63,211,15,63,208,8,63,114,
+ 8,0,0,0,41,2,114,2,0,0,0,78,41,15,114,78,
+ 0,0,0,114,79,0,0,0,114,80,0,0,0,114,81,0,
+ 0,0,114,4,1,0,0,114,82,0,0,0,114,172,1,0,
+ 0,114,4,0,0,0,114,0,1,0,0,114,165,0,0,0,
+ 114,205,0,0,0,114,180,0,0,0,114,239,1,0,0,114,
+ 5,2,0,0,114,84,0,0,0,114,7,0,0,0,114,8,
+ 0,0,0,114,9,0,0,0,114,33,0,0,0,114,33,0,
+ 0,0,247,3,0,0,115,65,0,0,0,134,0,241,2,4,
+ 5,8,240,12,0,17,19,128,73,240,6,0,23,29,128,79,
+ 224,5,19,241,2,1,5,25,243,3,0,6,20,240,2,1,
+ 5,25,242,6,8,5,19,242,20,4,5,21,242,12,2,5,
+ 26,244,8,21,5,25,245,46,2,5,64,1,114,8,0,0,
+ 0,114,33,0,0,0,99,0,0,0,0,0,0,0,0,0,
+ 0,0,0,2,0,0,0,0,0,0,0,243,52,0,0,0,
+ 94,0,149,0,92,0,114,1,83,0,114,2,83,1,114,3,
+ 85,0,52,1,83,2,26,0,106,8,114,4,85,0,52,1,
+ 83,3,26,0,106,8,114,5,83,4,114,6,85,0,61,1,
+ 114,7,36,0,41,5,218,24,95,68,101,112,114,101,99,97,
+ 116,101,66,121,116,101,83,116,114,105,110,103,77,101,116,97,
+ 105,59,4,0,0,99,4,0,0,0,0,0,0,0,0,0,
+ 0,0,6,0,0,0,11,0,0,0,243,92,0,0,0,62,
+ 1,149,0,85,1,83,1,58,119,0,0,97,20,0,0,83,
+ 2,83,0,75,0,110,5,85,5,82,3,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,83,3,83,
+ 4,83,5,57,2,32,0,91,4,0,0,0,0,0,0,0,
+ 0,84,6,85,0,93,12,0,0,34,0,88,1,88,35,52,
+ 4,48,0,85,4,68,1,54,1,36,0,41,6,78,114,35,
+ 0,0,0,114,2,0,0,0,250,26,99,111,108,108,101,99,
+ 116,105,111,110,115,46,97,98,99,46,66,121,116,101,83,116,
+ 114,105,110,103,169,2,233,3,0,0,0,233,17,0,0,0,
+ 169,1,114,120,1,0,0,41,4,218,8,119,97,114,110,105,
+ 110,103,115,218,11,95,100,101,112,114,101,99,97,116,101,100,
+ 114,235,0,0,0,114,236,0,0,0,41,7,114,74,0,0,
+ 0,114,13,1,0,0,218,5,98,97,115,101,115,218,9,110,
+ 97,109,101,115,112,97,99,101,218,6,107,119,97,114,103,115,
+ 114,15,2,0,0,114,241,0,0,0,115,7,0,0,0,32,
+ 32,32,32,32,32,128,114,9,0,0,0,114,236,0,0,0,
+ 218,32,95,68,101,112,114,101,99,97,116,101,66,121,116,101,
+ 83,116,114,105,110,103,77,101,116,97,46,95,95,110,101,119,
+ 95,95,60,4,0,0,115,63,0,0,0,248,128,0,216,11,
+ 15,144,60,211,11,31,219,12,27,224,12,20,215,12,32,209,
+ 12,32,216,16,44,216,23,30,240,5,0,13,33,241,0,3,
+ 13,14,244,8,0,16,21,137,119,138,127,152,115,168,37,209,
+ 15,69,184,102,209,15,69,208,8,69,114,8,0,0,0,99,
+ 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,
+ 3,0,0,0,243,74,0,0,0,62,1,149,0,83,1,83,
+ 0,75,0,110,2,85,2,82,3,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,83,2,83,3,83,
+ 4,57,2,32,0,91,4,0,0,0,0,0,0,0,0,84,
+ 3,85,0,93,13,0,0,85,1,53,1,0,0,0,0,0,
+ 0,36,0,41,5,78,114,2,0,0,0,114,10,2,0,0,
+ 114,11,2,0,0,114,14,2,0,0,41,4,114,15,2,0,
+ 0,114,16,2,0,0,114,235,0,0,0,218,17,95,95,105,
+ 110,115,116,97,110,99,101,99,104,101,99,107,95,95,41,4,
+ 114,74,0,0,0,218,8,105,110,115,116,97,110,99,101,114,
+ 15,2,0,0,114,241,0,0,0,115,4,0,0,0,32,32,
+ 32,128,114,9,0,0,0,114,22,2,0,0,218,42,95,68,
+ 101,112,114,101,99,97,116,101,66,121,116,101,83,116,114,105,
+ 110,103,77,101,116,97,46,95,95,105,110,115,116,97,110,99,
+ 101,99,104,101,99,107,95,95,70,4,0,0,115,49,0,0,
+ 0,248,128,0,219,8,23,224,8,16,215,8,28,209,8,28,
+ 216,12,40,216,19,26,240,5,0,9,29,241,0,3,9,10,
+ 244,8,0,16,21,137,119,209,15,40,168,24,211,15,50,208,
+ 8,50,114,8,0,0,0,114,7,0,0,0,41,8,114,78,
+ 0,0,0,114,79,0,0,0,114,80,0,0,0,114,81,0,
+ 0,0,114,236,0,0,0,114,22,2,0,0,114,84,0,0,
+ 0,114,5,1,0,0,114,6,1,0,0,115,1,0,0,0,
+ 64,114,9,0,0,0,114,8,2,0,0,114,8,2,0,0,
+ 59,4,0,0,115,19,0,0,0,248,134,0,245,2,8,5,
+ 70,1,247,20,7,5,51,243,0,7,5,51,114,8,0,0,
+ 0,114,8,2,0,0,99,0,0,0,0,0,0,0,0,0,
+ 0,0,0,1,0,0,0,0,0,0,0,243,28,0,0,0,
+ 149,0,92,0,114,1,83,0,114,2,83,1,114,3,83,2,
+ 114,4,83,3,114,5,83,3,114,6,103,4,41,5,114,35,
+ 0,0,0,105,79,4,0,0,97,143,1,0,0,68,101,112,
+ 114,101,99,97,116,101,100,32,65,66,67,32,115,101,114,118,
+ 105,110,103,32,97,115,32,97,32,99,111,109,109,111,110,32,
+ 115,117,112,101,114,116,121,112,101,32,111,102,32,96,96,98,
+ 121,116,101,115,96,96,32,97,110,100,32,96,96,98,121,116,
+ 101,97,114,114,97,121,96,96,46,10,10,84,104,105,115,32,
+ 65,66,67,32,105,115,32,115,99,104,101,100,117,108,101,100,
+ 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32,
+ 80,121,116,104,111,110,32,51,46,49,55,46,10,85,115,101,
+ 32,96,96,105,115,105,110,115,116,97,110,99,101,40,111,98,
+ 106,44,32,99,111,108,108,101,99,116,105,111,110,115,46,97,
+ 98,99,46,66,117,102,102,101,114,41,96,96,32,116,111,32,
+ 116,101,115,116,32,105,102,32,96,96,111,98,106,96,96,10,
+ 105,109,112,108,101,109,101,110,116,115,32,116,104,101,32,98,
+ 117,102,102,101,114,32,112,114,111,116,111,99,111,108,32,97,
+ 116,32,114,117,110,116,105,109,101,46,32,70,111,114,32,117,
+ 115,101,32,105,110,32,116,121,112,101,32,97,110,110,111,116,
+ 97,116,105,111,110,115,44,10,101,105,116,104,101,114,32,117,
+ 115,101,32,96,96,66,117,102,102,101,114,96,96,32,111,114,
+ 32,97,32,117,110,105,111,110,32,116,104,97,116,32,101,120,
+ 112,108,105,99,105,116,108,121,32,115,112,101,99,105,102,105,
+ 101,115,32,116,104,101,32,116,121,112,101,115,32,121,111,117,
+ 114,10,99,111,100,101,32,115,117,112,112,111,114,116,115,32,
+ 40,101,46,103,46,44,32,96,96,98,121,116,101,115,32,124,
+ 32,98,121,116,101,97,114,114,97,121,32,124,32,109,101,109,
+ 111,114,121,118,105,101,119,96,96,41,46,10,114,7,0,0,
+ 0,78,41,7,114,78,0,0,0,114,79,0,0,0,114,80,
+ 0,0,0,114,81,0,0,0,114,4,1,0,0,114,82,0,
+ 0,0,114,84,0,0,0,114,7,0,0,0,114,8,0,0,
+ 0,114,9,0,0,0,114,35,0,0,0,114,35,0,0,0,
+ 79,4,0,0,115,14,0,0,0,134,0,241,2,7,5,8,
+ 240,18,0,17,19,131,73,114,8,0,0,0,114,35,0,0,
+ 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
+ 0,0,0,0,0,0,243,122,0,0,0,149,0,92,0,114,
+ 1,83,0,114,2,83,1,114,3,83,2,114,4,83,3,114,
+ 5,92,6,83,4,26,0,53,0,0,0,0,0,0,0,114,
+ 7,92,6,83,5,26,0,53,0,0,0,0,0,0,0,114,
+ 8,92,6,83,6,26,0,53,0,0,0,0,0,0,0,114,
+ 9,83,7,26,0,114,10,83,8,26,0,114,11,83,9,26,
+ 0,114,12,83,10,26,0,114,13,83,15,83,11,26,0,106,
+ 1,114,14,83,12,26,0,114,15,83,13,26,0,114,16,83,
+ 3,114,17,103,14,41,16,114,34,0,0,0,105,95,4,0,
+ 0,122,162,65,108,108,32,116,104,101,32,111,112,101,114,97,
+ 116,105,111,110,115,32,111,110,32,97,32,114,101,97,100,45,
+ 119,114,105,116,101,32,115,101,113,117,101,110,99,101,46,10,
+ 10,67,111,110,99,114,101,116,101,32,115,117,98,99,108,97,
+ 115,115,101,115,32,109,117,115,116,32,112,114,111,118,105,100,
+ 101,32,95,95,110,101,119,95,95,32,111,114,32,95,95,105,
+ 110,105,116,95,95,44,10,95,95,103,101,116,105,116,101,109,
+ 95,95,44,32,95,95,115,101,116,105,116,101,109,95,95,44,
+ 32,95,95,100,101,108,105,116,101,109,95,95,44,32,95,95,
+ 108,101,110,95,95,44,32,97,110,100,32,105,110,115,101,114,
+ 116,40,41,46,10,114,7,0,0,0,99,3,0,0,0,0,
+ 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,243,
+ 14,0,0,0,149,0,91,0,0,0,0,0,0,0,0,0,
+ 101,1,114,6,0,0,0,114,236,1,0,0,169,3,114,68,
+ 0,0,0,114,239,1,0,0,114,102,0,0,0,115,3,0,
+ 0,0,32,32,32,114,9,0,0,0,114,212,1,0,0,218,
+ 27,77,117,116,97,98,108,101,83,101,113,117,101,110,99,101,
+ 46,95,95,115,101,116,105,116,101,109,95,95,104,4,0,0,
+ 114,241,1,0,0,114,8,0,0,0,99,2,0,0,0,0,
+ 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,243,
+ 14,0,0,0,149,0,91,0,0,0,0,0,0,0,0,0,
+ 101,1,114,6,0,0,0,114,236,1,0,0,114,238,1,0,
+ 0,115,2,0,0,0,32,32,114,9,0,0,0,114,215,1,
+ 0,0,218,27,77,117,116,97,98,108,101,83,101,113,117,101,
+ 110,99,101,46,95,95,100,101,108,105,116,101,109,95,95,108,
+ 4,0,0,114,241,1,0,0,114,8,0,0,0,99,3,0,
+ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,
+ 0,0,243,14,0,0,0,149,0,91,0,0,0,0,0,0,
+ 0,0,0,101,1,41,1,122,51,83,46,105,110,115,101,114,
+ 116,40,105,110,100,101,120,44,32,118,97,108,117,101,41,32,
+ 45,45,32,105,110,115,101,114,116,32,118,97,108,117,101,32,
+ 98,101,102,111,114,101,32,105,110,100,101,120,114,236,1,0,
+ 0,114,28,2,0,0,115,3,0,0,0,32,32,32,114,9,
+ 0,0,0,218,6,105,110,115,101,114,116,218,22,77,117,116,
+ 97,98,108,101,83,101,113,117,101,110,99,101,46,105,110,115,
+ 101,114,116,112,4,0,0,115,10,0,0,0,128,0,244,6,
+ 0,15,25,208,8,24,114,8,0,0,0,99,2,0,0,0,
+ 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,
+ 243,58,0,0,0,149,0,85,0,82,1,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,91,3,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,85,1,53,2,0,0,0,0,0,0,32,0,103,1,41,
+ 2,122,58,83,46,97,112,112,101,110,100,40,118,97,108,117,
+ 101,41,32,45,45,32,97,112,112,101,110,100,32,118,97,108,
+ 117,101,32,116,111,32,116,104,101,32,101,110,100,32,111,102,
+ 32,116,104,101,32,115,101,113,117,101,110,99,101,78,41,2,
+ 114,33,2,0,0,114,231,0,0,0,114,101,0,0,0,115,
+ 2,0,0,0,32,32,114,9,0,0,0,218,6,97,112,112,
+ 101,110,100,218,22,77,117,116,97,98,108,101,83,101,113,117,
+ 101,110,99,101,46,97,112,112,101,110,100,117,4,0,0,115,
+ 20,0,0,0,128,0,224,8,12,143,11,137,11,148,67,152,
+ 4,147,73,152,117,213,8,37,114,8,0,0,0,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,
+ 0,0,243,74,0,0,0,149,0,30,0,30,0,85,0,82,
+ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,53,0,0,0,0,0,0,0,32,0,77,18,0,
+ 0,33,0,91,2,0,0,0,0,0,0,0,0,7,0,97,
+ 3,0,0,32,0,31,0,103,1,102,0,61,3,31,0,102,
+ 1,41,2,122,44,83,46,99,108,101,97,114,40,41,32,45,
+ 62,32,78,111,110,101,32,45,45,32,114,101,109,111,118,101,
32,97,108,108,32,105,116,101,109,115,32,102,114,111,109,32,
- 68,46,78,41,2,114,221,1,0,0,114,119,1,0,0,114,
- 67,0,0,0,115,1,0,0,0,32,114,9,0,0,0,114,
- 129,1,0,0,218,20,77,117,116,97,98,108,101,77,97,112,
- 112,105,110,103,46,99,108,101,97,114,203,3,0,0,115,42,
+ 83,78,41,2,114,126,1,0,0,114,237,1,0,0,114,67,
+ 0,0,0,115,1,0,0,0,32,114,9,0,0,0,114,129,
+ 1,0,0,218,21,77,117,116,97,98,108,101,83,101,113,117,
+ 101,110,99,101,46,99,108,101,97,114,121,4,0,0,115,42,
0,0,0,128,0,240,4,4,9,17,216,18,22,216,16,20,
- 151,12,145,12,148,14,241,3,0,19,23,248,228,15,23,243,
+ 151,8,145,8,148,10,241,3,0,19,23,248,228,15,25,243,
0,1,9,17,217,12,16,240,3,1,9,17,250,114,131,1,
- 0,0,99,2,0,0,0,2,0,0,0,0,0,0,0,4,
- 0,0,0,11,0,0,0,243,4,1,0,0,149,0,91,1,
- 0,0,0,0,0,0,0,0,85,1,91,2,0,0,0,0,
- 0,0,0,0,53,2,0,0,0,0,0,0,40,0,0,0,
- 0,0,0,0,97,16,0,0,85,1,19,0,72,9,0,0,
- 110,3,88,19,5,0,0,0,88,3,39,0,0,0,77,11,
- 0,0,11,0,32,0,79,62,91,5,0,0,0,0,0,0,
- 0,0,85,1,83,1,53,2,0,0,0,0,0,0,40,0,
- 0,0,0,0,0,0,97,30,0,0,85,1,82,7,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 53,0,0,0,0,0,0,0,19,0,72,9,0,0,110,3,
- 88,19,5,0,0,0,88,3,39,0,0,0,77,11,0,0,
- 11,0,32,0,79,15,85,1,19,0,72,9,0,0,117,2,
- 0,0,112,52,88,64,85,3,39,0,0,0,77,11,0,0,
- 11,0,32,0,85,2,82,9,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,53,0,0,0,0,0,
- 0,0,19,0,72,9,0,0,117,2,0,0,112,52,88,64,
- 85,3,39,0,0,0,77,11,0,0,11,0,32,0,103,2,
- 41,3,97,37,1,0,0,68,46,117,112,100,97,116,101,40,
- 91,69,44,32,93,42,42,70,41,32,45,62,32,78,111,110,
- 101,46,32,32,85,112,100,97,116,101,32,68,32,102,114,111,
- 109,32,109,97,112,112,105,110,103,47,105,116,101,114,97,98,
- 108,101,32,69,32,97,110,100,32,70,46,10,73,102,32,69,
- 32,112,114,101,115,101,110,116,32,97,110,100,32,104,97,115,
- 32,97,32,46,107,101,121,115,40,41,32,109,101,116,104,111,
- 100,44,32,100,111,101,115,58,32,32,32,32,32,102,111,114,
- 32,107,32,105,110,32,69,46,107,101,121,115,40,41,58,32,
- 68,91,107,93,32,61,32,69,91,107,93,10,73,102,32,69,
- 32,112,114,101,115,101,110,116,32,97,110,100,32,108,97,99,
- 107,115,32,46,107,101,121,115,40,41,32,109,101,116,104,111,
- 100,44,32,100,111,101,115,58,32,32,32,32,32,102,111,114,
- 32,40,107,44,32,118,41,32,105,110,32,69,58,32,68,91,
- 107,93,32,61,32,118,10,73,110,32,101,105,116,104,101,114,
- 32,99,97,115,101,44,32,116,104,105,115,32,105,115,32,102,
- 111,108,108,111,119,101,100,32,98,121,58,32,102,111,114,32,
- 107,44,32,118,32,105,110,32,70,46,105,116,101,109,115,40,
- 41,58,32,68,91,107,93,32,61,32,118,10,114,161,1,0,
- 0,78,41,5,114,229,0,0,0,114,27,0,0,0,218,7,
- 104,97,115,97,116,116,114,114,161,1,0,0,114,164,1,0,
- 0,41,5,114,68,0,0,0,114,37,1,0,0,114,27,1,
- 0,0,114,149,1,0,0,114,102,0,0,0,115,5,0,0,
- 0,32,32,32,32,32,114,9,0,0,0,218,6,117,112,100,
- 97,116,101,218,21,77,117,116,97,98,108,101,77,97,112,112,
- 105,110,103,46,117,112,100,97,116,101,211,3,0,0,115,120,
- 0,0,0,128,0,244,12,0,12,22,144,101,156,87,215,11,
- 37,209,11,37,219,23,28,144,3,216,28,33,153,74,144,4,
- 147,9,242,3,0,24,29,228,13,20,144,85,152,70,215,13,
- 35,209,13,35,216,23,28,151,122,145,122,150,124,144,3,216,
- 28,33,153,74,144,4,147,9,242,3,0,24,36,243,6,0,
- 31,36,145,10,144,3,216,28,33,144,83,147,9,241,3,0,
- 31,36,224,26,30,159,42,153,42,158,44,137,74,136,67,216,
- 24,29,144,19,139,73,242,3,0,27,39,114,8,0,0,0,
- 78,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,
- 0,0,3,0,0,0,243,54,0,0,0,149,0,30,0,88,
- 1,5,0,0,0,36,0,33,0,91,0,0,0,0,0,0,
- 0,0,0,7,0,97,8,0,0,32,0,88,32,85,1,39,
- 0,0,0,31,0,85,2,36,0,102,0,61,3,31,0,102,
- 1,41,1,122,64,68,46,115,101,116,100,101,102,97,117,108,
- 116,40,107,91,44,100,93,41,32,45,62,32,68,46,103,101,
- 116,40,107,44,100,41,44,32,97,108,115,111,32,115,101,116,
- 32,68,91,107,93,61,100,32,105,102,32,107,32,110,111,116,
- 32,105,110,32,68,114,147,1,0,0,114,153,1,0,0,115,
- 3,0,0,0,32,32,32,114,9,0,0,0,218,10,115,101,
- 116,100,101,102,97,117,108,116,218,25,77,117,116,97,98,108,
- 101,77,97,112,112,105,110,103,46,115,101,116,100,101,102,97,
- 117,108,116,229,3,0,0,115,42,0,0,0,128,0,240,4,
- 3,9,32,216,19,23,145,57,208,12,28,248,220,15,23,243,
- 0,1,9,32,216,24,31,144,19,138,73,216,15,22,136,14,
- 240,5,1,9,32,250,115,12,0,0,0,130,3,6,0,134,
- 14,24,3,151,1,24,3,41,1,114,7,0,0,0,114,6,
- 0,0,0,41,17,114,78,0,0,0,114,79,0,0,0,114,
- 80,0,0,0,114,81,0,0,0,114,4,1,0,0,114,82,
- 0,0,0,114,4,0,0,0,114,212,1,0,0,114,215,1,
- 0,0,218,6,111,98,106,101,99,116,114,218,1,0,0,114,
- 126,1,0,0,114,221,1,0,0,114,129,1,0,0,114,227,
- 1,0,0,114,230,1,0,0,114,84,0,0,0,114,7,0,
- 0,0,114,8,0,0,0,114,9,0,0,0,114,28,0,0,
- 0,114,28,0,0,0,156,3,0,0,115,89,0,0,0,134,
- 0,241,2,6,5,8,240,16,0,17,19,128,73,224,5,19,
- 241,2,1,5,23,243,3,0,6,20,240,2,1,5,23,240,
- 6,0,6,20,241,2,1,5,23,243,3,0,6,20,240,2,
- 1,5,23,241,6,0,16,22,139,120,128,72,224,31,39,244,
- 0,12,5,25,242,28,10,5,26,242,24,6,5,17,244,16,
- 16,5,30,247,36,6,5,23,114,8,0,0,0,114,28,0,
- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,0,0,0,0,243,82,0,0,0,149,0,92,0,
- 114,1,83,0,114,2,83,1,114,3,83,2,114,4,83,3,
- 114,5,83,4,114,6,92,7,83,5,26,0,53,0,0,0,
- 0,0,0,0,114,8,83,6,26,0,114,9,83,7,26,0,
- 114,10,83,8,26,0,114,11,83,12,83,10,26,0,106,1,
- 114,12,83,11,26,0,114,13,83,3,114,14,103,9,41,13,
- 114,33,0,0,0,105,243,3,0,0,122,126,65,108,108,32,
- 116,104,101,32,111,112,101,114,97,116,105,111,110,115,32,111,
- 110,32,97,32,114,101,97,100,45,111,110,108,121,32,115,101,
- 113,117,101,110,99,101,46,10,10,67,111,110,99,114,101,116,
- 101,32,115,117,98,99,108,97,115,115,101,115,32,109,117,115,
- 116,32,111,118,101,114,114,105,100,101,32,95,95,110,101,119,
- 95,95,32,111,114,32,95,95,105,110,105,116,95,95,44,10,
- 95,95,103,101,116,105,116,101,109,95,95,44,32,97,110,100,
- 32,95,95,108,101,110,95,95,46,10,114,7,0,0,0,233,
- 32,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,
- 0,1,0,0,0,3,0,0,0,243,14,0,0,0,149,0,
- 91,0,0,0,0,0,0,0,0,0,101,1,114,6,0,0,
- 0,169,1,218,10,73,110,100,101,120,69,114,114,111,114,169,
- 2,114,68,0,0,0,218,5,105,110,100,101,120,115,2,0,
- 0,0,32,32,114,9,0,0,0,114,0,1,0,0,218,20,
- 83,101,113,117,101,110,99,101,46,95,95,103,101,116,105,116,
- 101,109,95,95,255,3,0,0,243,8,0,0,0,128,0,228,
- 14,24,208,8,24,114,8,0,0,0,99,1,0,0,0,0,
- 0,0,0,0,0,0,0,4,0,0,0,35,0,0,0,243,
- 80,0,0,0,35,0,32,0,149,0,83,1,110,1,30,0,
- 30,0,88,1,5,0,0,0,110,2,85,2,118,0,149,1,
- 32,0,85,1,83,2,45,13,0,0,110,1,77,15,0,0,
- 33,0,91,0,0,0,0,0,0,0,0,0,7,0,97,3,
- 0,0,32,0,31,0,103,0,102,0,61,3,31,0,102,1,
- 55,3,102,1,41,3,78,114,2,0,0,0,114,37,0,0,
- 0,114,236,1,0,0,41,3,114,68,0,0,0,218,1,105,
- 114,200,1,0,0,115,3,0,0,0,32,32,32,114,9,0,
- 0,0,114,165,0,0,0,218,17,83,101,113,117,101,110,99,
- 101,46,95,95,105,116,101,114,95,95,3,4,0,0,115,63,
- 0,0,0,233,0,128,0,216,12,13,136,1,240,2,6,9,
- 19,216,18,22,216,20,24,145,71,144,1,216,22,23,146,7,
- 216,16,17,144,81,145,6,144,1,241,7,0,19,23,248,244,
- 8,0,16,26,243,0,1,9,19,217,12,18,240,3,1,9,
- 19,252,115,24,0,0,0,130,3,38,1,134,16,22,0,150,
- 10,35,3,160,2,38,1,162,1,35,3,163,3,38,1,99,
- 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
- 3,0,0,0,243,44,0,0,0,149,0,85,0,19,0,72,
- 14,0,0,110,2,88,33,76,0,100,7,0,0,88,33,58,
- 88,0,0,100,2,0,0,77,14,0,0,32,0,103,1,11,
- 0,32,0,103,2,114,158,1,0,0,114,7,0,0,0,41,
- 3,114,68,0,0,0,114,102,0,0,0,114,200,1,0,0,
- 115,3,0,0,0,32,32,32,114,9,0,0,0,114,205,0,
- 0,0,218,21,83,101,113,117,101,110,99,101,46,95,95,99,
- 111,110,116,97,105,110,115,95,95,13,4,0,0,115,29,0,
- 0,0,128,0,219,17,21,136,65,216,15,16,138,122,152,81,
- 157,90,217,23,27,241,5,0,18,22,240,6,0,16,21,114,
- 8,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,7,0,0,0,35,0,0,0,243,96,0,0,0,35,0,
- 32,0,149,0,91,1,0,0,0,0,0,0,0,0,91,3,
- 0,0,0,0,0,0,0,0,91,5,0,0,0,0,0,0,
- 0,0,85,0,53,1,0,0,0,0,0,0,53,1,0,0,
- 0,0,0,0,53,1,0,0,0,0,0,0,19,0,72,9,
- 0,0,110,1,88,1,5,0,0,0,118,0,149,5,32,0,
- 77,11,0,0,11,0,32,0,103,0,55,3,102,1,114,6,
- 0,0,0,41,3,218,8,114,101,118,101,114,115,101,100,218,
- 5,114,97,110,103,101,114,231,0,0,0,41,2,114,68,0,
- 0,0,114,243,1,0,0,115,2,0,0,0,32,32,114,9,
- 0,0,0,114,180,0,0,0,218,21,83,101,113,117,101,110,
- 99,101,46,95,95,114,101,118,101,114,115,101,100,95,95,19,
- 4,0,0,115,36,0,0,0,233,0,128,0,220,17,25,156,
- 37,164,3,160,68,163,9,211,26,42,214,17,43,136,65,216,
- 18,22,145,39,140,77,242,3,0,18,44,249,115,4,0,0,
- 0,130,44,46,1,78,99,4,0,0,0,0,0,0,0,0,
- 0,0,0,5,0,0,0,3,0,0,0,243,254,0,0,0,
- 149,0,85,2,98,30,0,0,85,2,83,1,58,18,0,0,
- 97,24,0,0,91,1,0,0,0,0,0,0,0,0,91,3,
+ 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,5,
+ 0,0,0,3,0,0,0,243,118,0,0,0,149,0,91,1,
0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,
- 0,0,85,2,45,0,0,0,83,1,53,2,0,0,0,0,
- 0,0,110,2,85,3,98,20,0,0,85,3,83,1,58,18,
- 0,0,97,14,0,0,85,3,91,3,0,0,0,0,0,0,
- 0,0,85,0,53,1,0,0,0,0,0,0,45,13,0,0,
- 110,3,85,2,110,4,85,3,98,5,0,0,88,67,58,18,
- 0,0,97,33,0,0,30,0,88,4,5,0,0,0,110,5,
- 88,81,76,0,100,5,0,0,88,81,58,88,0,0,97,2,
- 0,0,85,4,36,0,85,4,83,2,45,13,0,0,110,4,
- 85,3,99,2,0,0,77,26,0,0,88,67,58,18,0,0,
- 97,2,0,0,77,33,0,0,91,6,0,0,0,0,0,0,
- 0,0,101,1,33,0,91,4,0,0,0,0,0,0,0,0,
- 7,0,97,8,0,0,32,0,31,0,91,6,0,0,0,0,
- 0,0,0,0,101,1,102,0,61,3,31,0,102,1,41,3,
- 122,189,83,46,105,110,100,101,120,40,118,97,108,117,101,44,
- 32,91,115,116,97,114,116,44,32,91,115,116,111,112,93,93,
- 41,32,45,62,32,105,110,116,101,103,101,114,32,45,45,32,
- 114,101,116,117,114,110,32,102,105,114,115,116,32,105,110,100,
- 101,120,32,111,102,32,118,97,108,117,101,46,10,82,97,105,
- 115,101,115,32,86,97,108,117,101,69,114,114,111,114,32,105,
+ 0,0,110,1,91,3,0,0,0,0,0,0,0,0,85,1,
+ 83,1,45,2,0,0,53,1,0,0,0,0,0,0,19,0,
+ 72,28,0,0,110,2,88,1,85,2,45,10,0,0,83,2,
+ 45,10,0,0,5,0,0,0,88,2,5,0,0,0,115,2,
+ 88,2,39,0,0,0,88,1,85,2,45,10,0,0,83,2,
+ 45,10,0,0,39,0,0,0,77,30,0,0,11,0,32,0,
+ 103,3,41,4,122,33,83,46,114,101,118,101,114,115,101,40,
+ 41,32,45,45,32,114,101,118,101,114,115,101,32,42,73,78,
+ 32,80,76,65,67,69,42,114,228,0,0,0,114,37,0,0,
+ 0,78,41,2,114,231,0,0,0,114,249,1,0,0,41,3,
+ 114,68,0,0,0,114,102,1,0,0,114,243,1,0,0,115,
+ 3,0,0,0,32,32,32,114,9,0,0,0,218,7,114,101,
+ 118,101,114,115,101,218,23,77,117,116,97,98,108,101,83,101,
+ 113,117,101,110,99,101,46,114,101,118,101,114,115,101,129,4,
+ 0,0,115,65,0,0,0,128,0,228,12,15,144,4,139,73,
+ 136,1,220,17,22,144,113,152,33,145,116,150,27,136,65,216,
+ 35,39,168,33,169,3,168,65,169,5,161,59,176,4,177,7,
+ 208,12,32,136,68,137,71,144,84,152,65,153,35,152,97,153,
+ 37,147,91,242,3,0,18,29,114,8,0,0,0,99,2,0,
+ 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,
+ 0,0,243,86,0,0,0,149,0,88,16,76,0,97,11,0,
+ 0,91,1,0,0,0,0,0,0,0,0,85,1,53,1,0,
+ 0,0,0,0,0,110,1,85,1,19,0,72,20,0,0,110,
+ 2,85,0,82,3,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,85,2,53,1,0,0,0,0,0,
+ 0,32,0,77,22,0,0,11,0,32,0,103,1,41,2,122,
+ 77,83,46,101,120,116,101,110,100,40,105,116,101,114,97,98,
+ 108,101,41,32,45,45,32,101,120,116,101,110,100,32,115,101,
+ 113,117,101,110,99,101,32,98,121,32,97,112,112,101,110,100,
+ 105,110,103,32,101,108,101,109,101,110,116,115,32,102,114,111,
+ 109,32,116,104,101,10,105,116,101,114,97,98,108,101,78,41,
+ 2,114,233,0,0,0,114,36,2,0,0,41,3,114,68,0,
+ 0,0,114,167,1,0,0,114,200,1,0,0,115,3,0,0,
+ 0,32,32,32,114,9,0,0,0,218,6,101,120,116,101,110,
+ 100,218,22,77,117,116,97,98,108,101,83,101,113,117,101,110,
+ 99,101,46,101,120,116,101,110,100,135,4,0,0,115,39,0,
+ 0,0,128,0,240,6,0,12,18,138,62,220,21,25,152,38,
+ 147,92,136,70,219,17,23,136,65,216,12,16,143,75,137,75,
+ 152,1,142,78,242,3,0,18,24,114,8,0,0,0,99,2,
+ 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,
+ 0,0,0,243,18,0,0,0,149,0,88,1,5,0,0,0,
+ 110,2,88,1,9,0,85,2,36,0,41,1,122,135,83,46,
+ 112,111,112,40,91,105,110,100,101,120,93,41,32,45,62,32,
+ 105,116,101,109,32,45,45,32,114,101,109,111,118,101,32,97,
+ 110,100,32,114,101,116,117,114,110,32,105,116,101,109,32,97,
+ 116,32,105,110,100,101,120,32,40,100,101,102,97,117,108,116,
+ 10,108,97,115,116,41,46,32,32,82,97,105,115,101,32,73,
+ 110,100,101,120,69,114,114,111,114,32,105,102,32,108,105,115,
+ 116,32,105,115,32,101,109,112,116,121,32,111,114,32,105,110,
+ 100,101,120,32,105,115,32,111,117,116,32,111,102,32,114,97,
+ 110,103,101,46,10,114,7,0,0,0,41,3,114,68,0,0,
+ 0,114,239,1,0,0,114,200,1,0,0,115,3,0,0,0,
+ 32,32,32,114,9,0,0,0,114,126,1,0,0,218,19,77,
+ 117,116,97,98,108,101,83,101,113,117,101,110,99,101,46,112,
+ 111,112,143,4,0,0,115,21,0,0,0,128,0,240,8,0,
+ 13,17,137,75,136,1,216,12,16,136,75,216,15,16,136,8,
+ 114,8,0,0,0,99,2,0,0,0,0,0,0,0,0,0,
+ 0,0,4,0,0,0,3,0,0,0,243,38,0,0,0,149,
+ 0,88,0,82,1,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,85,1,53,1,0,0,0,0,0,
+ 0,9,0,103,1,41,2,122,99,83,46,114,101,109,111,118,
+ 101,40,118,97,108,117,101,41,32,45,45,32,114,101,109,111,
+ 118,101,32,102,105,114,115,116,32,111,99,99,117,114,114,101,
+ 110,99,101,32,111,102,32,118,97,108,117,101,46,10,82,97,
+ 105,115,101,32,86,97,108,117,101,69,114,114,111,114,32,105,
102,32,116,104,101,32,118,97,108,117,101,32,105,115,32,110,
- 111,116,32,112,114,101,115,101,110,116,46,10,10,83,117,112,
- 112,111,114,116,105,110,103,32,115,116,97,114,116,32,97,110,
- 100,32,115,116,111,112,32,97,114,103,117,109,101,110,116,115,
- 32,105,115,32,111,112,116,105,111,110,97,108,44,32,98,117,
- 116,10,114,101,99,111,109,109,101,110,100,101,100,46,10,114,
- 2,0,0,0,114,37,0,0,0,41,4,218,3,109,97,120,
- 114,231,0,0,0,114,237,1,0,0,218,10,86,97,108,117,
- 101,69,114,114,111,114,41,6,114,68,0,0,0,114,102,0,
- 0,0,218,5,115,116,97,114,116,218,4,115,116,111,112,114,
- 243,1,0,0,114,200,1,0,0,115,6,0,0,0,32,32,
- 32,32,32,32,114,9,0,0,0,114,239,1,0,0,218,14,
- 83,101,113,117,101,110,99,101,46,105,110,100,101,120,23,4,
- 0,0,115,161,0,0,0,128,0,240,14,0,12,17,209,11,
- 28,160,21,168,17,163,25,220,20,23,156,3,152,68,155,9,
- 160,69,209,24,41,168,49,211,20,45,136,69,216,11,15,209,
- 11,27,160,4,160,113,163,8,216,12,16,148,67,152,4,147,
- 73,209,12,29,136,68,224,12,17,136,1,216,14,18,137,108,
- 152,97,155,104,240,2,3,13,22,216,20,24,145,71,144,1,
- 240,6,0,16,17,138,122,152,81,155,90,216,23,24,144,8,
- 216,12,13,144,17,137,70,136,65,240,15,0,15,19,139,108,
- 152,97,157,104,244,16,0,15,25,208,8,24,248,244,11,0,
- 20,30,243,0,1,13,22,216,16,21,244,8,0,15,25,208,
- 8,24,240,11,1,13,22,250,115,18,0,0,0,193,4,4,
- 65,42,0,193,42,10,65,60,3,193,59,1,65,60,3,99,
- 2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
- 3,0,0,0,243,46,0,0,0,94,1,149,0,91,1,0,
- 0,0,0,0,0,0,0,85,1,52,1,83,1,26,0,106,
- 8,85,0,19,0,53,0,0,0,0,0,0,0,53,1,0,
- 0,0,0,0,0,36,0,41,2,122,66,83,46,99,111,117,
- 110,116,40,118,97,108,117,101,41,32,45,62,32,105,110,116,
- 101,103,101,114,32,45,45,32,114,101,116,117,114,110,32,110,
- 117,109,98,101,114,32,111,102,32,111,99,99,117,114,114,101,
- 110,99,101,115,32,111,102,32,118,97,108,117,101,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,3,0,0,0,51,0,
- 0,0,243,64,0,0,0,62,1,35,0,32,0,149,0,85,
- 0,19,0,72,19,0,0,111,17,84,2,76,0,100,8,0,
- 0,85,1,84,2,58,88,0,0,100,2,0,0,77,15,0,
- 0,83,0,118,0,149,5,32,0,77,21,0,0,11,0,32,
- 0,103,1,55,3,102,1,41,2,114,37,0,0,0,78,114,
- 7,0,0,0,41,3,114,12,1,0,0,114,200,1,0,0,
- 114,102,0,0,0,115,3,0,0,0,32,32,128,114,9,0,
- 0,0,114,15,1,0,0,218,33,83,101,113,117,101,110,99,
- 101,46,99,111,117,110,116,46,60,108,111,99,97,108,115,62,
- 46,60,103,101,110,101,120,112,114,62,48,4,0,0,115,29,
- 0,0,0,248,233,0,128,0,208,18,63,154,100,152,17,168,
- 53,162,106,176,65,184,21,177,74,151,49,145,49,154,100,249,
- 115,8,0,0,0,131,14,30,1,149,9,30,1,41,1,218,
- 3,115,117,109,114,101,0,0,0,115,2,0,0,0,32,96,
- 114,9,0,0,0,218,5,99,111,117,110,116,218,14,83,101,
- 113,117,101,110,99,101,46,99,111,117,110,116,46,4,0,0,
- 115,20,0,0,0,248,128,0,228,15,18,212,18,63,153,100,
- 211,18,63,211,15,63,208,8,63,114,8,0,0,0,41,2,
- 114,2,0,0,0,78,41,15,114,78,0,0,0,114,79,0,
+ 111,116,32,112,114,101,115,101,110,116,46,10,78,41,1,114,
+ 239,1,0,0,114,101,0,0,0,115,2,0,0,0,32,32,
+ 114,9,0,0,0,114,120,1,0,0,218,22,77,117,116,97,
+ 98,108,101,83,101,113,117,101,110,99,101,46,114,101,109,111,
+ 118,101,151,4,0,0,115,19,0,0,0,128,0,240,8,0,
+ 13,17,151,26,145,26,152,69,211,17,34,209,12,35,114,8,
+ 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,
+ 3,0,0,0,3,0,0,0,243,40,0,0,0,149,0,85,
+ 0,82,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,85,1,53,1,0,0,0,0,0,0,32,
+ 0,85,0,36,0,114,6,0,0,0,41,1,114,44,2,0,
+ 0,41,2,114,68,0,0,0,114,167,1,0,0,115,2,0,
+ 0,0,32,32,114,9,0,0,0,218,8,95,95,105,97,100,
+ 100,95,95,218,24,77,117,116,97,98,108,101,83,101,113,117,
+ 101,110,99,101,46,95,95,105,97,100,100,95,95,157,4,0,
+ 0,115,19,0,0,0,128,0,216,8,12,143,11,137,11,144,
+ 70,212,8,27,216,15,19,136,11,114,8,0,0,0,78,41,
+ 1,114,244,0,0,0,41,18,114,78,0,0,0,114,79,0,
0,0,114,80,0,0,0,114,81,0,0,0,114,4,1,0,
- 0,114,82,0,0,0,114,172,1,0,0,114,4,0,0,0,
- 114,0,1,0,0,114,165,0,0,0,114,205,0,0,0,114,
- 180,0,0,0,114,239,1,0,0,114,5,2,0,0,114,84,
- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,9,0,
- 0,0,114,33,0,0,0,114,33,0,0,0,243,3,0,0,
- 115,65,0,0,0,134,0,241,2,4,5,8,240,12,0,17,
- 19,128,73,240,6,0,23,29,128,79,224,5,19,241,2,1,
- 5,25,243,3,0,6,20,240,2,1,5,25,242,6,8,5,
- 19,242,20,4,5,21,242,12,2,5,26,244,8,21,5,25,
- 245,46,2,5,64,1,114,8,0,0,0,114,33,0,0,0,
- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
- 0,0,0,0,0,243,52,0,0,0,94,0,149,0,92,0,
- 114,1,83,0,114,2,83,1,114,3,85,0,52,1,83,2,
- 26,0,106,8,114,4,85,0,52,1,83,3,26,0,106,8,
- 114,5,83,4,114,6,85,0,61,1,114,7,36,0,41,5,
- 218,24,95,68,101,112,114,101,99,97,116,101,66,121,116,101,
- 83,116,114,105,110,103,77,101,116,97,105,55,4,0,0,99,
- 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,
- 11,0,0,0,243,92,0,0,0,62,1,149,0,85,1,83,
- 1,58,119,0,0,97,20,0,0,83,2,83,0,75,0,110,
- 5,85,5,82,3,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,83,3,83,4,83,5,57,2,32,
- 0,91,4,0,0,0,0,0,0,0,0,84,6,85,0,93,
- 12,0,0,34,0,88,1,88,35,52,4,48,0,85,4,68,
- 1,54,1,36,0,41,6,78,114,35,0,0,0,114,2,0,
- 0,0,250,26,99,111,108,108,101,99,116,105,111,110,115,46,
- 97,98,99,46,66,121,116,101,83,116,114,105,110,103,169,2,
- 233,3,0,0,0,233,17,0,0,0,169,1,114,120,1,0,
- 0,41,4,218,8,119,97,114,110,105,110,103,115,218,11,95,
- 100,101,112,114,101,99,97,116,101,100,114,235,0,0,0,114,
- 236,0,0,0,41,7,114,74,0,0,0,114,13,1,0,0,
- 218,5,98,97,115,101,115,218,9,110,97,109,101,115,112,97,
- 99,101,218,6,107,119,97,114,103,115,114,15,2,0,0,114,
- 241,0,0,0,115,7,0,0,0,32,32,32,32,32,32,128,
- 114,9,0,0,0,114,236,0,0,0,218,32,95,68,101,112,
- 114,101,99,97,116,101,66,121,116,101,83,116,114,105,110,103,
- 77,101,116,97,46,95,95,110,101,119,95,95,56,4,0,0,
- 115,63,0,0,0,248,128,0,216,11,15,144,60,211,11,31,
- 219,12,27,224,12,20,215,12,32,209,12,32,216,16,44,216,
- 23,30,240,5,0,13,33,241,0,3,13,14,244,8,0,16,
- 21,137,119,138,127,152,115,168,37,209,15,69,184,102,209,15,
- 69,208,8,69,114,8,0,0,0,99,2,0,0,0,0,0,
- 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,74,
- 0,0,0,62,1,149,0,83,1,83,0,75,0,110,2,85,
- 2,82,3,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,83,2,83,3,83,4,57,2,32,0,91,
- 4,0,0,0,0,0,0,0,0,84,3,85,0,93,13,0,
- 0,85,1,53,1,0,0,0,0,0,0,36,0,41,5,78,
- 114,2,0,0,0,114,10,2,0,0,114,11,2,0,0,114,
- 14,2,0,0,41,4,114,15,2,0,0,114,16,2,0,0,
- 114,235,0,0,0,218,17,95,95,105,110,115,116,97,110,99,
- 101,99,104,101,99,107,95,95,41,4,114,74,0,0,0,218,
- 8,105,110,115,116,97,110,99,101,114,15,2,0,0,114,241,
- 0,0,0,115,4,0,0,0,32,32,32,128,114,9,0,0,
- 0,114,22,2,0,0,218,42,95,68,101,112,114,101,99,97,
- 116,101,66,121,116,101,83,116,114,105,110,103,77,101,116,97,
- 46,95,95,105,110,115,116,97,110,99,101,99,104,101,99,107,
- 95,95,66,4,0,0,115,49,0,0,0,248,128,0,219,8,
- 23,224,8,16,215,8,28,209,8,28,216,12,40,216,19,26,
- 240,5,0,9,29,241,0,3,9,10,244,8,0,16,21,137,
- 119,209,15,40,168,24,211,15,50,208,8,50,114,8,0,0,
- 0,114,7,0,0,0,41,8,114,78,0,0,0,114,79,0,
- 0,0,114,80,0,0,0,114,81,0,0,0,114,236,0,0,
- 0,114,22,2,0,0,114,84,0,0,0,114,5,1,0,0,
- 114,6,1,0,0,115,1,0,0,0,64,114,9,0,0,0,
- 114,8,2,0,0,114,8,2,0,0,55,4,0,0,115,19,
- 0,0,0,248,134,0,245,2,8,5,70,1,247,20,7,5,
- 51,243,0,7,5,51,114,8,0,0,0,114,8,2,0,0,
- 99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
- 0,0,0,0,0,243,28,0,0,0,149,0,92,0,114,1,
- 83,0,114,2,83,1,114,3,83,2,114,4,83,3,114,5,
- 83,3,114,6,103,4,41,5,114,35,0,0,0,105,75,4,
- 0,0,97,143,1,0,0,68,101,112,114,101,99,97,116,101,
- 100,32,65,66,67,32,115,101,114,118,105,110,103,32,97,115,
- 32,97,32,99,111,109,109,111,110,32,115,117,112,101,114,116,
- 121,112,101,32,111,102,32,96,96,98,121,116,101,115,96,96,
- 32,97,110,100,32,96,96,98,121,116,101,97,114,114,97,121,
- 96,96,46,10,10,84,104,105,115,32,65,66,67,32,105,115,
- 32,115,99,104,101,100,117,108,101,100,32,102,111,114,32,114,
- 101,109,111,118,97,108,32,105,110,32,80,121,116,104,111,110,
- 32,51,46,49,55,46,10,85,115,101,32,96,96,105,115,105,
- 110,115,116,97,110,99,101,40,111,98,106,44,32,99,111,108,
- 108,101,99,116,105,111,110,115,46,97,98,99,46,66,117,102,
- 102,101,114,41,96,96,32,116,111,32,116,101,115,116,32,105,
- 102,32,96,96,111,98,106,96,96,10,105,109,112,108,101,109,
- 101,110,116,115,32,116,104,101,32,98,117,102,102,101,114,32,
- 112,114,111,116,111,99,111,108,32,97,116,32,114,117,110,116,
- 105,109,101,46,32,70,111,114,32,117,115,101,32,105,110,32,
- 116,121,112,101,32,97,110,110,111,116,97,116,105,111,110,115,
- 44,10,101,105,116,104,101,114,32,117,115,101,32,96,96,66,
- 117,102,102,101,114,96,96,32,111,114,32,97,32,117,110,105,
- 111,110,32,116,104,97,116,32,101,120,112,108,105,99,105,116,
- 108,121,32,115,112,101,99,105,102,105,101,115,32,116,104,101,
- 32,116,121,112,101,115,32,121,111,117,114,10,99,111,100,101,
- 32,115,117,112,112,111,114,116,115,32,40,101,46,103,46,44,
- 32,96,96,98,121,116,101,115,32,124,32,98,121,116,101,97,
- 114,114,97,121,32,124,32,109,101,109,111,114,121,118,105,101,
- 119,96,96,41,46,10,114,7,0,0,0,78,41,7,114,78,
- 0,0,0,114,79,0,0,0,114,80,0,0,0,114,81,0,
- 0,0,114,4,1,0,0,114,82,0,0,0,114,84,0,0,
- 0,114,7,0,0,0,114,8,0,0,0,114,9,0,0,0,
- 114,35,0,0,0,114,35,0,0,0,75,4,0,0,115,14,
- 0,0,0,134,0,241,2,7,5,8,240,18,0,17,19,131,
- 73,114,8,0,0,0,114,35,0,0,0,99,0,0,0,0,
- 0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
- 243,122,0,0,0,149,0,92,0,114,1,83,0,114,2,83,
- 1,114,3,83,2,114,4,83,3,114,5,92,6,83,4,26,
- 0,53,0,0,0,0,0,0,0,114,7,92,6,83,5,26,
- 0,53,0,0,0,0,0,0,0,114,8,92,6,83,6,26,
- 0,53,0,0,0,0,0,0,0,114,9,83,7,26,0,114,
- 10,83,8,26,0,114,11,83,9,26,0,114,12,83,10,26,
- 0,114,13,83,15,83,11,26,0,106,1,114,14,83,12,26,
- 0,114,15,83,13,26,0,114,16,83,3,114,17,103,14,41,
- 16,114,34,0,0,0,105,91,4,0,0,122,162,65,108,108,
- 32,116,104,101,32,111,112,101,114,97,116,105,111,110,115,32,
- 111,110,32,97,32,114,101,97,100,45,119,114,105,116,101,32,
- 115,101,113,117,101,110,99,101,46,10,10,67,111,110,99,114,
- 101,116,101,32,115,117,98,99,108,97,115,115,101,115,32,109,
- 117,115,116,32,112,114,111,118,105,100,101,32,95,95,110,101,
- 119,95,95,32,111,114,32,95,95,105,110,105,116,95,95,44,
- 10,95,95,103,101,116,105,116,101,109,95,95,44,32,95,95,
- 115,101,116,105,116,101,109,95,95,44,32,95,95,100,101,108,
- 105,116,101,109,95,95,44,32,95,95,108,101,110,95,95,44,
- 32,97,110,100,32,105,110,115,101,114,116,40,41,46,10,114,
- 7,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
- 0,1,0,0,0,3,0,0,0,243,14,0,0,0,149,0,
- 91,0,0,0,0,0,0,0,0,0,101,1,114,6,0,0,
- 0,114,236,1,0,0,169,3,114,68,0,0,0,114,239,1,
- 0,0,114,102,0,0,0,115,3,0,0,0,32,32,32,114,
- 9,0,0,0,114,212,1,0,0,218,27,77,117,116,97,98,
- 108,101,83,101,113,117,101,110,99,101,46,95,95,115,101,116,
- 105,116,101,109,95,95,100,4,0,0,114,241,1,0,0,114,
- 8,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,
- 0,1,0,0,0,3,0,0,0,243,14,0,0,0,149,0,
- 91,0,0,0,0,0,0,0,0,0,101,1,114,6,0,0,
- 0,114,236,1,0,0,114,238,1,0,0,115,2,0,0,0,
- 32,32,114,9,0,0,0,114,215,1,0,0,218,27,77,117,
- 116,97,98,108,101,83,101,113,117,101,110,99,101,46,95,95,
- 100,101,108,105,116,101,109,95,95,104,4,0,0,114,241,1,
- 0,0,114,8,0,0,0,99,3,0,0,0,0,0,0,0,
- 0,0,0,0,1,0,0,0,3,0,0,0,243,14,0,0,
- 0,149,0,91,0,0,0,0,0,0,0,0,0,101,1,41,
- 1,122,51,83,46,105,110,115,101,114,116,40,105,110,100,101,
- 120,44,32,118,97,108,117,101,41,32,45,45,32,105,110,115,
- 101,114,116,32,118,97,108,117,101,32,98,101,102,111,114,101,
- 32,105,110,100,101,120,114,236,1,0,0,114,28,2,0,0,
- 115,3,0,0,0,32,32,32,114,9,0,0,0,218,6,105,
- 110,115,101,114,116,218,22,77,117,116,97,98,108,101,83,101,
- 113,117,101,110,99,101,46,105,110,115,101,114,116,108,4,0,
- 0,115,10,0,0,0,128,0,244,6,0,15,25,208,8,24,
- 114,8,0,0,0,99,2,0,0,0,0,0,0,0,0,0,
- 0,0,5,0,0,0,3,0,0,0,243,58,0,0,0,149,
- 0,85,0,82,1,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,91,3,0,0,0,0,0,0,0,
- 0,85,0,53,1,0,0,0,0,0,0,85,1,53,2,0,
- 0,0,0,0,0,32,0,103,1,41,2,122,58,83,46,97,
- 112,112,101,110,100,40,118,97,108,117,101,41,32,45,45,32,
- 97,112,112,101,110,100,32,118,97,108,117,101,32,116,111,32,
- 116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,115,
- 101,113,117,101,110,99,101,78,41,2,114,33,2,0,0,114,
- 231,0,0,0,114,101,0,0,0,115,2,0,0,0,32,32,
- 114,9,0,0,0,218,6,97,112,112,101,110,100,218,22,77,
- 117,116,97,98,108,101,83,101,113,117,101,110,99,101,46,97,
- 112,112,101,110,100,113,4,0,0,115,20,0,0,0,128,0,
- 224,8,12,143,11,137,11,148,67,152,4,147,73,152,117,213,
- 8,37,114,8,0,0,0,99,1,0,0,0,0,0,0,0,
- 0,0,0,0,4,0,0,0,3,0,0,0,243,74,0,0,
- 0,149,0,30,0,30,0,85,0,82,1,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,53,0,0,
- 0,0,0,0,0,32,0,77,18,0,0,33,0,91,2,0,
- 0,0,0,0,0,0,0,7,0,97,3,0,0,32,0,31,
- 0,103,1,102,0,61,3,31,0,102,1,41,2,122,44,83,
- 46,99,108,101,97,114,40,41,32,45,62,32,78,111,110,101,
- 32,45,45,32,114,101,109,111,118,101,32,97,108,108,32,105,
- 116,101,109,115,32,102,114,111,109,32,83,78,41,2,114,126,
- 1,0,0,114,237,1,0,0,114,67,0,0,0,115,1,0,
- 0,0,32,114,9,0,0,0,114,129,1,0,0,218,21,77,
- 117,116,97,98,108,101,83,101,113,117,101,110,99,101,46,99,
- 108,101,97,114,117,4,0,0,115,42,0,0,0,128,0,240,
- 4,4,9,17,216,18,22,216,16,20,151,8,145,8,148,10,
- 241,3,0,19,23,248,228,15,25,243,0,1,9,17,217,12,
- 16,240,3,1,9,17,250,114,131,1,0,0,99,1,0,0,
- 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,
- 0,243,118,0,0,0,149,0,91,1,0,0,0,0,0,0,
- 0,0,85,0,53,1,0,0,0,0,0,0,110,1,91,3,
- 0,0,0,0,0,0,0,0,85,1,83,1,45,2,0,0,
- 53,1,0,0,0,0,0,0,19,0,72,28,0,0,110,2,
- 88,1,85,2,45,10,0,0,83,2,45,10,0,0,5,0,
- 0,0,88,2,5,0,0,0,115,2,88,2,39,0,0,0,
- 88,1,85,2,45,10,0,0,83,2,45,10,0,0,39,0,
- 0,0,77,30,0,0,11,0,32,0,103,3,41,4,122,33,
- 83,46,114,101,118,101,114,115,101,40,41,32,45,45,32,114,
- 101,118,101,114,115,101,32,42,73,78,32,80,76,65,67,69,
- 42,114,228,0,0,0,114,37,0,0,0,78,41,2,114,231,
- 0,0,0,114,249,1,0,0,41,3,114,68,0,0,0,114,
- 102,1,0,0,114,243,1,0,0,115,3,0,0,0,32,32,
- 32,114,9,0,0,0,218,7,114,101,118,101,114,115,101,218,
- 23,77,117,116,97,98,108,101,83,101,113,117,101,110,99,101,
- 46,114,101,118,101,114,115,101,125,4,0,0,115,65,0,0,
- 0,128,0,228,12,15,144,4,139,73,136,1,220,17,22,144,
- 113,152,33,145,116,150,27,136,65,216,35,39,168,33,169,3,
- 168,65,169,5,161,59,176,4,177,7,208,12,32,136,68,137,
- 71,144,84,152,65,153,35,152,97,153,37,147,91,242,3,0,
- 18,29,114,8,0,0,0,99,2,0,0,0,0,0,0,0,
- 0,0,0,0,4,0,0,0,3,0,0,0,243,86,0,0,
- 0,149,0,88,16,76,0,97,11,0,0,91,1,0,0,0,
- 0,0,0,0,0,85,1,53,1,0,0,0,0,0,0,110,
- 1,85,1,19,0,72,20,0,0,110,2,85,0,82,3,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,85,2,53,1,0,0,0,0,0,0,32,0,77,22,0,
- 0,11,0,32,0,103,1,41,2,122,77,83,46,101,120,116,
- 101,110,100,40,105,116,101,114,97,98,108,101,41,32,45,45,
- 32,101,120,116,101,110,100,32,115,101,113,117,101,110,99,101,
- 32,98,121,32,97,112,112,101,110,100,105,110,103,32,101,108,
- 101,109,101,110,116,115,32,102,114,111,109,32,116,104,101,32,
- 105,116,101,114,97,98,108,101,78,41,2,114,233,0,0,0,
- 114,36,2,0,0,41,3,114,68,0,0,0,114,167,1,0,
- 0,114,200,1,0,0,115,3,0,0,0,32,32,32,114,9,
- 0,0,0,218,6,101,120,116,101,110,100,218,22,77,117,116,
- 97,98,108,101,83,101,113,117,101,110,99,101,46,101,120,116,
- 101,110,100,131,4,0,0,115,37,0,0,0,128,0,224,11,
- 17,138,62,220,21,25,152,38,147,92,136,70,219,17,23,136,
- 65,216,12,16,143,75,137,75,152,1,142,78,242,3,0,18,
- 24,114,8,0,0,0,99,2,0,0,0,0,0,0,0,0,
- 0,0,0,2,0,0,0,3,0,0,0,243,18,0,0,0,
- 149,0,88,1,5,0,0,0,110,2,88,1,9,0,85,2,
- 36,0,41,1,122,134,83,46,112,111,112,40,91,105,110,100,
- 101,120,93,41,32,45,62,32,105,116,101,109,32,45,45,32,
- 114,101,109,111,118,101,32,97,110,100,32,114,101,116,117,114,
- 110,32,105,116,101,109,32,97,116,32,105,110,100,101,120,32,
- 40,100,101,102,97,117,108,116,32,108,97,115,116,41,46,10,
- 82,97,105,115,101,32,73,110,100,101,120,69,114,114,111,114,
- 32,105,102,32,108,105,115,116,32,105,115,32,101,109,112,116,
- 121,32,111,114,32,105,110,100,101,120,32,105,115,32,111,117,
- 116,32,111,102,32,114,97,110,103,101,46,10,114,7,0,0,
- 0,41,3,114,68,0,0,0,114,239,1,0,0,114,200,1,
- 0,0,115,3,0,0,0,32,32,32,114,9,0,0,0,114,
- 126,1,0,0,218,19,77,117,116,97,98,108,101,83,101,113,
- 117,101,110,99,101,46,112,111,112,138,4,0,0,115,21,0,
- 0,0,128,0,240,8,0,13,17,137,75,136,1,216,12,16,
- 136,75,216,15,16,136,8,114,8,0,0,0,99,2,0,0,
- 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,
- 0,243,38,0,0,0,149,0,88,0,82,1,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,1,
- 53,1,0,0,0,0,0,0,9,0,103,1,41,2,122,99,
- 83,46,114,101,109,111,118,101,40,118,97,108,117,101,41,32,
- 45,45,32,114,101,109,111,118,101,32,102,105,114,115,116,32,
- 111,99,99,117,114,114,101,110,99,101,32,111,102,32,118,97,
- 108,117,101,46,10,82,97,105,115,101,32,86,97,108,117,101,
- 69,114,114,111,114,32,105,102,32,116,104,101,32,118,97,108,
- 117,101,32,105,115,32,110,111,116,32,112,114,101,115,101,110,
- 116,46,10,78,41,1,114,239,1,0,0,114,101,0,0,0,
- 115,2,0,0,0,32,32,114,9,0,0,0,114,120,1,0,
- 0,218,22,77,117,116,97,98,108,101,83,101,113,117,101,110,
- 99,101,46,114,101,109,111,118,101,146,4,0,0,115,19,0,
- 0,0,128,0,240,8,0,13,17,151,26,145,26,152,69,211,
- 17,34,209,12,35,114,8,0,0,0,99,2,0,0,0,0,
- 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,243,
- 40,0,0,0,149,0,85,0,82,1,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,85,1,53,1,
- 0,0,0,0,0,0,32,0,85,0,36,0,114,6,0,0,
- 0,41,1,114,44,2,0,0,41,2,114,68,0,0,0,114,
- 167,1,0,0,115,2,0,0,0,32,32,114,9,0,0,0,
- 218,8,95,95,105,97,100,100,95,95,218,24,77,117,116,97,
- 98,108,101,83,101,113,117,101,110,99,101,46,95,95,105,97,
- 100,100,95,95,152,4,0,0,115,19,0,0,0,128,0,216,
- 8,12,143,11,137,11,144,70,212,8,27,216,15,19,136,11,
- 114,8,0,0,0,78,41,1,114,244,0,0,0,41,18,114,
- 78,0,0,0,114,79,0,0,0,114,80,0,0,0,114,81,
- 0,0,0,114,4,1,0,0,114,82,0,0,0,114,4,0,
- 0,0,114,212,1,0,0,114,215,1,0,0,114,33,2,0,
- 0,114,36,2,0,0,114,129,1,0,0,114,41,2,0,0,
- 114,44,2,0,0,114,126,1,0,0,114,120,1,0,0,114,
- 51,2,0,0,114,84,0,0,0,114,7,0,0,0,114,8,
- 0,0,0,114,9,0,0,0,114,34,0,0,0,114,34,0,
- 0,0,91,4,0,0,115,107,0,0,0,134,0,241,2,4,
- 5,8,240,12,0,17,19,128,73,224,5,19,241,2,1,5,
- 25,243,3,0,6,20,240,2,1,5,25,240,6,0,6,20,
- 241,2,1,5,25,243,3,0,6,20,240,2,1,5,25,240,
- 6,0,6,20,241,2,2,5,25,243,3,0,6,20,240,2,
- 2,5,25,242,8,2,5,38,242,8,6,5,17,242,16,4,
- 5,56,242,12,5,5,27,244,14,6,5,17,242,16,4,5,
- 36,245,12,2,5,20,114,8,0,0,0,114,34,0,0,0,
- 41,87,114,4,1,0,0,218,3,97,98,99,114,3,0,0,
- 0,114,4,0,0,0,114,41,0,0,0,114,40,0,0,0,
- 114,233,0,0,0,114,223,0,0,0,114,94,0,0,0,218,
- 12,69,108,108,105,112,115,105,115,84,121,112,101,114,10,0,
- 0,0,114,23,1,0,0,218,7,95,95,97,108,108,95,95,
- 114,78,0,0,0,114,123,1,0,0,218,14,98,121,116,101,
- 115,95,105,116,101,114,97,116,111,114,218,9,98,121,116,101,
- 97,114,114,97,121,218,18,98,121,116,101,97,114,114,97,121,
- 95,105,116,101,114,97,116,111,114,114,161,1,0,0,218,16,
- 100,105,99,116,95,107,101,121,105,116,101,114,97,116,111,114,
- 114,167,1,0,0,218,18,100,105,99,116,95,118,97,108,117,
- 101,105,116,101,114,97,116,111,114,114,164,1,0,0,218,17,
- 100,105,99,116,95,105,116,101,109,105,116,101,114,97,116,111,
- 114,218,13,108,105,115,116,95,105,116,101,114,97,116,111,114,
- 114,248,1,0,0,218,20,108,105,115,116,95,114,101,118,101,
- 114,115,101,105,116,101,114,97,116,111,114,114,249,1,0,0,
- 218,14,114,97,110,103,101,95,105,116,101,114,97,116,111,114,
- 218,18,108,111,110,103,114,97,110,103,101,95,105,116,101,114,
- 97,116,111,114,114,188,1,0,0,218,12,115,101,116,95,105,
- 116,101,114,97,116,111,114,218,12,115,116,114,95,105,116,101,
- 114,97,116,111,114,218,14,116,117,112,108,101,95,105,116,101,
- 114,97,116,111,114,218,3,122,105,112,218,12,122,105,112,95,
- 105,116,101,114,97,116,111,114,218,9,100,105,99,116,95,107,
- 101,121,115,218,11,100,105,99,116,95,118,97,108,117,101,115,
- 218,10,100,105,99,116,95,105,116,101,109,115,114,55,0,0,
- 0,218,12,109,97,112,112,105,110,103,112,114,111,120,121,114,
- 44,0,0,0,218,16,102,114,97,109,101,108,111,99,97,108,
- 115,112,114,111,120,121,218,9,103,101,110,101,114,97,116,111,
- 114,114,48,0,0,0,218,9,99,111,114,111,117,116,105,110,
- 101,114,121,0,0,0,114,51,0,0,0,218,15,97,115,121,
- 110,99,95,103,101,110,101,114,97,116,111,114,114,62,0,0,
- 0,114,16,0,0,0,114,11,0,0,0,114,12,0,0,0,
- 218,8,114,101,103,105,115,116,101,114,114,13,0,0,0,114,
- 14,0,0,0,114,15,0,0,0,114,17,0,0,0,114,18,
- 0,0,0,114,20,0,0,0,114,19,0,0,0,114,21,0,
- 0,0,114,22,0,0,0,114,24,0,0,0,114,36,0,0,
- 0,114,226,0,0,0,114,234,0,0,0,114,249,0,0,0,
- 114,23,0,0,0,114,25,0,0,0,218,9,102,114,111,122,
- 101,110,115,101,116,114,26,0,0,0,114,27,0,0,0,114,
- 29,0,0,0,114,30,0,0,0,114,31,0,0,0,114,32,
- 0,0,0,114,28,0,0,0,114,170,1,0,0,114,33,0,
- 0,0,114,230,0,0,0,218,3,115,116,114,114,224,0,0,
- 0,114,8,2,0,0,114,35,0,0,0,218,5,98,121,116,
- 101,115,114,34,0,0,0,114,7,0,0,0,114,8,0,0,
- 0,114,9,0,0,0,218,8,60,109,111,100,117,108,101,62,
- 114,83,2,0,0,1,0,0,0,115,33,5,0,0,240,3,
- 1,1,1,241,8,3,1,4,247,62,0,1,40,219,0,10,
- 225,15,19,144,68,152,19,145,73,139,127,128,12,217,15,19,
- 144,67,139,121,128,12,218,0,14,217,15,19,144,66,139,120,
- 128,12,216,4,6,242,4,9,11,13,128,7,240,30,0,12,
- 29,128,8,241,18,0,18,22,145,100,152,51,147,105,147,31,
- 128,14,217,21,25,153,36,153,121,155,123,211,26,43,211,21,
- 44,208,0,18,225,19,23,153,4,152,82,159,87,153,87,155,
- 89,155,15,211,19,40,208,0,16,217,21,25,153,36,152,114,
- 159,121,153,121,155,123,211,26,43,211,21,44,208,0,18,217,
- 20,24,153,20,152,98,159,104,153,104,155,106,211,25,41,211,
- 20,42,208,0,17,217,16,20,145,84,152,34,147,88,147,14,
- 128,13,217,23,27,153,68,161,24,168,34,163,28,211,28,46,
- 211,23,47,208,0,20,217,17,21,145,100,153,53,160,17,155,
- 56,147,110,211,17,37,128,14,217,21,25,153,36,153,117,160,
- 81,168,36,161,89,211,31,47,211,26,48,211,21,49,208,0,
- 18,217,15,19,145,68,153,19,155,21,147,75,211,15,32,128,
- 12,217,15,19,145,68,152,18,147,72,139,126,128,12,217,17,
- 21,145,100,152,50,147,104,147,30,128,14,217,15,19,145,68,
- 153,19,155,21,147,75,211,15,32,128,12,225,12,16,144,18,
- 151,23,145,23,147,25,139,79,128,9,217,14,18,144,50,151,
- 57,145,57,147,59,211,14,31,128,11,217,13,17,144,34,151,
- 40,145,40,147,42,211,13,29,128,10,225,15,19,144,68,151,
- 77,145,77,211,15,34,128,12,242,2,1,1,42,225,19,40,
- 211,19,42,208,0,16,216,4,25,217,12,16,146,47,211,17,
- 36,211,12,37,128,9,226,0,23,217,8,13,139,7,128,5,
- 217,12,16,144,21,139,75,128,9,216,0,5,135,11,129,11,
- 132,13,216,4,9,226,0,22,217,6,9,131,101,128,3,217,
- 18,22,144,115,147,41,128,15,216,4,7,242,10,10,1,16,
- 244,24,12,1,30,152,23,242,0,12,1,30,244,30,14,1,
- 50,152,39,242,0,14,1,50,244,34,38,1,30,144,9,244,
- 0,38,1,30,240,82,1,0,1,10,215,0,18,209,0,18,
- 144,57,212,0,29,244,6,14,1,50,152,103,242,0,14,1,
- 50,244,34,16,1,30,144,77,244,0,16,1,30,244,38,45,
- 1,30,144,93,244,0,45,1,30,240,96,1,0,1,15,215,
- 0,23,209,0,23,152,15,212,0,40,244,6,15,1,50,152,
- 23,242,0,15,1,50,244,36,16,1,30,136,120,244,0,16,
- 1,30,240,38,0,1,9,215,0,17,209,0,17,144,46,212,
- 0,33,216,0,8,215,0,17,209,0,17,208,18,36,212,0,
- 37,224,0,8,215,0,17,209,0,17,208,18,34,212,0,35,
- 216,0,8,215,0,17,209,0,17,208,18,36,212,0,37,216,
- 0,8,215,0,17,209,0,17,208,18,35,212,0,36,216,0,
- 8,215,0,17,209,0,17,144,45,212,0,32,216,0,8,215,
- 0,17,209,0,17,208,18,38,212,0,39,216,0,8,215,0,
- 17,209,0,17,144,46,212,0,33,216,0,8,215,0,17,209,
- 0,17,208,18,36,212,0,37,216,0,8,215,0,17,209,0,
- 17,144,44,212,0,31,216,0,8,215,0,17,209,0,17,144,
- 44,212,0,31,216,0,8,215,0,17,209,0,17,144,46,212,
- 0,33,216,0,8,215,0,17,209,0,17,144,44,212,0,31,
- 244,6,13,1,30,144,24,244,0,13,1,30,244,32,45,1,
- 30,144,8,244,0,45,1,30,240,96,1,0,1,10,215,0,
- 18,209,0,18,144,57,212,0,29,244,6,12,1,30,144,103,
+ 0,114,82,0,0,0,114,4,0,0,0,114,212,1,0,0,
+ 114,215,1,0,0,114,33,2,0,0,114,36,2,0,0,114,
+ 129,1,0,0,114,41,2,0,0,114,44,2,0,0,114,126,
+ 1,0,0,114,120,1,0,0,114,51,2,0,0,114,84,0,
+ 0,0,114,7,0,0,0,114,8,0,0,0,114,9,0,0,
+ 0,114,34,0,0,0,114,34,0,0,0,95,4,0,0,115,
+ 107,0,0,0,134,0,241,2,4,5,8,240,12,0,17,19,
+ 128,73,224,5,19,241,2,1,5,25,243,3,0,6,20,240,
+ 2,1,5,25,240,6,0,6,20,241,2,1,5,25,243,3,
+ 0,6,20,240,2,1,5,25,240,6,0,6,20,241,2,2,
+ 5,25,243,3,0,6,20,240,2,2,5,25,242,8,2,5,
+ 38,242,8,6,5,17,242,16,4,5,56,242,12,6,5,27,
+ 244,16,6,5,17,242,16,4,5,36,245,12,2,5,20,114,
+ 8,0,0,0,114,34,0,0,0,41,87,114,4,1,0,0,
+ 218,3,97,98,99,114,3,0,0,0,114,4,0,0,0,114,
+ 41,0,0,0,114,40,0,0,0,114,233,0,0,0,114,223,
+ 0,0,0,114,94,0,0,0,218,12,69,108,108,105,112,115,
+ 105,115,84,121,112,101,114,10,0,0,0,114,23,1,0,0,
+ 218,7,95,95,97,108,108,95,95,114,78,0,0,0,114,123,
+ 1,0,0,218,14,98,121,116,101,115,95,105,116,101,114,97,
+ 116,111,114,218,9,98,121,116,101,97,114,114,97,121,218,18,
+ 98,121,116,101,97,114,114,97,121,95,105,116,101,114,97,116,
+ 111,114,114,161,1,0,0,218,16,100,105,99,116,95,107,101,
+ 121,105,116,101,114,97,116,111,114,114,167,1,0,0,218,18,
+ 100,105,99,116,95,118,97,108,117,101,105,116,101,114,97,116,
+ 111,114,114,164,1,0,0,218,17,100,105,99,116,95,105,116,
+ 101,109,105,116,101,114,97,116,111,114,218,13,108,105,115,116,
+ 95,105,116,101,114,97,116,111,114,114,248,1,0,0,218,20,
+ 108,105,115,116,95,114,101,118,101,114,115,101,105,116,101,114,
+ 97,116,111,114,114,249,1,0,0,218,14,114,97,110,103,101,
+ 95,105,116,101,114,97,116,111,114,218,18,108,111,110,103,114,
+ 97,110,103,101,95,105,116,101,114,97,116,111,114,114,188,1,
+ 0,0,218,12,115,101,116,95,105,116,101,114,97,116,111,114,
+ 218,12,115,116,114,95,105,116,101,114,97,116,111,114,218,14,
+ 116,117,112,108,101,95,105,116,101,114,97,116,111,114,218,3,
+ 122,105,112,218,12,122,105,112,95,105,116,101,114,97,116,111,
+ 114,218,9,100,105,99,116,95,107,101,121,115,218,11,100,105,
+ 99,116,95,118,97,108,117,101,115,218,10,100,105,99,116,95,
+ 105,116,101,109,115,114,55,0,0,0,218,12,109,97,112,112,
+ 105,110,103,112,114,111,120,121,114,44,0,0,0,218,16,102,
+ 114,97,109,101,108,111,99,97,108,115,112,114,111,120,121,218,
+ 9,103,101,110,101,114,97,116,111,114,114,48,0,0,0,218,
+ 9,99,111,114,111,117,116,105,110,101,114,121,0,0,0,114,
+ 51,0,0,0,218,15,97,115,121,110,99,95,103,101,110,101,
+ 114,97,116,111,114,114,62,0,0,0,114,16,0,0,0,114,
+ 11,0,0,0,114,12,0,0,0,218,8,114,101,103,105,115,
+ 116,101,114,114,13,0,0,0,114,14,0,0,0,114,15,0,
+ 0,0,114,17,0,0,0,114,18,0,0,0,114,20,0,0,
+ 0,114,19,0,0,0,114,21,0,0,0,114,22,0,0,0,
+ 114,24,0,0,0,114,36,0,0,0,114,226,0,0,0,114,
+ 234,0,0,0,114,249,0,0,0,114,23,0,0,0,114,25,
+ 0,0,0,218,9,102,114,111,122,101,110,115,101,116,114,26,
+ 0,0,0,114,27,0,0,0,114,29,0,0,0,114,30,0,
+ 0,0,114,31,0,0,0,114,32,0,0,0,114,28,0,0,
+ 0,114,170,1,0,0,114,33,0,0,0,114,230,0,0,0,
+ 218,3,115,116,114,114,224,0,0,0,114,8,2,0,0,114,
+ 35,0,0,0,218,5,98,121,116,101,115,114,34,0,0,0,
+ 114,7,0,0,0,114,8,0,0,0,114,9,0,0,0,218,
+ 8,60,109,111,100,117,108,101,62,114,83,2,0,0,1,0,
+ 0,0,115,35,5,0,0,240,3,1,1,1,241,8,3,1,
+ 4,247,62,0,1,40,219,0,10,225,15,19,144,68,152,19,
+ 145,73,139,127,128,12,217,15,19,144,67,139,121,128,12,218,
+ 0,14,217,15,19,144,66,139,120,128,12,216,4,6,242,4,
+ 9,11,13,128,7,240,30,0,12,29,128,8,241,18,0,18,
+ 22,145,100,152,51,147,105,147,31,128,14,217,21,25,153,36,
+ 153,121,155,123,211,26,43,211,21,44,208,0,18,225,19,23,
+ 153,4,152,82,159,87,153,87,155,89,155,15,211,19,40,208,
+ 0,16,217,21,25,153,36,152,114,159,121,153,121,155,123,211,
+ 26,43,211,21,44,208,0,18,217,20,24,153,20,152,98,159,
+ 104,153,104,155,106,211,25,41,211,20,42,208,0,17,217,16,
+ 20,145,84,152,34,147,88,147,14,128,13,217,23,27,153,68,
+ 161,24,168,34,163,28,211,28,46,211,23,47,208,0,20,217,
+ 17,21,145,100,153,53,160,17,155,56,147,110,211,17,37,128,
+ 14,217,21,25,153,36,153,117,160,81,168,36,161,89,211,31,
+ 47,211,26,48,211,21,49,208,0,18,217,15,19,145,68,153,
+ 19,155,21,147,75,211,15,32,128,12,217,15,19,145,68,152,
+ 18,147,72,139,126,128,12,217,17,21,145,100,152,50,147,104,
+ 147,30,128,14,217,15,19,145,68,153,19,155,21,147,75,211,
+ 15,32,128,12,225,12,16,144,18,151,23,145,23,147,25,139,
+ 79,128,9,217,14,18,144,50,151,57,145,57,147,59,211,14,
+ 31,128,11,217,13,17,144,34,151,40,145,40,147,42,211,13,
+ 29,128,10,225,15,19,144,68,151,77,145,77,211,15,34,128,
+ 12,242,2,1,1,42,225,19,40,211,19,42,208,0,16,216,
+ 4,25,217,12,16,146,47,211,17,36,211,12,37,128,9,226,
+ 0,23,217,8,13,139,7,128,5,217,12,16,144,21,139,75,
+ 128,9,216,0,5,135,11,129,11,132,13,216,4,9,226,0,
+ 22,217,6,9,131,101,128,3,217,18,22,144,115,147,41,128,
+ 15,216,4,7,242,10,10,1,16,244,24,12,1,30,152,23,
242,0,12,1,30,244,30,14,1,50,152,39,242,0,14,1,
- 50,244,34,8,1,30,144,21,152,8,160,41,244,0,8,1,
- 30,244,22,12,1,30,144,119,242,0,12,1,30,244,30,52,
- 1,64,1,152,76,244,0,52,1,64,1,242,108,1,10,1,
- 86,1,242,24,15,1,21,244,36,14,1,59,152,23,242,0,
- 14,1,59,244,40,71,2,1,17,136,42,244,0,71,2,1,
- 17,240,84,4,0,1,4,135,12,129,12,136,89,212,0,23,
- 244,6,77,1,1,20,144,19,244,0,77,1,1,20,240,96,
- 2,0,1,11,215,0,19,209,0,19,144,67,212,0,24,244,
- 10,49,1,24,136,106,244,0,49,1,24,240,102,1,0,1,
- 8,215,0,16,209,0,16,144,28,212,0,30,216,0,7,215,
- 0,16,209,0,16,208,17,33,212,0,34,244,6,13,1,50,
- 144,37,244,0,13,1,50,244,32,12,1,33,136,123,152,67,
- 244,0,12,1,33,240,30,0,1,9,215,0,17,209,0,17,
- 144,41,212,0,28,244,6,19,1,44,144,11,152,83,244,0,
- 19,1,44,240,44,0,1,10,215,0,18,209,0,18,144,58,
- 212,0,30,244,6,13,1,37,144,27,152,106,244,0,13,1,
- 37,240,32,0,1,11,215,0,19,209,0,19,144,75,212,0,
- 32,244,6,79,1,1,23,144,87,244,0,79,1,1,23,240,
- 100,2,0,1,15,215,0,23,209,0,23,152,4,212,0,29,
- 244,10,61,1,64,1,136,122,152,58,244,0,61,1,64,1,
- 240,126,1,0,1,9,215,0,17,209,0,17,144,37,212,0,
- 24,216,0,8,215,0,17,209,0,17,144,35,212,0,22,216,
- 0,8,215,0,17,209,0,17,144,37,212,0,24,216,0,8,
- 215,0,17,209,0,17,144,42,212,0,29,244,4,18,1,51,
- 152,119,244,0,18,1,51,244,40,10,1,19,144,24,208,37,
- 61,242,0,10,1,19,240,24,0,1,11,215,0,19,209,0,
- 19,144,69,212,0,26,216,0,10,215,0,19,209,0,19,144,
- 73,212,0,30,244,6,63,1,20,144,104,244,0,63,1,20,
- 240,68,2,0,1,16,215,0,24,209,0,24,152,20,212,0,
- 30,216,0,15,215,0,24,209,0,24,152,25,213,0,35,114,
- 8,0,0,0,
+ 50,244,34,38,1,30,144,9,244,0,38,1,30,240,82,1,
+ 0,1,10,215,0,18,209,0,18,144,57,212,0,29,244,6,
+ 14,1,50,152,103,242,0,14,1,50,244,34,16,1,30,144,
+ 77,244,0,16,1,30,244,38,45,1,30,144,93,244,0,45,
+ 1,30,240,96,1,0,1,15,215,0,23,209,0,23,152,15,
+ 212,0,40,244,6,15,1,50,152,23,242,0,15,1,50,244,
+ 36,16,1,30,136,120,244,0,16,1,30,240,38,0,1,9,
+ 215,0,17,209,0,17,144,46,212,0,33,216,0,8,215,0,
+ 17,209,0,17,208,18,36,212,0,37,224,0,8,215,0,17,
+ 209,0,17,208,18,34,212,0,35,216,0,8,215,0,17,209,
+ 0,17,208,18,36,212,0,37,216,0,8,215,0,17,209,0,
+ 17,208,18,35,212,0,36,216,0,8,215,0,17,209,0,17,
+ 144,45,212,0,32,216,0,8,215,0,17,209,0,17,208,18,
+ 38,212,0,39,216,0,8,215,0,17,209,0,17,144,46,212,
+ 0,33,216,0,8,215,0,17,209,0,17,208,18,36,212,0,
+ 37,216,0,8,215,0,17,209,0,17,144,44,212,0,31,216,
+ 0,8,215,0,17,209,0,17,144,44,212,0,31,216,0,8,
+ 215,0,17,209,0,17,144,46,212,0,33,216,0,8,215,0,
+ 17,209,0,17,144,44,212,0,31,244,6,13,1,30,144,24,
+ 244,0,13,1,30,244,32,45,1,30,144,8,244,0,45,1,
+ 30,240,96,1,0,1,10,215,0,18,209,0,18,144,57,212,
+ 0,29,244,6,12,1,30,144,103,242,0,12,1,30,244,30,
+ 14,1,50,152,39,242,0,14,1,50,244,34,8,1,30,144,
+ 21,152,8,160,41,244,0,8,1,30,244,22,12,1,30,144,
+ 119,242,0,12,1,30,244,30,52,1,64,1,152,76,244,0,
+ 52,1,64,1,242,108,1,10,1,86,1,242,24,15,1,21,
+ 244,36,14,1,59,152,23,242,0,14,1,59,244,40,71,2,
+ 1,17,136,42,244,0,71,2,1,17,240,84,4,0,1,4,
+ 135,12,129,12,136,89,212,0,23,244,6,77,1,1,20,144,
+ 19,244,0,77,1,1,20,240,96,2,0,1,11,215,0,19,
+ 209,0,19,144,67,212,0,24,244,10,49,1,24,136,106,244,
+ 0,49,1,24,240,102,1,0,1,8,215,0,16,209,0,16,
+ 144,28,212,0,30,216,0,7,215,0,16,209,0,16,208,17,
+ 33,212,0,34,244,6,13,1,50,144,37,244,0,13,1,50,
+ 244,32,12,1,33,136,123,152,67,244,0,12,1,33,240,30,
+ 0,1,9,215,0,17,209,0,17,144,41,212,0,28,244,6,
+ 19,1,44,144,11,152,83,244,0,19,1,44,240,44,0,1,
+ 10,215,0,18,209,0,18,144,58,212,0,30,244,6,13,1,
+ 37,144,27,152,106,244,0,13,1,37,240,32,0,1,11,215,
+ 0,19,209,0,19,144,75,212,0,32,244,6,83,1,1,23,
+ 144,87,244,0,83,1,1,23,240,108,2,0,1,15,215,0,
+ 23,209,0,23,152,4,212,0,29,244,10,61,1,64,1,136,
+ 122,152,58,244,0,61,1,64,1,240,126,1,0,1,9,215,
+ 0,17,209,0,17,144,37,212,0,24,216,0,8,215,0,17,
+ 209,0,17,144,35,212,0,22,216,0,8,215,0,17,209,0,
+ 17,144,37,212,0,24,216,0,8,215,0,17,209,0,17,144,
+ 42,212,0,29,244,4,18,1,51,152,119,244,0,18,1,51,
+ 244,40,10,1,19,144,24,208,37,61,242,0,10,1,19,240,
+ 24,0,1,11,215,0,19,209,0,19,144,69,212,0,26,216,
+ 0,10,215,0,19,209,0,19,144,73,212,0,30,244,6,64,
+ 1,1,20,144,104,244,0,64,1,1,20,240,70,2,0,1,
+ 16,215,0,24,209,0,24,152,20,212,0,30,216,0,15,215,
+ 0,24,209,0,24,152,25,213,0,35,114,8,0,0,0,
};
diff --git a/contrib/tools/python3/Python/frozen_modules/ntpath.h b/contrib/tools/python3/Python/frozen_modules/ntpath.h
index 1a4752d134d..33740f52197 100644
--- a/contrib/tools/python3/Python/frozen_modules/ntpath.h
+++ b/contrib/tools/python3/Python/frozen_modules/ntpath.h
@@ -323,7 +323,7 @@ const unsigned char _Py_M__ntpath[] = {
0,243,42,0,0,0,149,0,91,1,0,0,0,0,0,0,
0,0,85,0,53,1,0,0,0,0,0,0,117,3,0,0,
112,18,110,3,88,18,85,3,45,0,0,0,52,2,36,0,
- 41,1,97,170,2,0,0,83,112,108,105,116,32,97,32,112,
+ 41,1,97,171,2,0,0,83,112,108,105,116,32,97,32,112,
97,116,104,110,97,109,101,32,105,110,116,111,32,100,114,105,
118,101,47,85,78,67,32,115,104,97,114,101,112,111,105,110,
116,32,97,110,100,32,114,101,108,97,116,105,118,101,32,112,
@@ -342,1361 +342,1361 @@ const unsigned char _Py_M__ntpath[] = {
99,111,110,116,97,105,110,101,100,32,97,32,100,114,105,118,
101,32,108,101,116,116,101,114,44,32,100,114,105,118,101,95,
111,114,95,117,110,99,32,119,105,108,108,32,99,111,110,116,
- 97,105,110,32,101,118,101,114,121,116,104,105,110,103,10,117,
+ 97,105,110,10,101,118,101,114,121,116,104,105,110,103,32,117,
112,32,116,111,32,97,110,100,32,105,110,99,108,117,100,105,
110,103,32,116,104,101,32,99,111,108,111,110,46,32,32,101,
46,103,46,32,115,112,108,105,116,100,114,105,118,101,40,34,
- 99,58,47,100,105,114,34,41,32,114,101,116,117,114,110,115,
+ 99,58,47,100,105,114,34,41,10,114,101,116,117,114,110,115,
32,40,34,99,58,34,44,32,34,47,100,105,114,34,41,10,
10,73,102,32,116,104,101,32,112,97,116,104,32,99,111,110,
116,97,105,110,101,100,32,97,32,85,78,67,32,112,97,116,
104,44,32,116,104,101,32,100,114,105,118,101,95,111,114,95,
117,110,99,32,119,105,108,108,32,99,111,110,116,97,105,110,
- 32,116,104,101,32,104,111,115,116,32,110,97,109,101,10,97,
+ 32,116,104,101,10,104,111,115,116,32,110,97,109,101,32,97,
110,100,32,115,104,97,114,101,32,117,112,32,116,111,32,98,
117,116,32,110,111,116,32,105,110,99,108,117,100,105,110,103,
32,116,104,101,32,102,111,117,114,116,104,32,100,105,114,101,
- 99,116,111,114,121,32,115,101,112,97,114,97,116,111,114,32,
- 99,104,97,114,97,99,116,101,114,46,10,101,46,103,46,32,
- 115,112,108,105,116,100,114,105,118,101,40,34,47,47,104,111,
- 115,116,47,99,111,109,112,117,116,101,114,47,100,105,114,34,
- 41,32,114,101,116,117,114,110,115,32,40,34,47,47,104,111,
- 115,116,47,99,111,109,112,117,116,101,114,34,44,32,34,47,
- 100,105,114,34,41,10,10,80,97,116,104,115,32,99,97,110,
- 110,111,116,32,99,111,110,116,97,105,110,32,98,111,116,104,
- 32,97,32,100,114,105,118,101,32,108,101,116,116,101,114,32,
- 97,110,100,32,97,32,85,78,67,32,112,97,116,104,46,10,
- 10,41,1,114,14,0,0,0,41,4,114,108,0,0,0,218,
- 5,100,114,105,118,101,218,4,114,111,111,116,218,4,116,97,
- 105,108,115,4,0,0,0,32,32,32,32,114,60,0,0,0,
- 114,13,0,0,0,114,13,0,0,0,146,0,0,0,115,31,
- 0,0,0,128,0,244,38,0,25,34,160,33,155,12,209,4,
- 21,128,69,144,20,216,11,16,152,20,145,43,208,11,29,208,
- 4,29,114,62,0,0,0,41,1,218,18,95,112,97,116,104,
- 95,115,112,108,105,116,114,111,111,116,95,101,120,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,
- 0,0,243,4,2,0,0,149,0,91,0,0,0,0,0,0,
- 0,0,0,82,2,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,34,0,85,0,53,1,0,0,0,
- 0,0,0,110,0,91,5,0,0,0,0,0,0,0,0,85,
- 0,91,6,0,0,0,0,0,0,0,0,53,2,0,0,0,
- 0,0,0,40,0,0,0,0,0,0,0,97,11,0,0,83,
- 1,110,1,83,2,110,2,83,3,110,3,83,4,110,4,83,
- 5,110,5,79,10,83,6,110,1,83,7,110,2,83,8,110,
- 3,83,9,110,4,83,10,110,5,85,0,82,9,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,
- 33,53,2,0,0,0,0,0,0,110,6,85,6,83,11,83,
- 12,4,0,85,1,58,88,0,0,97,121,0,0,85,6,83,
- 12,83,13,4,0,85,1,58,88,0,0,97,102,0,0,85,
- 6,83,11,83,14,4,0,82,11,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,53,0,0,0,0,
- 0,0,0,85,4,58,88,0,0,97,2,0,0,83,14,79,
- 1,83,13,110,7,85,6,82,13,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,88,23,53,2,0,
- 0,0,0,0,0,110,8,85,8,83,15,58,88,0,0,97,
- 4,0,0,88,5,85,5,52,3,36,0,85,6,82,13,0,
+ 99,116,111,114,121,10,115,101,112,97,114,97,116,111,114,32,
+ 99,104,97,114,97,99,116,101,114,46,32,32,101,46,103,46,
+ 32,115,112,108,105,116,100,114,105,118,101,40,34,47,47,104,
+ 111,115,116,47,99,111,109,112,117,116,101,114,47,100,105,114,
+ 34,41,32,114,101,116,117,114,110,115,10,40,34,47,47,104,
+ 111,115,116,47,99,111,109,112,117,116,101,114,34,44,32,34,
+ 47,100,105,114,34,41,10,10,80,97,116,104,115,32,99,97,
+ 110,110,111,116,32,99,111,110,116,97,105,110,32,98,111,116,
+ 104,32,97,32,100,114,105,118,101,32,108,101,116,116,101,114,
+ 32,97,110,100,32,97,32,85,78,67,32,112,97,116,104,46,
+ 10,10,41,1,114,14,0,0,0,41,4,114,108,0,0,0,
+ 218,5,100,114,105,118,101,218,4,114,111,111,116,218,4,116,
+ 97,105,108,115,4,0,0,0,32,32,32,32,114,60,0,0,
+ 0,114,13,0,0,0,114,13,0,0,0,146,0,0,0,115,
+ 31,0,0,0,128,0,244,42,0,25,34,160,33,155,12,209,
+ 4,21,128,69,144,20,216,11,16,152,20,145,43,208,11,29,
+ 208,4,29,114,62,0,0,0,41,1,218,18,95,112,97,116,
+ 104,95,115,112,108,105,116,114,111,111,116,95,101,120,99,1,
+ 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,
+ 0,0,0,243,4,2,0,0,149,0,91,0,0,0,0,0,
+ 0,0,0,0,82,2,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,34,0,85,0,53,1,0,0,
+ 0,0,0,0,110,0,91,5,0,0,0,0,0,0,0,0,
+ 85,0,91,6,0,0,0,0,0,0,0,0,53,2,0,0,
+ 0,0,0,0,40,0,0,0,0,0,0,0,97,11,0,0,
+ 83,1,110,1,83,2,110,2,83,3,110,3,83,4,110,4,
+ 83,5,110,5,79,10,83,6,110,1,83,7,110,2,83,8,
+ 110,3,83,9,110,4,83,10,110,5,85,0,82,9,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,88,24,83,12,45,0,0,0,53,2,0,0,0,0,0,
- 0,110,9,85,9,83,15,58,88,0,0,97,4,0,0,88,
- 5,85,5,52,3,36,0,85,0,83,11,85,9,4,0,88,
- 9,85,9,83,12,45,0,0,0,4,0,88,9,83,12,45,
- 0,0,0,83,11,4,0,52,3,36,0,88,80,83,11,83,
- 12,4,0,85,0,83,12,83,11,4,0,52,3,36,0,85,
- 6,83,12,83,13,4,0,85,3,58,88,0,0,97,33,0,
- 0,85,6,83,13,83,16,4,0,85,1,58,88,0,0,97,
- 14,0,0,85,0,83,11,83,13,4,0,85,0,83,13,83,
- 16,4,0,85,0,83,16,83,11,4,0,52,3,36,0,85,
- 0,83,11,83,13,4,0,88,80,83,13,83,11,4,0,52,
- 3,36,0,88,85,85,0,52,3,36,0,41,17,122,87,83,
- 112,108,105,116,32,97,32,112,97,116,104,110,97,109,101,32,
- 105,110,116,111,32,100,114,105,118,101,44,32,114,111,111,116,
- 32,97,110,100,32,116,97,105,108,46,10,10,84,104,101,32,
- 116,97,105,108,32,99,111,110,116,97,105,110,115,32,97,110,
- 121,116,104,105,110,103,32,97,102,116,101,114,32,116,104,101,
- 32,114,111,111,116,46,114,86,0,0,0,114,87,0,0,0,
- 243,1,0,0,0,58,243,8,0,0,0,92,92,63,92,85,
- 78,67,92,114,62,0,0,0,114,4,0,0,0,114,6,0,
- 0,0,218,1,58,250,8,92,92,63,92,85,78,67,92,218,
- 0,78,114,91,0,0,0,233,2,0,0,0,233,8,0,0,
- 0,114,96,0,0,0,114,90,0,0,0,41,7,114,69,0,
- 0,0,114,70,0,0,0,114,56,0,0,0,114,57,0,0,
- 0,114,74,0,0,0,218,5,117,112,112,101,114,218,4,102,
- 105,110,100,41,10,114,108,0,0,0,114,37,0,0,0,114,
- 40,0,0,0,218,5,99,111,108,111,110,218,10,117,110,99,
- 95,112,114,101,102,105,120,218,5,101,109,112,116,121,218,5,
- 110,111,114,109,112,218,5,115,116,97,114,116,218,5,105,110,
- 100,101,120,218,6,105,110,100,101,120,50,115,10,0,0,0,
- 32,32,32,32,32,32,32,32,32,32,114,60,0,0,0,114,
- 14,0,0,0,114,14,0,0,0,172,0,0,0,115,118,1,
- 0,0,128,0,244,8,0,13,15,143,73,138,73,144,97,139,
- 76,136,1,220,11,21,144,97,156,21,215,11,31,209,11,31,
- 216,18,23,136,67,216,21,25,136,70,216,20,24,136,69,216,
- 25,40,136,74,216,20,23,137,69,224,18,22,136,67,216,21,
- 24,136,70,216,20,23,136,69,216,25,39,136,74,216,20,22,
- 136,69,216,16,17,151,9,145,9,152,38,211,16,38,136,5,
- 216,11,16,144,18,144,33,136,57,152,3,211,11,27,216,15,
- 20,144,81,144,113,136,122,152,83,211,15,32,240,6,0,30,
- 35,160,50,160,65,152,89,159,95,153,95,211,29,46,176,42,
- 211,29,60,153,1,192,33,144,5,216,24,29,159,10,153,10,
- 160,51,211,24,46,144,5,216,19,24,152,66,147,59,216,27,
- 28,160,85,152,63,208,20,42,216,25,30,159,26,153,26,160,
- 67,176,17,169,25,211,25,51,144,6,216,19,25,152,82,147,
- 60,216,27,28,160,85,152,63,208,20,42,216,23,24,152,23,
- 152,38,144,122,160,49,168,70,176,81,169,74,208,35,55,184,
- 17,192,65,185,58,184,59,184,30,208,23,71,208,16,71,240,
- 6,0,24,29,160,2,160,17,152,101,160,81,160,113,160,114,
- 160,85,208,23,42,208,16,42,216,13,18,144,49,144,81,136,
- 90,152,53,211,13,32,216,15,20,144,81,144,113,136,122,152,
- 83,211,15,32,224,23,24,152,18,152,33,144,117,152,97,160,
- 1,160,33,152,102,160,97,168,1,168,2,160,101,208,23,43,
- 208,16,43,240,6,0,24,25,152,18,152,33,144,117,152,101,
- 160,113,160,114,160,85,208,23,42,208,16,42,240,6,0,20,
- 25,160,17,144,63,208,12,34,114,62,0,0,0,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,
- 0,0,243,12,1,0,0,149,0,91,0,0,0,0,0,0,
- 0,0,0,82,2,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,34,0,85,0,53,1,0,0,0,
- 0,0,0,110,0,91,5,0,0,0,0,0,0,0,0,85,
- 0,53,1,0,0,0,0,0,0,110,1,91,7,0,0,0,
- 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,117,
- 3,0,0,112,35,110,0,91,9,0,0,0,0,0,0,0,
- 0,85,0,53,1,0,0,0,0,0,0,110,4,85,4,40,
- 0,0,0,0,0,0,0,97,36,0,0,88,4,83,1,45,
- 10,0,0,5,0,0,0,85,1,59,1,0,0,97,25,0,
- 0,85,4,83,1,45,23,0,0,110,4,85,4,40,0,0,
- 0,0,0,0,0,97,13,0,0,88,4,83,1,45,10,0,
- 0,5,0,0,0,85,1,59,1,0,0,97,2,0,0,77,
- 25,0,0,85,0,83,2,85,4,4,0,88,4,83,2,4,
- 0,112,101,88,35,45,0,0,0,85,5,82,11,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,
- 1,53,1,0,0,0,0,0,0,45,0,0,0,85,6,52,
- 2,36,0,41,3,122,118,83,112,108,105,116,32,97,32,112,
- 97,116,104,110,97,109,101,46,10,10,82,101,116,117,114,110,
- 32,116,117,112,108,101,32,40,104,101,97,100,44,32,116,97,
- 105,108,41,32,119,104,101,114,101,32,116,97,105,108,32,105,
- 115,32,101,118,101,114,121,116,104,105,110,103,32,97,102,116,
- 101,114,32,116,104,101,32,102,105,110,97,108,32,115,108,97,
- 115,104,46,10,69,105,116,104,101,114,32,112,97,114,116,32,
- 109,97,121,32,98,101,32,101,109,112,116,121,46,114,91,0,
- 0,0,78,41,6,114,69,0,0,0,114,70,0,0,0,114,
- 61,0,0,0,114,14,0,0,0,218,3,108,101,110,218,6,
- 114,115,116,114,105,112,41,7,114,108,0,0,0,114,103,0,
- 0,0,218,1,100,218,1,114,218,1,105,218,4,104,101,97,
- 100,114,115,0,0,0,115,7,0,0,0,32,32,32,32,32,
- 32,32,114,60,0,0,0,114,15,0,0,0,114,15,0,0,
- 0,222,0,0,0,115,136,0,0,0,128,0,244,10,0,9,
- 11,143,9,138,9,144,33,139,12,128,65,220,11,24,152,17,
- 211,11,27,128,68,220,14,23,152,1,139,108,129,71,128,65,
- 136,33,228,8,11,136,65,139,6,128,65,222,10,11,144,1,
- 144,65,145,35,145,6,152,100,211,16,34,216,8,9,136,81,
- 137,6,136,1,246,3,0,11,12,144,1,144,65,145,35,145,
- 6,152,100,213,16,34,224,17,18,144,50,144,65,144,21,152,
- 1,152,34,152,5,136,36,216,11,12,137,53,144,52,151,59,
- 145,59,152,116,211,19,36,209,11,36,160,100,208,11,42,208,
- 4,42,114,62,0,0,0,99,1,0,0,0,0,0,0,0,
- 0,0,0,0,6,0,0,0,3,0,0,0,243,188,0,0,
- 0,149,0,91,0,0,0,0,0,0,0,0,0,82,2,0,
+ 88,33,53,2,0,0,0,0,0,0,110,6,85,6,83,11,
+ 83,12,4,0,85,1,58,88,0,0,97,121,0,0,85,6,
+ 83,12,83,13,4,0,85,1,58,88,0,0,97,102,0,0,
+ 85,6,83,11,83,14,4,0,82,11,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,53,0,0,0,
+ 0,0,0,0,85,4,58,88,0,0,97,2,0,0,83,14,
+ 79,1,83,13,110,7,85,6,82,13,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,88,23,53,2,
+ 0,0,0,0,0,0,110,8,85,8,83,15,58,88,0,0,
+ 97,4,0,0,88,5,85,5,52,3,36,0,85,6,82,13,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,34,0,85,0,53,1,0,0,0,0,0,0,110,0,91,
- 5,0,0,0,0,0,0,0,0,85,0,91,6,0,0,0,
- 0,0,0,0,0,53,2,0,0,0,0,0,0,40,0,0,
- 0,0,0,0,0,97,25,0,0,91,8,0,0,0,0,0,
- 0,0,0,82,10,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,34,0,85,0,83,1,83,2,83,
- 3,53,4,0,0,0,0,0,0,36,0,91,8,0,0,0,
+ 0,0,88,24,83,12,45,0,0,0,53,2,0,0,0,0,
+ 0,0,110,9,85,9,83,15,58,88,0,0,97,4,0,0,
+ 88,5,85,5,52,3,36,0,85,0,83,11,85,9,4,0,
+ 88,9,85,9,83,12,45,0,0,0,4,0,88,9,83,12,
+ 45,0,0,0,83,11,4,0,52,3,36,0,88,80,83,11,
+ 83,12,4,0,85,0,83,12,83,11,4,0,52,3,36,0,
+ 85,6,83,12,83,13,4,0,85,3,58,88,0,0,97,33,
+ 0,0,85,6,83,13,83,16,4,0,85,1,58,88,0,0,
+ 97,14,0,0,85,0,83,11,83,13,4,0,85,0,83,13,
+ 83,16,4,0,85,0,83,16,83,11,4,0,52,3,36,0,
+ 85,0,83,11,83,13,4,0,88,80,83,13,83,11,4,0,
+ 52,3,36,0,88,85,85,0,52,3,36,0,41,17,122,87,
+ 83,112,108,105,116,32,97,32,112,97,116,104,110,97,109,101,
+ 32,105,110,116,111,32,100,114,105,118,101,44,32,114,111,111,
+ 116,32,97,110,100,32,116,97,105,108,46,10,10,84,104,101,
+ 32,116,97,105,108,32,99,111,110,116,97,105,110,115,32,97,
+ 110,121,116,104,105,110,103,32,97,102,116,101,114,32,116,104,
+ 101,32,114,111,111,116,46,114,86,0,0,0,114,87,0,0,
+ 0,243,1,0,0,0,58,243,8,0,0,0,92,92,63,92,
+ 85,78,67,92,114,62,0,0,0,114,4,0,0,0,114,6,
+ 0,0,0,218,1,58,250,8,92,92,63,92,85,78,67,92,
+ 218,0,78,114,91,0,0,0,233,2,0,0,0,233,8,0,
+ 0,0,114,96,0,0,0,114,90,0,0,0,41,7,114,69,
+ 0,0,0,114,70,0,0,0,114,56,0,0,0,114,57,0,
+ 0,0,114,74,0,0,0,218,5,117,112,112,101,114,218,4,
+ 102,105,110,100,41,10,114,108,0,0,0,114,37,0,0,0,
+ 114,40,0,0,0,218,5,99,111,108,111,110,218,10,117,110,
+ 99,95,112,114,101,102,105,120,218,5,101,109,112,116,121,218,
+ 5,110,111,114,109,112,218,5,115,116,97,114,116,218,5,105,
+ 110,100,101,120,218,6,105,110,100,101,120,50,115,10,0,0,
+ 0,32,32,32,32,32,32,32,32,32,32,114,60,0,0,0,
+ 114,14,0,0,0,114,14,0,0,0,174,0,0,0,115,118,
+ 1,0,0,128,0,244,8,0,13,15,143,73,138,73,144,97,
+ 139,76,136,1,220,11,21,144,97,156,21,215,11,31,209,11,
+ 31,216,18,23,136,67,216,21,25,136,70,216,20,24,136,69,
+ 216,25,40,136,74,216,20,23,137,69,224,18,22,136,67,216,
+ 21,24,136,70,216,20,23,136,69,216,25,39,136,74,216,20,
+ 22,136,69,216,16,17,151,9,145,9,152,38,211,16,38,136,
+ 5,216,11,16,144,18,144,33,136,57,152,3,211,11,27,216,
+ 15,20,144,81,144,113,136,122,152,83,211,15,32,240,6,0,
+ 30,35,160,50,160,65,152,89,159,95,153,95,211,29,46,176,
+ 42,211,29,60,153,1,192,33,144,5,216,24,29,159,10,153,
+ 10,160,51,211,24,46,144,5,216,19,24,152,66,147,59,216,
+ 27,28,160,85,152,63,208,20,42,216,25,30,159,26,153,26,
+ 160,67,176,17,169,25,211,25,51,144,6,216,19,25,152,82,
+ 147,60,216,27,28,160,85,152,63,208,20,42,216,23,24,152,
+ 23,152,38,144,122,160,49,168,70,176,81,169,74,208,35,55,
+ 184,17,192,65,185,58,184,59,184,30,208,23,71,208,16,71,
+ 240,6,0,24,29,160,2,160,17,152,101,160,81,160,113,160,
+ 114,160,85,208,23,42,208,16,42,216,13,18,144,49,144,81,
+ 136,90,152,53,211,13,32,216,15,20,144,81,144,113,136,122,
+ 152,83,211,15,32,224,23,24,152,18,152,33,144,117,152,97,
+ 160,1,160,33,152,102,160,97,168,1,168,2,160,101,208,23,
+ 43,208,16,43,240,6,0,24,25,152,18,152,33,144,117,152,
+ 101,160,113,160,114,160,85,208,23,42,208,16,42,240,6,0,
+ 20,25,160,17,144,63,208,12,34,114,62,0,0,0,99,1,
+ 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,
+ 0,0,0,243,12,1,0,0,149,0,91,0,0,0,0,0,
+ 0,0,0,0,82,2,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,34,0,85,0,53,1,0,0,
+ 0,0,0,0,110,0,91,5,0,0,0,0,0,0,0,0,
+ 85,0,53,1,0,0,0,0,0,0,110,1,91,7,0,0,
+ 0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,
+ 117,3,0,0,112,35,110,0,91,9,0,0,0,0,0,0,
+ 0,0,85,0,53,1,0,0,0,0,0,0,110,4,85,4,
+ 40,0,0,0,0,0,0,0,97,36,0,0,88,4,83,1,
+ 45,10,0,0,5,0,0,0,85,1,59,1,0,0,97,25,
+ 0,0,85,4,83,1,45,23,0,0,110,4,85,4,40,0,
+ 0,0,0,0,0,0,97,13,0,0,88,4,83,1,45,10,
+ 0,0,5,0,0,0,85,1,59,1,0,0,97,2,0,0,
+ 77,25,0,0,85,0,83,2,85,4,4,0,88,4,83,2,
+ 4,0,112,101,88,35,45,0,0,0,85,5,82,11,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 85,1,53,1,0,0,0,0,0,0,45,0,0,0,85,6,
+ 52,2,36,0,41,3,122,119,83,112,108,105,116,32,97,32,
+ 112,97,116,104,110,97,109,101,46,10,10,82,101,116,117,114,
+ 110,32,116,117,112,108,101,32,40,104,101,97,100,44,32,116,
+ 97,105,108,41,32,119,104,101,114,101,32,116,97,105,108,32,
+ 105,115,32,101,118,101,114,121,116,104,105,110,103,32,97,102,
+ 116,101,114,32,116,104,101,32,102,105,110,97,108,10,115,108,
+ 97,115,104,46,32,32,69,105,116,104,101,114,32,112,97,114,
+ 116,32,109,97,121,32,98,101,32,101,109,112,116,121,46,114,
+ 91,0,0,0,78,41,6,114,69,0,0,0,114,70,0,0,
+ 0,114,61,0,0,0,114,14,0,0,0,218,3,108,101,110,
+ 218,6,114,115,116,114,105,112,41,7,114,108,0,0,0,114,
+ 103,0,0,0,218,1,100,218,1,114,218,1,105,218,4,104,
+ 101,97,100,114,115,0,0,0,115,7,0,0,0,32,32,32,
+ 32,32,32,32,114,60,0,0,0,114,15,0,0,0,114,15,
+ 0,0,0,224,0,0,0,115,136,0,0,0,128,0,244,10,
+ 0,9,11,143,9,138,9,144,33,139,12,128,65,220,11,24,
+ 152,17,211,11,27,128,68,220,14,23,152,1,139,108,129,71,
+ 128,65,136,33,228,8,11,136,65,139,6,128,65,222,10,11,
+ 144,1,144,65,145,35,145,6,152,100,211,16,34,216,8,9,
+ 136,81,137,6,136,1,246,3,0,11,12,144,1,144,65,145,
+ 35,145,6,152,100,213,16,34,224,17,18,144,50,144,65,144,
+ 21,152,1,152,34,152,5,136,36,216,11,12,137,53,144,52,
+ 151,59,145,59,152,116,211,19,36,209,11,36,160,100,208,11,
+ 42,208,4,42,114,62,0,0,0,99,1,0,0,0,0,0,
+ 0,0,0,0,0,0,6,0,0,0,3,0,0,0,243,188,
+ 0,0,0,149,0,91,0,0,0,0,0,0,0,0,0,82,
+ 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,34,0,85,0,53,1,0,0,0,0,0,0,110,
+ 0,91,5,0,0,0,0,0,0,0,0,85,0,91,6,0,
+ 0,0,0,0,0,0,0,53,2,0,0,0,0,0,0,40,
+ 0,0,0,0,0,0,0,97,25,0,0,91,8,0,0,0,
0,0,0,0,0,82,10,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,34,0,85,0,83,4,83,
- 5,83,6,53,4,0,0,0,0,0,0,36,0,41,7,78,
- 114,86,0,0,0,114,87,0,0,0,243,1,0,0,0,46,
- 114,4,0,0,0,114,6,0,0,0,114,2,0,0,0,41,
- 6,114,69,0,0,0,114,70,0,0,0,114,56,0,0,0,
- 114,57,0,0,0,114,100,0,0,0,218,9,95,115,112,108,
- 105,116,101,120,116,169,1,114,108,0,0,0,115,1,0,0,
- 0,32,114,60,0,0,0,114,16,0,0,0,114,16,0,0,
- 0,243,0,0,0,115,74,0,0,0,128,0,220,8,10,143,
- 9,138,9,144,33,139,12,128,65,220,7,17,144,33,148,85,
- 215,7,27,209,7,27,220,15,26,215,15,36,210,15,36,160,
- 81,168,5,168,116,176,84,211,15,58,208,8,58,228,15,26,
- 215,15,36,210,15,36,160,81,168,4,168,99,176,51,211,15,
- 55,208,8,55,114,62,0,0,0,99,1,0,0,0,0,0,
- 0,0,0,0,0,0,3,0,0,0,3,0,0,0,243,30,
- 0,0,0,149,0,91,1,0,0,0,0,0,0,0,0,85,
- 0,53,1,0,0,0,0,0,0,83,1,5,0,0,0,36,
- 0,41,2,122,41,82,101,116,117,114,110,115,32,116,104,101,
- 32,102,105,110,97,108,32,99,111,109,112,111,110,101,110,116,
- 32,111,102,32,97,32,112,97,116,104,110,97,109,101,114,91,
- 0,0,0,169,1,114,15,0,0,0,114,144,0,0,0,115,
- 1,0,0,0,32,114,60,0,0,0,114,17,0,0,0,114,
- 17,0,0,0,254,0,0,0,243,16,0,0,0,128,0,228,
- 11,16,144,17,139,56,144,65,137,59,208,4,22,114,62,0,
- 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3,
- 0,0,0,3,0,0,0,243,30,0,0,0,149,0,91,1,
- 0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,
- 0,0,83,1,5,0,0,0,36,0,41,2,122,45,82,101,
- 116,117,114,110,115,32,116,104,101,32,100,105,114,101,99,116,
- 111,114,121,32,99,111,109,112,111,110,101,110,116,32,111,102,
- 32,97,32,112,97,116,104,110,97,109,101,114,8,0,0,0,
- 114,146,0,0,0,114,144,0,0,0,115,1,0,0,0,32,
- 114,60,0,0,0,114,18,0,0,0,114,18,0,0,0,5,
- 1,0,0,114,147,0,0,0,114,62,0,0,0,41,1,218,
- 18,95,103,101,116,118,111,108,117,109,101,112,97,116,104,110,
- 97,109,101,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 3,0,0,0,3,0,0,0,243,114,1,0,0,149,0,91,
- 0,0,0,0,0,0,0,0,0,82,2,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,85,
- 0,53,1,0,0,0,0,0,0,110,0,91,5,0,0,0,
- 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,110,
- 1,91,7,0,0,0,0,0,0,0,0,85,0,53,1,0,
- 0,0,0,0,0,110,0,91,9,0,0,0,0,0,0,0,
- 0,85,0,53,1,0,0,0,0,0,0,117,3,0,0,112,
- 35,110,4,85,2,40,0,0,0,0,0,0,0,97,16,0,
- 0,85,2,83,1,5,0,0,0,85,1,59,0,0,0,97,
- 7,0,0,85,4,40,0,0,0,0,0,0,0,43,0,36,
- 0,85,3,40,0,0,0,0,0,0,0,97,8,0,0,85,
- 4,40,0,0,0,0,0,0,0,100,1,0,0,103,2,91,
- 10,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,
- 0,97,76,0,0,85,0,82,13,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,85,1,53,1,0,
- 0,0,0,0,0,110,5,91,11,0,0,0,0,0,0,0,
- 0,85,0,53,1,0,0,0,0,0,0,82,13,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,
- 1,53,1,0,0,0,0,0,0,110,6,85,5,82,15,0,
+ 0,0,0,0,0,0,0,0,0,34,0,85,0,83,1,83,
+ 2,83,3,53,4,0,0,0,0,0,0,36,0,91,8,0,
+ 0,0,0,0,0,0,0,82,10,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,34,0,85,0,83,
+ 4,83,5,83,6,53,4,0,0,0,0,0,0,36,0,41,
+ 7,78,114,86,0,0,0,114,87,0,0,0,243,1,0,0,
+ 0,46,114,4,0,0,0,114,6,0,0,0,114,2,0,0,
+ 0,41,6,114,69,0,0,0,114,70,0,0,0,114,56,0,
+ 0,0,114,57,0,0,0,114,100,0,0,0,218,9,95,115,
+ 112,108,105,116,101,120,116,169,1,114,108,0,0,0,115,1,
+ 0,0,0,32,114,60,0,0,0,114,16,0,0,0,114,16,
+ 0,0,0,245,0,0,0,115,74,0,0,0,128,0,220,8,
+ 10,143,9,138,9,144,33,139,12,128,65,220,7,17,144,33,
+ 148,85,215,7,27,209,7,27,220,15,26,215,15,36,210,15,
+ 36,160,81,168,5,168,116,176,84,211,15,58,208,8,58,228,
+ 15,26,215,15,36,210,15,36,160,81,168,4,168,99,176,51,
+ 211,15,55,208,8,55,114,62,0,0,0,99,1,0,0,0,
+ 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
+ 243,30,0,0,0,149,0,91,1,0,0,0,0,0,0,0,
+ 0,85,0,53,1,0,0,0,0,0,0,83,1,5,0,0,
+ 0,36,0,41,2,122,41,82,101,116,117,114,110,115,32,116,
+ 104,101,32,102,105,110,97,108,32,99,111,109,112,111,110,101,
+ 110,116,32,111,102,32,97,32,112,97,116,104,110,97,109,101,
+ 114,91,0,0,0,169,1,114,15,0,0,0,114,144,0,0,
+ 0,115,1,0,0,0,32,114,60,0,0,0,114,17,0,0,
+ 0,114,17,0,0,0,0,1,0,0,243,16,0,0,0,128,
+ 0,228,11,16,144,17,139,56,144,65,137,59,208,4,22,114,
+ 62,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,3,0,0,0,3,0,0,0,243,30,0,0,0,149,0,
+ 91,1,0,0,0,0,0,0,0,0,85,0,53,1,0,0,
+ 0,0,0,0,83,1,5,0,0,0,36,0,41,2,122,45,
+ 82,101,116,117,114,110,115,32,116,104,101,32,100,105,114,101,
+ 99,116,111,114,121,32,99,111,109,112,111,110,101,110,116,32,
+ 111,102,32,97,32,112,97,116,104,110,97,109,101,114,8,0,
+ 0,0,114,146,0,0,0,114,144,0,0,0,115,1,0,0,
+ 0,32,114,60,0,0,0,114,18,0,0,0,114,18,0,0,
+ 0,7,1,0,0,114,147,0,0,0,114,62,0,0,0,41,
+ 1,218,18,95,103,101,116,118,111,108,117,109,101,112,97,116,
+ 104,110,97,109,101,99,1,0,0,0,0,0,0,0,0,0,
+ 0,0,3,0,0,0,3,0,0,0,243,114,1,0,0,149,
+ 0,91,0,0,0,0,0,0,0,0,0,82,2,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,
+ 0,85,0,53,1,0,0,0,0,0,0,110,0,91,5,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,110,1,91,7,0,0,0,0,0,0,0,0,85,0,53,
+ 1,0,0,0,0,0,0,110,0,91,9,0,0,0,0,0,
+ 0,0,0,85,0,53,1,0,0,0,0,0,0,117,3,0,
+ 0,112,35,110,4,85,2,40,0,0,0,0,0,0,0,97,
+ 16,0,0,85,2,83,1,5,0,0,0,85,1,59,0,0,
+ 0,97,7,0,0,85,4,40,0,0,0,0,0,0,0,43,
+ 0,36,0,85,3,40,0,0,0,0,0,0,0,97,8,0,
+ 0,85,4,40,0,0,0,0,0,0,0,100,1,0,0,103,
+ 2,91,10,0,0,0,0,0,0,0,0,40,0,0,0,0,
+ 0,0,0,97,76,0,0,85,0,82,13,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,85,1,53,
+ 1,0,0,0,0,0,0,110,5,91,11,0,0,0,0,0,
+ 0,0,0,85,0,53,1,0,0,0,0,0,0,82,13,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,53,0,0,0,0,0,0,0,85,6,82,15,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,
- 0,0,0,0,0,0,0,58,72,0,0,36,0,103,3,41,
- 4,122,93,84,101,115,116,32,119,104,101,116,104,101,114,32,
- 97,32,112,97,116,104,32,105,115,32,97,32,109,111,117,110,
- 116,32,112,111,105,110,116,32,40,97,32,100,114,105,118,101,
- 32,114,111,111,116,44,32,116,104,101,32,114,111,111,116,32,
- 111,102,32,97,10,115,104,97,114,101,44,32,111,114,32,97,
- 32,109,111,117,110,116,101,100,32,118,111,108,117,109,101,41,
- 114,8,0,0,0,84,70,41,8,114,69,0,0,0,114,70,
- 0,0,0,114,61,0,0,0,114,34,0,0,0,114,14,0,
- 0,0,114,149,0,0,0,114,136,0,0,0,218,8,99,97,
- 115,101,102,111,108,100,41,7,114,59,0,0,0,114,103,0,
- 0,0,114,113,0,0,0,114,114,0,0,0,218,4,114,101,
- 115,116,218,1,120,218,1,121,115,7,0,0,0,32,32,32,
- 32,32,32,32,114,60,0,0,0,114,29,0,0,0,114,29,
- 0,0,0,24,1,0,0,115,146,0,0,0,128,0,244,6,
- 0,12,14,143,57,138,57,144,84,139,63,128,68,220,11,24,
- 152,20,211,11,30,128,68,220,11,18,144,52,139,61,128,68,
- 220,24,33,160,36,155,15,209,4,21,128,69,144,20,222,7,
- 12,144,21,144,113,145,24,152,84,211,17,33,216,19,23,140,
- 120,136,15,222,7,11,150,68,216,15,19,231,7,25,210,7,
- 25,216,12,16,143,75,137,75,152,4,211,12,29,136,1,220,
- 11,29,152,100,211,11,35,215,11,42,209,11,42,168,52,211,
- 11,48,136,1,216,15,16,143,122,137,122,139,124,152,113,159,
- 122,153,122,155,124,209,15,43,208,8,43,224,15,20,114,62,
- 0,0,0,233,32,0,0,0,62,9,0,0,0,218,1,34,
- 114,9,0,0,0,114,6,0,0,0,114,120,0,0,0,218,
- 1,60,218,1,62,218,1,63,114,4,0,0,0,218,1,124,
- 62,6,0,0,0,218,3,65,85,88,218,3,67,79,78,218,
- 3,78,85,76,218,3,80,82,78,250,6,67,79,78,73,78,
- 36,250,7,67,79,78,79,85,84,36,117,15,0,0,0,49,
- 50,51,52,53,54,55,56,57,194,185,194,178,194,179,218,3,
- 67,79,77,218,3,76,80,84,99,1,0,0,0,0,0,0,
- 0,0,0,0,0,8,0,0,0,3,0,0,0,243,210,0,
- 0,0,149,0,91,0,0,0,0,0,0,0,0,0,82,2,
+ 0,85,1,53,1,0,0,0,0,0,0,110,6,85,5,82,
+ 15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,53,0,0,0,0,0,0,0,85,6,82,15,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,34,0,91,5,0,0,0,0,0,0,0,0,85,0,
- 53,1,0,0,0,0,0,0,83,1,5,0,0,0,53,1,
- 0,0,0,0,0,0,82,7,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,91,8,0,0,0,0,
- 0,0,0,0,91,10,0,0,0,0,0,0,0,0,53,2,
- 0,0,0,0,0,0,110,0,91,13,0,0,0,0,0,0,
- 0,0,83,2,26,0,91,15,0,0,0,0,0,0,0,0,
- 85,0,82,17,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,53,0,0,0,0,0,0,0,58,72,0,0,36,0,103,
+ 3,41,4,122,93,84,101,115,116,32,119,104,101,116,104,101,
+ 114,32,97,32,112,97,116,104,32,105,115,32,97,32,109,111,
+ 117,110,116,32,112,111,105,110,116,32,40,97,32,100,114,105,
+ 118,101,32,114,111,111,116,44,32,116,104,101,32,114,111,111,
+ 116,32,111,102,32,97,10,115,104,97,114,101,44,32,111,114,
+ 32,97,32,109,111,117,110,116,101,100,32,118,111,108,117,109,
+ 101,41,114,8,0,0,0,84,70,41,8,114,69,0,0,0,
+ 114,70,0,0,0,114,61,0,0,0,114,34,0,0,0,114,
+ 14,0,0,0,114,149,0,0,0,114,136,0,0,0,218,8,
+ 99,97,115,101,102,111,108,100,41,7,114,59,0,0,0,114,
+ 103,0,0,0,114,113,0,0,0,114,114,0,0,0,218,4,
+ 114,101,115,116,218,1,120,218,1,121,115,7,0,0,0,32,
+ 32,32,32,32,32,32,114,60,0,0,0,114,29,0,0,0,
+ 114,29,0,0,0,26,1,0,0,115,146,0,0,0,128,0,
+ 244,6,0,12,14,143,57,138,57,144,84,139,63,128,68,220,
+ 11,24,152,20,211,11,30,128,68,220,11,18,144,52,139,61,
+ 128,68,220,24,33,160,36,155,15,209,4,21,128,69,144,20,
+ 222,7,12,144,21,144,113,145,24,152,84,211,17,33,216,19,
+ 23,140,120,136,15,222,7,11,150,68,216,15,19,231,7,25,
+ 210,7,25,216,12,16,143,75,137,75,152,4,211,12,29,136,
+ 1,220,11,29,152,100,211,11,35,215,11,42,209,11,42,168,
+ 52,211,11,48,136,1,216,15,16,143,122,137,122,139,124,152,
+ 113,159,122,153,122,155,124,209,15,43,208,8,43,224,15,20,
+ 114,62,0,0,0,233,32,0,0,0,62,9,0,0,0,218,
+ 1,34,114,9,0,0,0,114,6,0,0,0,114,120,0,0,
+ 0,218,1,60,218,1,62,218,1,63,114,4,0,0,0,218,
+ 1,124,62,6,0,0,0,218,3,65,85,88,218,3,67,79,
+ 78,218,3,78,85,76,218,3,80,82,78,250,6,67,79,78,
+ 73,78,36,250,7,67,79,78,79,85,84,36,117,15,0,0,
+ 0,49,50,51,52,53,54,55,56,57,194,185,194,178,194,179,
+ 218,3,67,79,77,218,3,76,80,84,99,1,0,0,0,0,
+ 0,0,0,0,0,0,0,8,0,0,0,3,0,0,0,243,
+ 210,0,0,0,149,0,91,0,0,0,0,0,0,0,0,0,
+ 82,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,34,0,91,5,0,0,0,0,0,0,0,0,
+ 85,0,53,1,0,0,0,0,0,0,83,1,5,0,0,0,
+ 53,1,0,0,0,0,0,0,82,7,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,91,8,0,0,
0,0,0,0,0,0,91,10,0,0,0,0,0,0,0,0,
- 53,1,0,0,0,0,0,0,53,1,0,0,0,0,0,0,
- 19,0,53,0,0,0,0,0,0,0,53,1,0,0,0,0,
- 0,0,36,0,41,3,122,54,82,101,116,117,114,110,32,116,
- 114,117,101,32,105,102,32,116,104,101,32,112,97,116,104,110,
- 97,109,101,32,105,115,32,114,101,115,101,114,118,101,100,32,
- 98,121,32,116,104,101,32,115,121,115,116,101,109,46,114,123,
- 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 4,0,0,0,51,0,0,0,243,56,0,0,0,35,0,32,
- 0,149,0,85,0,19,0,72,16,0,0,110,1,91,1,0,
- 0,0,0,0,0,0,0,85,1,53,1,0,0,0,0,0,
- 0,118,0,149,5,32,0,77,18,0,0,11,0,32,0,103,
- 0,55,3,102,1,169,1,78,41,1,218,15,95,105,115,114,
- 101,115,101,114,118,101,100,110,97,109,101,41,2,218,2,46,
- 48,218,4,110,97,109,101,115,2,0,0,0,32,32,114,60,
- 0,0,0,218,9,60,103,101,110,101,120,112,114,62,218,29,
- 105,115,114,101,115,101,114,118,101,100,46,60,108,111,99,97,
- 108,115,62,46,60,103,101,110,101,120,112,114,62,60,1,0,
- 0,115,26,0,0,0,233,0,128,0,208,14,75,210,49,74,
- 168,20,140,127,152,116,215,15,36,208,15,36,210,49,74,249,
- 115,4,0,0,0,130,24,26,1,41,9,114,69,0,0,0,
- 114,83,0,0,0,114,14,0,0,0,114,74,0,0,0,114,
- 40,0,0,0,114,37,0,0,0,218,3,97,110,121,218,8,
- 114,101,118,101,114,115,101,100,114,15,0,0,0,114,58,0,
- 0,0,115,1,0,0,0,32,114,60,0,0,0,114,30,0,
- 0,0,114,30,0,0,0,55,1,0,0,115,70,0,0,0,
- 128,0,244,8,0,12,14,143,59,138,59,148,121,160,20,147,
- 127,160,113,209,23,41,211,11,42,215,11,50,209,11,50,180,
- 54,188,51,211,11,63,128,68,220,11,14,209,14,75,180,24,
- 184,36,191,42,185,42,196,83,187,47,212,49,74,211,14,75,
- 211,11,75,208,4,75,114,62,0,0,0,99,1,0,0,0,
- 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
- 243,196,0,0,0,149,0,85,0,83,1,83,2,4,0,83,
- 3,59,0,0,0,97,5,0,0,85,0,83,4,59,1,0,
- 0,36,0,91,0,0,0,0,0,0,0,0,0,82,3,0,
+ 53,2,0,0,0,0,0,0,110,0,91,13,0,0,0,0,
+ 0,0,0,0,83,2,26,0,91,15,0,0,0,0,0,0,
+ 0,0,85,0,82,17,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,91,10,0,0,0,0,0,0,
+ 0,0,53,1,0,0,0,0,0,0,53,1,0,0,0,0,
+ 0,0,19,0,53,0,0,0,0,0,0,0,53,1,0,0,
+ 0,0,0,0,36,0,41,3,122,54,82,101,116,117,114,110,
+ 32,116,114,117,101,32,105,102,32,116,104,101,32,112,97,116,
+ 104,110,97,109,101,32,105,115,32,114,101,115,101,114,118,101,
+ 100,32,98,121,32,116,104,101,32,115,121,115,116,101,109,46,
+ 114,123,0,0,0,99,1,0,0,0,0,0,0,0,0,0,
+ 0,0,4,0,0,0,51,0,0,0,243,56,0,0,0,35,
+ 0,32,0,149,0,85,0,19,0,72,16,0,0,110,1,91,
+ 1,0,0,0,0,0,0,0,0,85,1,53,1,0,0,0,
+ 0,0,0,118,0,149,5,32,0,77,18,0,0,11,0,32,
+ 0,103,0,55,3,102,1,169,1,78,41,1,218,15,95,105,
+ 115,114,101,115,101,114,118,101,100,110,97,109,101,41,2,218,
+ 2,46,48,218,4,110,97,109,101,115,2,0,0,0,32,32,
+ 114,60,0,0,0,218,9,60,103,101,110,101,120,112,114,62,
+ 218,29,105,115,114,101,115,101,114,118,101,100,46,60,108,111,
+ 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,62,
+ 1,0,0,115,26,0,0,0,233,0,128,0,208,14,75,210,
+ 49,74,168,20,140,127,152,116,215,15,36,208,15,36,210,49,
+ 74,249,115,4,0,0,0,130,24,26,1,41,9,114,69,0,
+ 0,0,114,83,0,0,0,114,14,0,0,0,114,74,0,0,
+ 0,114,40,0,0,0,114,37,0,0,0,218,3,97,110,121,
+ 218,8,114,101,118,101,114,115,101,100,114,15,0,0,0,114,
+ 58,0,0,0,115,1,0,0,0,32,114,60,0,0,0,114,
+ 30,0,0,0,114,30,0,0,0,57,1,0,0,115,70,0,
+ 0,0,128,0,244,8,0,12,14,143,59,138,59,148,121,160,
+ 20,147,127,160,113,209,23,41,211,11,42,215,11,50,209,11,
+ 50,180,54,188,51,211,11,63,128,68,220,11,14,209,14,75,
+ 180,24,184,36,191,42,185,42,196,83,187,47,212,49,74,211,
+ 14,75,211,11,75,208,4,75,114,62,0,0,0,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,
+ 0,0,243,196,0,0,0,149,0,85,0,83,1,83,2,4,
+ 0,83,3,59,0,0,0,97,5,0,0,85,0,83,4,59,
+ 1,0,0,36,0,91,0,0,0,0,0,0,0,0,0,82,
+ 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,85,0,53,1,0,0,0,0,0,0,40,0,0,
+ 0,0,0,0,0,97,1,0,0,103,5,85,0,82,5,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,85,0,53,1,0,0,0,0,0,0,40,0,0,0,0,
- 0,0,0,97,1,0,0,103,5,85,0,82,5,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,
- 6,53,1,0,0,0,0,0,0,83,7,5,0,0,0,82,
- 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,83,8,53,1,0,0,0,0,0,0,82,9,0,
+ 0,83,6,53,1,0,0,0,0,0,0,83,7,5,0,0,
+ 0,82,7,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,83,8,53,1,0,0,0,0,0,0,82,
+ 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,53,0,0,0,0,0,0,0,91,10,0,0,0,
+ 0,0,0,0,0,59,0,0,0,36,0,41,9,122,54,82,
+ 101,116,117,114,110,32,116,114,117,101,32,105,102,32,116,104,
+ 101,32,102,105,108,101,110,97,109,101,32,105,115,32,114,101,
+ 115,101,114,118,101,100,32,98,121,32,116,104,101,32,115,121,
+ 115,116,101,109,46,114,96,0,0,0,78,41,2,114,2,0,
+ 0,0,218,1,32,41,2,114,2,0,0,0,114,3,0,0,
+ 0,84,114,2,0,0,0,114,8,0,0,0,114,180,0,0,
+ 0,41,6,218,15,95,114,101,115,101,114,118,101,100,95,99,
+ 104,97,114,115,218,12,105,110,116,101,114,115,101,99,116,105,
+ 111,110,218,9,112,97,114,116,105,116,105,111,110,114,136,0,
+ 0,0,114,125,0,0,0,218,15,95,114,101,115,101,114,118,
+ 101,100,95,110,97,109,101,115,41,1,114,174,0,0,0,115,
+ 1,0,0,0,32,114,60,0,0,0,114,172,0,0,0,114,
+ 172,0,0,0,64,1,0,0,115,98,0,0,0,128,0,240,
+ 6,0,8,12,136,66,136,67,128,121,144,74,211,7,30,216,
+ 15,19,152,59,209,15,38,208,8,38,244,8,0,8,23,215,
+ 7,35,209,7,35,160,68,215,7,41,209,7,41,216,15,19,
+ 240,8,0,12,16,143,62,137,62,152,35,211,11,30,152,113,
+ 209,11,33,215,11,40,209,11,40,168,19,211,11,45,215,11,
+ 51,209,11,51,211,11,53,188,31,209,11,72,208,4,72,114,
+ 62,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,5,0,0,0,3,0,0,0,243,78,3,0,0,149,0,
+ 91,0,0,0,0,0,0,0,0,0,82,2,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,
+ 85,0,53,1,0,0,0,0,0,0,110,0,91,5,0,0,
+ 0,0,0,0,0,0,85,0,91,6,0,0,0,0,0,0,
+ 0,0,53,2,0,0,0,0,0,0,40,0,0,0,0,0,
+ 0,0,97,5,0,0,83,1,110,1,83,2,110,2,79,4,
+ 83,3,110,1,83,4,110,2,85,0,82,9,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,2,
+ 53,1,0,0,0,0,0,0,40,0,0,0,0,0,0,0,
+ 100,2,0,0,85,0,36,0,83,5,91,11,0,0,0,0,
+ 0,0,0,0,85,0,53,1,0,0,0,0,0,0,112,67,
+ 88,52,58,18,0,0,97,28,0,0,88,3,5,0,0,0,
+ 85,1,59,1,0,0,97,20,0,0,85,3,83,5,45,13,
+ 0,0,110,3,88,52,58,18,0,0,97,10,0,0,88,3,
+ 5,0,0,0,85,1,59,1,0,0,97,2,0,0,77,20,
+ 0,0,83,6,91,0,0,0,0,0,0,0,0,0,82,12,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,53,0,0,0,0,0,0,0,91,10,0,0,0,0,0,
- 0,0,0,59,0,0,0,36,0,41,9,122,54,82,101,116,
- 117,114,110,32,116,114,117,101,32,105,102,32,116,104,101,32,
- 102,105,108,101,110,97,109,101,32,105,115,32,114,101,115,101,
- 114,118,101,100,32,98,121,32,116,104,101,32,115,121,115,116,
- 101,109,46,114,96,0,0,0,78,41,2,114,2,0,0,0,
- 218,1,32,41,2,114,2,0,0,0,114,3,0,0,0,84,
- 114,2,0,0,0,114,8,0,0,0,114,180,0,0,0,41,
- 6,218,15,95,114,101,115,101,114,118,101,100,95,99,104,97,
- 114,115,218,12,105,110,116,101,114,115,101,99,116,105,111,110,
- 218,9,112,97,114,116,105,116,105,111,110,114,136,0,0,0,
- 114,125,0,0,0,218,15,95,114,101,115,101,114,118,101,100,
- 95,110,97,109,101,115,41,1,114,174,0,0,0,115,1,0,
- 0,0,32,114,60,0,0,0,114,172,0,0,0,114,172,0,
- 0,0,62,1,0,0,115,98,0,0,0,128,0,240,6,0,
- 8,12,136,66,136,67,128,121,144,74,211,7,30,216,15,19,
- 152,59,209,15,38,208,8,38,244,8,0,8,23,215,7,35,
- 209,7,35,160,68,215,7,41,209,7,41,216,15,19,240,8,
- 0,12,16,143,62,137,62,152,35,211,11,30,152,113,209,11,
- 33,215,11,40,209,11,40,168,19,211,11,45,215,11,51,209,
- 11,51,211,11,53,188,31,209,11,72,208,4,72,114,62,0,
- 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,5,
- 0,0,0,3,0,0,0,243,78,3,0,0,149,0,91,0,
- 0,0,0,0,0,0,0,0,82,2,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,34,0,85,0,
- 53,1,0,0,0,0,0,0,110,0,91,5,0,0,0,0,
- 0,0,0,0,85,0,91,6,0,0,0,0,0,0,0,0,
- 53,2,0,0,0,0,0,0,40,0,0,0,0,0,0,0,
- 97,5,0,0,83,1,110,1,83,2,110,2,79,4,83,3,
- 110,1,83,4,110,2,85,0,82,9,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,85,2,53,1,
- 0,0,0,0,0,0,40,0,0,0,0,0,0,0,100,2,
- 0,0,85,0,36,0,83,5,91,11,0,0,0,0,0,0,
- 0,0,85,0,53,1,0,0,0,0,0,0,112,67,88,52,
- 58,18,0,0,97,28,0,0,88,3,5,0,0,0,85,1,
- 59,1,0,0,97,20,0,0,85,3,83,5,45,13,0,0,
- 110,3,88,52,58,18,0,0,97,10,0,0,88,3,5,0,
- 0,0,85,1,59,1,0,0,97,2,0,0,77,20,0,0,
- 83,6,91,0,0,0,0,0,0,0,0,0,82,12,0,0,
+ 0,0,59,0,0,0,97,20,0,0,91,0,0,0,0,0,
+ 0,0,0,0,82,12,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,83,6,5,0,0,0,110,5,
+ 79,83,83,7,91,0,0,0,0,0,0,0,0,0,82,12,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 59,0,0,0,97,20,0,0,91,0,0,0,0,0,0,0,
- 0,0,82,12,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,83,6,5,0,0,0,110,5,79,83,
- 83,7,91,0,0,0,0,0,0,0,0,0,82,12,0,0,
+ 0,0,59,1,0,0,97,2,0,0,85,0,36,0,91,0,
+ 0,0,0,0,0,0,0,0,82,12,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,82,15,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 59,1,0,0,97,2,0,0,85,0,36,0,91,0,0,0,
- 0,0,0,0,0,0,82,12,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,82,15,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,8,
- 83,9,53,2,0,0,0,0,0,0,110,6,91,17,0,0,
- 0,0,0,0,0,0,85,6,91,0,0,0,0,0,0,0,
- 0,0,82,12,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,83,7,5,0,0,0,53,2,0,0,
- 0,0,0,0,110,5,85,3,83,5,58,119,0,0,97,122,
- 0,0,85,0,83,5,85,3,4,0,110,7,91,5,0,0,
- 0,0,0,0,0,0,85,7,91,6,0,0,0,0,0,0,
- 0,0,53,2,0,0,0,0,0,0,40,0,0,0,0,0,
- 0,0,97,22,0,0,91,0,0,0,0,0,0,0,0,0,
- 82,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,34,0,85,7,53,1,0,0,0,0,0,0,
- 110,7,91,0,0,0,0,0,0,0,0,0,82,12,0,0,
+ 83,8,83,9,53,2,0,0,0,0,0,0,110,6,91,17,
+ 0,0,0,0,0,0,0,0,85,6,91,0,0,0,0,0,
+ 0,0,0,0,82,12,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,83,7,5,0,0,0,53,2,
+ 0,0,0,0,0,0,110,5,85,3,83,5,58,119,0,0,
+ 97,122,0,0,85,0,83,5,85,3,4,0,110,7,91,5,
+ 0,0,0,0,0,0,0,0,85,7,91,6,0,0,0,0,
+ 0,0,0,0,53,2,0,0,0,0,0,0,40,0,0,0,
+ 0,0,0,0,97,22,0,0,91,0,0,0,0,0,0,0,
+ 0,0,82,18,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,34,0,85,7,53,1,0,0,0,0,
+ 0,0,110,7,91,0,0,0,0,0,0,0,0,0,82,12,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 82,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,83,10,53,1,0,0,0,0,0,0,110,8,
- 88,120,58,119,0,0,97,38,0,0,85,8,91,21,0,0,
- 0,0,0,0,0,0,85,5,53,1,0,0,0,0,0,0,
- 58,119,0,0,97,2,0,0,85,0,36,0,91,17,0,0,
- 0,0,0,0,0,0,91,23,0,0,0,0,0,0,0,0,
- 85,5,53,1,0,0,0,0,0,0,85,7,53,2,0,0,
- 0,0,0,0,110,5,91,5,0,0,0,0,0,0,0,0,
- 85,0,91,6,0,0,0,0,0,0,0,0,53,2,0,0,
- 0,0,0,0,40,0,0,0,0,0,0,0,97,22,0,0,
- 91,0,0,0,0,0,0,0,0,0,82,24,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,
- 85,5,53,1,0,0,0,0,0,0,110,5,88,80,85,3,
- 83,11,4,0,45,0,0,0,36,0,41,12,122,72,69,120,
- 112,97,110,100,32,126,32,97,110,100,32,126,117,115,101,114,
- 32,99,111,110,115,116,114,117,99,116,115,46,10,10,73,102,
- 32,117,115,101,114,32,111,114,32,36,72,79,77,69,32,105,
- 115,32,117,110,107,110,111,119,110,44,32,100,111,32,110,111,
- 116,104,105,110,103,46,114,54,0,0,0,243,1,0,0,0,
- 126,114,55,0,0,0,218,1,126,114,91,0,0,0,218,11,
- 85,83,69,82,80,82,79,70,73,76,69,218,8,72,79,77,
- 69,80,65,84,72,218,9,72,79,77,69,68,82,73,86,69,
- 114,122,0,0,0,218,8,85,83,69,82,78,65,77,69,78,
- 41,13,114,69,0,0,0,114,70,0,0,0,114,56,0,0,
- 0,114,57,0,0,0,114,92,0,0,0,114,135,0,0,0,
- 218,7,101,110,118,105,114,111,110,218,3,103,101,116,114,12,
- 0,0,0,114,83,0,0,0,114,17,0,0,0,114,18,0,
- 0,0,114,82,0,0,0,41,9,114,59,0,0,0,114,103,
- 0,0,0,218,5,116,105,108,100,101,114,139,0,0,0,218,
- 1,110,218,8,117,115,101,114,104,111,109,101,114,113,0,0,
- 0,218,11,116,97,114,103,101,116,95,117,115,101,114,218,12,
- 99,117,114,114,101,110,116,95,117,115,101,114,115,9,0,0,
- 0,32,32,32,32,32,32,32,32,32,114,60,0,0,0,114,
- 31,0,0,0,114,31,0,0,0,87,1,0,0,115,98,1,
- 0,0,128,0,244,8,0,12,14,143,57,138,57,144,84,139,
- 63,128,68,220,7,17,144,36,156,5,215,7,30,209,7,30,
- 216,15,21,136,4,216,16,20,137,5,224,15,20,136,4,216,
- 16,19,136,5,216,11,15,143,63,137,63,152,53,215,11,33,
- 209,11,33,216,15,19,136,11,216,11,12,140,99,144,36,139,
- 105,128,113,216,10,11,139,37,144,68,145,71,160,52,211,20,
- 39,216,8,9,136,81,137,6,136,1,240,3,0,11,12,139,
- 37,144,68,145,71,160,52,213,20,39,240,6,0,8,21,156,
- 2,159,10,153,10,211,7,34,220,19,21,151,58,145,58,152,
- 109,209,19,44,137,8,216,9,19,156,50,159,58,153,58,211,
- 9,37,216,15,19,136,11,228,16,18,151,10,145,10,151,14,
- 145,14,152,123,168,66,211,16,47,136,5,220,19,23,152,5,
- 156,114,159,122,153,122,168,42,209,31,53,211,19,54,136,8,
- 224,7,8,136,65,131,118,216,22,26,152,49,152,81,144,105,
- 136,11,220,11,21,144,107,164,53,215,11,41,209,11,41,220,
- 26,28,159,43,154,43,160,107,211,26,50,136,75,220,23,25,
- 151,122,145,122,151,126,145,126,160,106,211,23,49,136,12,224,
- 11,22,211,11,38,240,12,0,16,28,156,120,168,8,211,31,
- 49,211,15,49,216,23,27,144,11,220,23,27,156,71,160,72,
- 211,28,45,168,123,211,23,59,136,72,228,7,17,144,36,156,
- 5,215,7,30,209,7,30,220,19,21,151,59,146,59,152,120,
- 211,19,40,136,8,224,11,19,152,49,152,50,144,104,209,11,
- 30,208,4,30,114,62,0,0,0,122,46,39,91,94,39,93,
- 42,39,63,124,37,40,37,124,91,94,37,93,42,37,63,41,
- 124,92,36,40,92,36,124,91,45,92,119,93,43,124,92,123,
- 91,94,125,93,42,92,125,63,41,99,1,0,0,0,0,0,
- 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,58,
- 2,0,0,94,4,94,5,94,6,94,7,94,8,149,0,91,
- 0,0,0,0,0,0,0,0,0,82,2,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,85,
- 0,53,1,0,0,0,0,0,0,110,0,91,5,0,0,0,
- 0,0,0,0,0,85,0,91,6,0,0,0,0,0,0,0,
- 0,53,2,0,0,0,0,0,0,40,0,0,0,0,0,0,
- 0,97,117,0,0,83,1,85,0,59,1,0,0,97,8,0,
- 0,83,2,85,0,59,1,0,0,97,2,0,0,85,0,36,
- 0,91,8,0,0,0,0,0,0,0,0,40,0,0,0,0,
- 0,0,0,100,60,0,0,83,3,83,4,75,5,110,1,85,
- 1,82,13,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,91,14,0,0,0,0,0,0,0,0,82,
- 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,53,0,0,0,0,0,0,0,85,1,82,18,0,
+ 0,0,82,15,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,83,10,53,1,0,0,0,0,0,0,
+ 110,8,88,120,58,119,0,0,97,38,0,0,85,8,91,21,
+ 0,0,0,0,0,0,0,0,85,5,53,1,0,0,0,0,
+ 0,0,58,119,0,0,97,2,0,0,85,0,36,0,91,17,
+ 0,0,0,0,0,0,0,0,91,23,0,0,0,0,0,0,
+ 0,0,85,5,53,1,0,0,0,0,0,0,85,7,53,2,
+ 0,0,0,0,0,0,110,5,91,5,0,0,0,0,0,0,
+ 0,0,85,0,91,6,0,0,0,0,0,0,0,0,53,2,
+ 0,0,0,0,0,0,40,0,0,0,0,0,0,0,97,22,
+ 0,0,91,0,0,0,0,0,0,0,0,0,82,24,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 34,0,85,5,53,1,0,0,0,0,0,0,110,5,88,80,
+ 85,3,83,11,4,0,45,0,0,0,36,0,41,12,122,72,
+ 69,120,112,97,110,100,32,126,32,97,110,100,32,126,117,115,
+ 101,114,32,99,111,110,115,116,114,117,99,116,115,46,10,10,
+ 73,102,32,117,115,101,114,32,111,114,32,36,72,79,77,69,
+ 32,105,115,32,117,110,107,110,111,119,110,44,32,100,111,32,
+ 110,111,116,104,105,110,103,46,114,54,0,0,0,243,1,0,
+ 0,0,126,114,55,0,0,0,218,1,126,114,91,0,0,0,
+ 218,11,85,83,69,82,80,82,79,70,73,76,69,218,8,72,
+ 79,77,69,80,65,84,72,218,9,72,79,77,69,68,82,73,
+ 86,69,114,122,0,0,0,218,8,85,83,69,82,78,65,77,
+ 69,78,41,13,114,69,0,0,0,114,70,0,0,0,114,56,
+ 0,0,0,114,57,0,0,0,114,92,0,0,0,114,135,0,
+ 0,0,218,7,101,110,118,105,114,111,110,218,3,103,101,116,
+ 114,12,0,0,0,114,83,0,0,0,114,17,0,0,0,114,
+ 18,0,0,0,114,82,0,0,0,41,9,114,59,0,0,0,
+ 114,103,0,0,0,218,5,116,105,108,100,101,114,139,0,0,
+ 0,218,1,110,218,8,117,115,101,114,104,111,109,101,114,113,
+ 0,0,0,218,11,116,97,114,103,101,116,95,117,115,101,114,
+ 218,12,99,117,114,114,101,110,116,95,117,115,101,114,115,9,
+ 0,0,0,32,32,32,32,32,32,32,32,32,114,60,0,0,
+ 0,114,31,0,0,0,114,31,0,0,0,89,1,0,0,115,
+ 98,1,0,0,128,0,244,8,0,12,14,143,57,138,57,144,
+ 84,139,63,128,68,220,7,17,144,36,156,5,215,7,30,209,
+ 7,30,216,15,21,136,4,216,16,20,137,5,224,15,20,136,
+ 4,216,16,19,136,5,216,11,15,143,63,137,63,152,53,215,
+ 11,33,209,11,33,216,15,19,136,11,216,11,12,140,99,144,
+ 36,139,105,128,113,216,10,11,139,37,144,68,145,71,160,52,
+ 211,20,39,216,8,9,136,81,137,6,136,1,240,3,0,11,
+ 12,139,37,144,68,145,71,160,52,213,20,39,240,6,0,8,
+ 21,156,2,159,10,153,10,211,7,34,220,19,21,151,58,145,
+ 58,152,109,209,19,44,137,8,216,9,19,156,50,159,58,153,
+ 58,211,9,37,216,15,19,136,11,228,16,18,151,10,145,10,
+ 151,14,145,14,152,123,168,66,211,16,47,136,5,220,19,23,
+ 152,5,156,114,159,122,153,122,168,42,209,31,53,211,19,54,
+ 136,8,224,7,8,136,65,131,118,216,22,26,152,49,152,81,
+ 144,105,136,11,220,11,21,144,107,164,53,215,11,41,209,11,
+ 41,220,26,28,159,43,154,43,160,107,211,26,50,136,75,220,
+ 23,25,151,122,145,122,151,126,145,126,160,106,211,23,49,136,
+ 12,224,11,22,211,11,38,240,12,0,16,28,156,120,168,8,
+ 211,31,49,211,15,49,216,23,27,144,11,220,23,27,156,71,
+ 160,72,211,28,45,168,123,211,23,59,136,72,228,7,17,144,
+ 36,156,5,215,7,30,209,7,30,220,19,21,151,59,146,59,
+ 152,120,211,19,40,136,8,224,11,19,152,49,152,50,144,104,
+ 209,11,30,208,4,30,114,62,0,0,0,122,46,39,91,94,
+ 39,93,42,39,63,124,37,40,37,124,91,94,37,93,42,37,
+ 63,41,124,92,36,40,92,36,124,91,45,92,119,93,43,124,
+ 92,123,91,94,125,93,42,92,125,63,41,99,1,0,0,0,
+ 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,
+ 243,58,2,0,0,94,4,94,5,94,6,94,7,94,8,149,
+ 0,91,0,0,0,0,0,0,0,0,0,82,2,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,
+ 0,85,0,53,1,0,0,0,0,0,0,110,0,91,5,0,
+ 0,0,0,0,0,0,0,85,0,91,6,0,0,0,0,0,
+ 0,0,0,53,2,0,0,0,0,0,0,40,0,0,0,0,
+ 0,0,0,97,117,0,0,83,1,85,0,59,1,0,0,97,
+ 8,0,0,83,2,85,0,59,1,0,0,97,2,0,0,85,
+ 0,36,0,91,8,0,0,0,0,0,0,0,0,40,0,0,
+ 0,0,0,0,0,100,60,0,0,83,3,83,4,75,5,110,
+ 1,85,1,82,13,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,91,14,0,0,0,0,0,0,0,
+ 0,82,17,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,53,0,0,0,0,0,0,0,85,1,82,
+ 18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,53,2,0,0,0,0,0,0,82,20,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,
+ 4,91,8,0,0,0,0,0,0,0,0,110,2,83,2,109,
+ 7,83,5,109,4,83,6,109,8,83,1,109,5,91,23,0,
+ 0,0,0,0,0,0,0,91,0,0,0,0,0,0,0,0,
+ 0,83,7,83,4,53,3,0,0,0,0,0,0,109,6,79,
+ 101,83,8,85,0,59,1,0,0,97,8,0,0,83,9,85,
+ 0,59,1,0,0,97,2,0,0,85,0,36,0,91,24,0,
+ 0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,100,
+ 46,0,0,83,3,83,4,75,5,110,1,85,1,82,13,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,91,14,0,0,0,0,0,0,0,0,85,1,82,18,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,53,2,0,0,0,0,0,0,82,20,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,113,4,91,
- 8,0,0,0,0,0,0,0,0,110,2,83,2,109,7,83,
- 5,109,4,83,6,109,8,83,1,109,5,91,23,0,0,0,
- 0,0,0,0,0,91,0,0,0,0,0,0,0,0,0,83,
- 7,83,4,53,3,0,0,0,0,0,0,109,6,79,101,83,
- 8,85,0,59,1,0,0,97,8,0,0,83,9,85,0,59,
- 1,0,0,97,2,0,0,85,0,36,0,91,24,0,0,0,
- 0,0,0,0,0,40,0,0,0,0,0,0,0,100,46,0,
- 0,83,3,83,4,75,5,110,1,85,1,82,13,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,
- 14,0,0,0,0,0,0,0,0,85,1,82,18,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,
- 2,0,0,0,0,0,0,82,20,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,113,12,91,24,0,
- 0,0,0,0,0,0,0,110,2,83,9,109,7,83,10,109,
- 4,83,11,109,8,83,8,109,5,91,0,0,0,0,0,0,
- 0,0,0,82,26,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,109,6,85,4,85,5,85,6,85,
- 7,85,8,52,5,83,12,26,0,106,8,110,3,85,2,34,
- 0,88,48,53,2,0,0,0,0,0,0,36,0,41,13,122,
- 98,69,120,112,97,110,100,32,115,104,101,108,108,32,118,97,
- 114,105,97,98,108,101,115,32,111,102,32,116,104,101,32,102,
- 111,114,109,115,32,36,118,97,114,44,32,36,123,118,97,114,
- 125,32,97,110,100,32,37,118,97,114,37,46,10,10,85,110,
- 107,110,111,119,110,32,118,97,114,105,97,98,108,101,115,32,
- 97,114,101,32,108,101,102,116,32,117,110,99,104,97,110,103,
- 101,100,46,243,1,0,0,0,36,243,1,0,0,0,37,114,
- 8,0,0,0,78,243,1,0,0,0,123,243,1,0,0,0,
- 125,218,8,101,110,118,105,114,111,110,98,218,1,36,218,1,
- 37,218,1,123,218,1,125,99,1,0,0,0,0,0,0,0,
- 0,0,0,0,6,0,0,0,19,0,0,0,243,192,1,0,
- 0,62,5,149,0,85,0,82,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,110,1,85,1,99,
- 5,0,0,85,0,83,1,5,0,0,0,36,0,88,1,5,
- 0,0,0,110,2,85,1,83,2,58,88,0,0,97,41,0,
- 0,85,2,84,6,58,88,0,0,97,2,0,0,85,2,36,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,113,12,91,
+ 24,0,0,0,0,0,0,0,0,110,2,83,9,109,7,83,
+ 10,109,4,83,11,109,8,83,8,109,5,91,0,0,0,0,
+ 0,0,0,0,0,82,26,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,109,6,85,4,85,5,85,
+ 6,85,7,85,8,52,5,83,12,26,0,106,8,110,3,85,
+ 2,34,0,88,48,53,2,0,0,0,0,0,0,36,0,41,
+ 13,122,98,69,120,112,97,110,100,32,115,104,101,108,108,32,
+ 118,97,114,105,97,98,108,101,115,32,111,102,32,116,104,101,
+ 32,102,111,114,109,115,32,36,118,97,114,44,32,36,123,118,
+ 97,114,125,32,97,110,100,32,37,118,97,114,37,46,10,10,
+ 85,110,107,110,111,119,110,32,118,97,114,105,97,98,108,101,
+ 115,32,97,114,101,32,108,101,102,116,32,117,110,99,104,97,
+ 110,103,101,100,46,243,1,0,0,0,36,243,1,0,0,0,
+ 37,114,8,0,0,0,78,243,1,0,0,0,123,243,1,0,
+ 0,0,125,218,8,101,110,118,105,114,111,110,98,218,1,36,
+ 218,1,37,218,1,123,218,1,125,99,1,0,0,0,0,0,
+ 0,0,0,0,0,0,6,0,0,0,19,0,0,0,243,192,
+ 1,0,0,62,5,149,0,85,0,82,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,110,1,85,
+ 1,99,5,0,0,85,0,83,1,5,0,0,0,36,0,88,
+ 1,5,0,0,0,110,2,85,1,83,2,58,88,0,0,97,
+ 41,0,0,85,2,84,6,58,88,0,0,97,2,0,0,85,
+ 2,36,0,85,2,82,3,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,84,6,53,1,0,0,0,
+ 0,0,0,40,0,0,0,0,0,0,0,100,5,0,0,85,
+ 0,83,1,5,0,0,0,36,0,85,2,83,0,83,3,4,
+ 0,110,2,79,62,85,2,84,4,58,88,0,0,97,2,0,
+ 0,85,2,36,0,85,2,82,5,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,84,3,53,1,0,
+ 0,0,0,0,0,40,0,0,0,0,0,0,0,97,32,0,
0,85,2,82,3,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,84,6,53,1,0,0,0,0,0,
+ 0,0,0,0,0,0,0,84,7,53,1,0,0,0,0,0,
0,40,0,0,0,0,0,0,0,100,5,0,0,85,0,83,
- 1,5,0,0,0,36,0,85,2,83,0,83,3,4,0,110,
- 2,79,62,85,2,84,4,58,88,0,0,97,2,0,0,85,
- 2,36,0,85,2,82,5,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,84,3,53,1,0,0,0,
- 0,0,0,40,0,0,0,0,0,0,0,97,32,0,0,85,
- 2,82,3,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,84,7,53,1,0,0,0,0,0,0,40,
- 0,0,0,0,0,0,0,100,5,0,0,85,0,83,1,5,
- 0,0,0,36,0,85,2,83,2,83,3,4,0,110,2,30,
- 0,84,5,99,59,0,0,91,6,0,0,0,0,0,0,0,
- 0,82,8,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,34,0,91,6,0,0,0,0,0,0,0,
- 0,82,10,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,91,6,0,0,0,0,0,0,0,0,82,
- 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,34,0,85,2,53,1,0,0,0,0,0,0,5,
- 0,0,0,53,1,0,0,0,0,0,0,36,0,84,5,85,
- 2,5,0,0,0,36,0,33,0,91,14,0,0,0,0,0,
- 0,0,0,7,0,97,8,0,0,32,0,85,0,83,1,5,
- 0,0,0,115,2,31,0,36,0,102,0,61,3,31,0,102,
- 1,41,4,78,114,8,0,0,0,114,91,0,0,0,114,96,
- 0,0,0,41,8,218,9,108,97,115,116,105,110,100,101,120,
- 218,8,101,110,100,115,119,105,116,104,114,92,0,0,0,114,
- 69,0,0,0,114,82,0,0,0,114,192,0,0,0,114,83,
- 0,0,0,218,8,75,101,121,69,114,114,111,114,41,8,218,
- 1,109,114,210,0,0,0,114,174,0,0,0,218,5,98,114,
- 97,99,101,218,6,100,111,108,108,97,114,114,192,0,0,0,
- 218,7,112,101,114,99,101,110,116,218,6,114,98,114,97,99,
- 101,115,8,0,0,0,32,32,32,128,128,128,128,128,114,60,
- 0,0,0,218,4,114,101,112,108,218,24,101,120,112,97,110,
- 100,118,97,114,115,46,60,108,111,99,97,108,115,62,46,114,
- 101,112,108,182,1,0,0,115,227,0,0,0,248,128,0,216,
- 20,21,151,75,145,75,136,9,216,11,20,209,11,28,216,19,
- 20,144,81,145,52,136,75,216,15,16,137,124,136,4,216,11,
- 20,152,1,139,62,216,15,19,144,119,139,127,216,23,27,144,
- 11,216,19,23,151,61,145,61,160,23,215,19,41,209,19,41,
- 216,23,24,152,17,145,116,144,11,216,19,23,152,3,152,18,
- 144,57,137,68,224,15,19,144,118,139,126,216,23,27,144,11,
- 216,15,19,143,127,137,127,152,117,215,15,37,209,15,37,216,
- 23,27,151,125,145,125,160,86,215,23,44,209,23,44,216,27,
- 28,152,81,153,52,144,75,216,23,27,152,65,152,98,144,122,
- 144,4,240,4,6,9,24,216,15,22,137,127,220,23,25,151,
- 123,146,123,164,50,167,58,161,58,172,98,175,107,170,107,184,
- 36,211,46,63,209,35,64,211,23,65,208,16,65,224,23,30,
- 152,116,145,125,208,16,36,248,220,15,23,243,0,1,9,24,
- 216,19,20,144,81,145,52,138,75,240,3,1,9,24,250,115,
- 24,0,0,0,194,8,61,67,11,0,195,6,4,67,11,0,
- 195,11,15,67,29,3,195,28,1,67,29,3,41,14,114,69,
- 0,0,0,114,70,0,0,0,114,56,0,0,0,114,57,0,
- 0,0,218,8,95,118,97,114,115,117,98,98,218,2,114,101,
- 218,7,99,111,109,112,105,108,101,218,11,95,118,97,114,112,
- 97,116,116,101,114,110,114,78,0,0,0,218,5,65,83,67,
- 73,73,218,3,115,117,98,218,7,103,101,116,97,116,116,114,
- 218,7,95,118,97,114,115,117,98,114,192,0,0,0,41,9,
- 114,59,0,0,0,114,221,0,0,0,114,225,0,0,0,114,
- 218,0,0,0,114,214,0,0,0,114,215,0,0,0,114,192,
- 0,0,0,114,216,0,0,0,114,217,0,0,0,115,9,0,
- 0,0,32,32,32,32,64,64,64,64,64,114,60,0,0,0,
- 114,32,0,0,0,114,32,0,0,0,151,1,0,0,115,241,
- 0,0,0,252,128,0,244,8,0,12,14,143,57,138,57,144,
- 84,139,63,128,68,228,7,17,144,36,156,5,215,7,30,209,
- 7,30,216,11,15,144,116,211,11,27,160,4,168,68,211,32,
- 48,216,19,23,136,75,223,15,23,138,120,219,12,21,216,23,
- 25,151,122,145,122,164,43,215,34,52,209,34,52,211,34,54,
- 184,2,191,8,185,8,211,23,65,215,23,69,209,23,69,136,
- 72,220,14,22,136,3,216,18,22,136,7,216,16,20,136,5,
- 216,17,21,136,6,216,17,21,136,6,220,18,25,156,34,152,
- 106,168,36,211,18,47,137,7,224,11,14,144,100,139,63,152,
- 115,168,36,155,127,216,19,23,136,75,223,15,22,138,119,219,
- 12,21,216,22,24,151,106,145,106,164,27,168,98,175,104,169,
- 104,211,22,55,215,22,59,209,22,59,136,71,220,14,21,136,
- 3,216,18,21,136,7,216,16,19,136,5,216,17,20,136,6,
- 216,17,20,136,6,220,18,20,151,42,145,42,136,7,247,4,
- 25,5,24,241,0,25,5,24,241,54,0,12,15,136,116,139,
- 63,208,4,26,114,62,0,0,0,41,1,218,14,95,112,97,
- 116,104,95,110,111,114,109,112,97,116,104,99,1,0,0,0,
- 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,
- 243,58,2,0,0,149,0,91,0,0,0,0,0,0,0,0,
- 0,82,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,34,0,85,0,53,1,0,0,0,0,0,
- 0,110,0,91,5,0,0,0,0,0,0,0,0,85,0,91,
- 6,0,0,0,0,0,0,0,0,53,2,0,0,0,0,0,
- 0,40,0,0,0,0,0,0,0,97,9,0,0,83,1,110,
- 1,83,2,110,2,83,3,110,3,83,4,110,4,79,8,83,
- 5,110,1,83,6,110,2,83,7,110,3,83,8,110,4,85,
- 0,82,9,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,88,33,53,2,0,0,0,0,0,0,110,
- 0,91,11,0,0,0,0,0,0,0,0,85,0,53,1,0,
- 0,0,0,0,0,117,3,0,0,112,86,110,0,88,86,45,
- 0,0,0,110,7,85,0,82,13,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,85,1,53,1,0,
- 0,0,0,0,0,110,8,83,9,110,9,85,9,91,15,0,
- 0,0,0,0,0,0,0,85,8,53,1,0,0,0,0,0,
- 0,58,18,0,0,97,105,0,0,88,137,5,0,0,0,40,
- 0,0,0,0,0,0,0,97,8,0,0,88,137,5,0,0,
- 0,85,3,58,88,0,0,97,3,0,0,88,137,9,0,79,
- 68,88,137,5,0,0,0,85,4,58,88,0,0,97,55,0,
- 0,85,9,83,9,58,148,0,0,97,27,0,0,88,137,83,
- 10,45,10,0,0,5,0,0,0,85,4,58,119,0,0,97,
- 16,0,0,88,137,83,10,45,10,0,0,85,9,83,10,45,
- 0,0,0,50,2,9,0,85,9,83,10,45,23,0,0,110,
- 9,79,27,85,9,83,9,58,88,0,0,97,10,0,0,85,
- 6,40,0,0,0,0,0,0,0,97,3,0,0,88,137,9,
- 0,79,11,85,9,83,10,45,13,0,0,110,9,79,5,85,
- 9,83,10,45,13,0,0,110,9,85,9,91,15,0,0,0,
- 0,0,0,0,0,85,8,53,1,0,0,0,0,0,0,58,
- 18,0,0,97,2,0,0,77,105,0,0,85,7,40,0,0,
- 0,0,0,0,0,100,24,0,0,85,8,40,0,0,0,0,
- 0,0,0,100,17,0,0,85,8,82,17,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,85,3,53,
- 1,0,0,0,0,0,0,32,0,88,113,82,19,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,
- 8,53,1,0,0,0,0,0,0,45,0,0,0,36,0,41,
- 11,122,48,78,111,114,109,97,108,105,122,101,32,112,97,116,
- 104,44,32,101,108,105,109,105,110,97,116,105,110,103,32,100,
- 111,117,98,108,101,32,115,108,97,115,104,101,115,44,32,101,
- 116,99,46,114,86,0,0,0,114,87,0,0,0,114,142,0,
- 0,0,243,2,0,0,0,46,46,114,4,0,0,0,114,6,
- 0,0,0,114,2,0,0,0,114,3,0,0,0,114,8,0,
- 0,0,114,91,0,0,0,41,10,114,69,0,0,0,114,70,
- 0,0,0,114,56,0,0,0,114,57,0,0,0,114,74,0,
- 0,0,114,14,0,0,0,114,15,0,0,0,114,135,0,0,
- 0,218,6,97,112,112,101,110,100,114,12,0,0,0,41,10,
- 114,59,0,0,0,114,37,0,0,0,114,40,0,0,0,114,
- 35,0,0,0,114,36,0,0,0,114,113,0,0,0,114,114,
- 0,0,0,218,6,112,114,101,102,105,120,218,5,99,111,109,
- 112,115,114,139,0,0,0,115,10,0,0,0,32,32,32,32,
- 32,32,32,32,32,32,114,60,0,0,0,114,33,0,0,0,
- 114,33,0,0,0,219,1,0,0,115,32,1,0,0,128,0,
- 228,15,17,143,121,138,121,152,20,139,127,136,4,220,11,21,
- 144,100,156,69,215,11,34,209,11,34,216,18,23,136,67,216,
- 21,25,136,70,216,21,25,136,70,216,21,26,137,70,224,18,
- 22,136,67,216,21,24,136,70,216,21,24,136,70,216,21,25,
- 136,70,216,15,19,143,124,137,124,152,70,211,15,40,136,4,
- 220,28,37,160,100,155,79,209,8,25,136,5,144,84,216,17,
- 22,145,28,136,6,216,16,20,151,10,145,10,152,51,147,15,
- 136,5,216,12,13,136,1,216,14,15,148,35,144,101,147,42,
- 139,110,216,19,24,151,56,152,117,153,120,168,54,211,31,49,
- 216,20,25,145,72,216,17,22,145,24,152,86,211,17,35,216,
- 19,20,144,113,147,53,152,85,160,81,161,51,153,90,168,54,
- 211,29,49,216,24,29,160,1,153,99,160,33,160,65,161,35,
- 152,103,152,14,216,20,21,152,17,145,70,145,65,216,21,22,
- 152,33,147,86,166,4,216,24,29,153,8,224,20,21,152,17,
- 145,70,145,65,224,16,17,144,81,145,6,144,1,240,25,0,
- 15,16,148,35,144,101,147,42,141,110,246,28,0,16,22,158,
- 101,216,12,17,143,76,137,76,152,22,212,12,32,216,15,21,
- 159,8,153,8,160,21,155,15,209,15,39,208,8,39,114,62,
- 0,0,0,41,1,218,16,95,103,101,116,102,117,108,108,112,
- 97,116,104,110,97,109,101,99,1,0,0,0,0,0,0,0,
- 0,0,0,0,6,0,0,0,3,0,0,0,243,244,1,0,
- 0,149,0,30,0,91,1,0,0,0,0,0,0,0,0,91,
- 3,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
- 0,0,0,53,1,0,0,0,0,0,0,36,0,33,0,91,
- 4,0,0,0,0,0,0,0,0,91,6,0,0,0,0,0,
- 0,0,0,52,2,7,0,97,3,0,0,32,0,31,0,79,
- 4,102,0,61,3,31,0,102,1,91,8,0,0,0,0,0,
+ 1,5,0,0,0,36,0,85,2,83,2,83,3,4,0,110,
+ 2,30,0,84,5,99,59,0,0,91,6,0,0,0,0,0,
+ 0,0,0,82,8,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,34,0,91,6,0,0,0,0,0,
0,0,0,82,10,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,91,6,0,0,0,0,0,0,0,
+ 0,82,12,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,34,0,85,2,53,1,0,0,0,0,0,
+ 0,5,0,0,0,53,1,0,0,0,0,0,0,36,0,84,
+ 5,85,2,5,0,0,0,36,0,33,0,91,14,0,0,0,
+ 0,0,0,0,0,7,0,97,8,0,0,32,0,85,0,83,
+ 1,5,0,0,0,115,2,31,0,36,0,102,0,61,3,31,
+ 0,102,1,41,4,78,114,8,0,0,0,114,91,0,0,0,
+ 114,96,0,0,0,41,8,218,9,108,97,115,116,105,110,100,
+ 101,120,218,8,101,110,100,115,119,105,116,104,114,92,0,0,
+ 0,114,69,0,0,0,114,82,0,0,0,114,192,0,0,0,
+ 114,83,0,0,0,218,8,75,101,121,69,114,114,111,114,41,
+ 8,218,1,109,114,210,0,0,0,114,174,0,0,0,218,5,
+ 98,114,97,99,101,218,6,100,111,108,108,97,114,114,192,0,
+ 0,0,218,7,112,101,114,99,101,110,116,218,6,114,98,114,
+ 97,99,101,115,8,0,0,0,32,32,32,128,128,128,128,128,
+ 114,60,0,0,0,218,4,114,101,112,108,218,24,101,120,112,
+ 97,110,100,118,97,114,115,46,60,108,111,99,97,108,115,62,
+ 46,114,101,112,108,184,1,0,0,115,227,0,0,0,248,128,
+ 0,216,20,21,151,75,145,75,136,9,216,11,20,209,11,28,
+ 216,19,20,144,81,145,52,136,75,216,15,16,137,124,136,4,
+ 216,11,20,152,1,139,62,216,15,19,144,119,139,127,216,23,
+ 27,144,11,216,19,23,151,61,145,61,160,23,215,19,41,209,
+ 19,41,216,23,24,152,17,145,116,144,11,216,19,23,152,3,
+ 152,18,144,57,137,68,224,15,19,144,118,139,126,216,23,27,
+ 144,11,216,15,19,143,127,137,127,152,117,215,15,37,209,15,
+ 37,216,23,27,151,125,145,125,160,86,215,23,44,209,23,44,
+ 216,27,28,152,81,153,52,144,75,216,23,27,152,65,152,98,
+ 144,122,144,4,240,4,6,9,24,216,15,22,137,127,220,23,
+ 25,151,123,146,123,164,50,167,58,161,58,172,98,175,107,170,
+ 107,184,36,211,46,63,209,35,64,211,23,65,208,16,65,224,
+ 23,30,152,116,145,125,208,16,36,248,220,15,23,243,0,1,
+ 9,24,216,19,20,144,81,145,52,138,75,240,3,1,9,24,
+ 250,115,24,0,0,0,194,8,61,67,11,0,195,6,4,67,
+ 11,0,195,11,15,67,29,3,195,28,1,67,29,3,41,14,
+ 114,69,0,0,0,114,70,0,0,0,114,56,0,0,0,114,
+ 57,0,0,0,218,8,95,118,97,114,115,117,98,98,218,2,
+ 114,101,218,7,99,111,109,112,105,108,101,218,11,95,118,97,
+ 114,112,97,116,116,101,114,110,114,78,0,0,0,218,5,65,
+ 83,67,73,73,218,3,115,117,98,218,7,103,101,116,97,116,
+ 116,114,218,7,95,118,97,114,115,117,98,114,192,0,0,0,
+ 41,9,114,59,0,0,0,114,221,0,0,0,114,225,0,0,
+ 0,114,218,0,0,0,114,214,0,0,0,114,215,0,0,0,
+ 114,192,0,0,0,114,216,0,0,0,114,217,0,0,0,115,
+ 9,0,0,0,32,32,32,32,64,64,64,64,64,114,60,0,
+ 0,0,114,32,0,0,0,114,32,0,0,0,153,1,0,0,
+ 115,241,0,0,0,252,128,0,244,8,0,12,14,143,57,138,
+ 57,144,84,139,63,128,68,228,7,17,144,36,156,5,215,7,
+ 30,209,7,30,216,11,15,144,116,211,11,27,160,4,168,68,
+ 211,32,48,216,19,23,136,75,223,15,23,138,120,219,12,21,
+ 216,23,25,151,122,145,122,164,43,215,34,52,209,34,52,211,
+ 34,54,184,2,191,8,185,8,211,23,65,215,23,69,209,23,
+ 69,136,72,220,14,22,136,3,216,18,22,136,7,216,16,20,
+ 136,5,216,17,21,136,6,216,17,21,136,6,220,18,25,156,
+ 34,152,106,168,36,211,18,47,137,7,224,11,14,144,100,139,
+ 63,152,115,168,36,155,127,216,19,23,136,75,223,15,22,138,
+ 119,219,12,21,216,22,24,151,106,145,106,164,27,168,98,175,
+ 104,169,104,211,22,55,215,22,59,209,22,59,136,71,220,14,
+ 21,136,3,216,18,21,136,7,216,16,19,136,5,216,17,20,
+ 136,6,216,17,20,136,6,220,18,20,151,42,145,42,136,7,
+ 247,4,25,5,24,241,0,25,5,24,241,54,0,12,15,136,
+ 116,139,63,208,4,26,114,62,0,0,0,41,1,218,14,95,
+ 112,97,116,104,95,110,111,114,109,112,97,116,104,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,
+ 0,0,243,58,2,0,0,149,0,91,0,0,0,0,0,0,
+ 0,0,0,82,2,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,34,0,85,0,53,1,0,0,0,
- 0,0,0,110,0,91,13,0,0,0,0,0,0,0,0,85,
- 0,53,1,0,0,0,0,0,0,40,0,0,0,0,0,0,
- 0,100,157,0,0,91,15,0,0,0,0,0,0,0,0,85,
- 0,91,16,0,0,0,0,0,0,0,0,53,2,0,0,0,
- 0,0,0,40,0,0,0,0,0,0,0,97,19,0,0,83,
- 1,110,1,91,8,0,0,0,0,0,0,0,0,82,18,0,
+ 0,0,0,110,0,91,5,0,0,0,0,0,0,0,0,85,
+ 0,91,6,0,0,0,0,0,0,0,0,53,2,0,0,0,
+ 0,0,0,40,0,0,0,0,0,0,0,97,9,0,0,83,
+ 1,110,1,83,2,110,2,83,3,110,3,83,4,110,4,79,
+ 8,83,5,110,1,83,6,110,2,83,7,110,3,83,8,110,
+ 4,85,0,82,9,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,88,33,53,2,0,0,0,0,0,
+ 0,110,0,91,11,0,0,0,0,0,0,0,0,85,0,53,
+ 1,0,0,0,0,0,0,117,3,0,0,112,86,110,0,88,
+ 86,45,0,0,0,110,7,85,0,82,13,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,85,1,53,
+ 1,0,0,0,0,0,0,110,8,83,9,110,9,85,9,91,
+ 15,0,0,0,0,0,0,0,0,85,8,53,1,0,0,0,
+ 0,0,0,58,18,0,0,97,105,0,0,88,137,5,0,0,
+ 0,40,0,0,0,0,0,0,0,97,8,0,0,88,137,5,
+ 0,0,0,85,3,58,88,0,0,97,3,0,0,88,137,9,
+ 0,79,68,88,137,5,0,0,0,85,4,58,88,0,0,97,
+ 55,0,0,85,9,83,9,58,148,0,0,97,27,0,0,88,
+ 137,83,10,45,10,0,0,5,0,0,0,85,4,58,119,0,
+ 0,97,16,0,0,88,137,83,10,45,10,0,0,85,9,83,
+ 10,45,0,0,0,50,2,9,0,85,9,83,10,45,23,0,
+ 0,110,9,79,27,85,9,83,9,58,88,0,0,97,10,0,
+ 0,85,6,40,0,0,0,0,0,0,0,97,3,0,0,88,
+ 137,9,0,79,11,85,9,83,10,45,13,0,0,110,9,79,
+ 5,85,9,83,10,45,13,0,0,110,9,85,9,91,15,0,
+ 0,0,0,0,0,0,0,85,8,53,1,0,0,0,0,0,
+ 0,58,18,0,0,97,2,0,0,77,105,0,0,85,7,40,
+ 0,0,0,0,0,0,0,100,24,0,0,85,8,40,0,0,
+ 0,0,0,0,0,100,17,0,0,85,8,82,17,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,
+ 3,53,1,0,0,0,0,0,0,32,0,88,113,82,19,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,110,2,79,18,83,2,110,1,91,8,0,0,0,0,0,
- 0,0,0,82,20,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,110,2,91,23,0,0,0,0,0,
- 0,0,0,85,0,53,1,0,0,0,0,0,0,117,3,0,
- 0,112,52,110,0,85,3,40,0,0,0,0,0,0,0,100,
- 7,0,0,85,4,40,0,0,0,0,0,0,0,97,54,0,
- 0,30,0,91,25,0,0,0,0,0,0,0,0,91,1,0,
- 0,0,0,0,0,0,0,88,52,45,0,0,0,53,1,0,
+ 0,85,8,53,1,0,0,0,0,0,0,45,0,0,0,36,
+ 0,41,11,122,48,78,111,114,109,97,108,105,122,101,32,112,
+ 97,116,104,44,32,101,108,105,109,105,110,97,116,105,110,103,
+ 32,100,111,117,98,108,101,32,115,108,97,115,104,101,115,44,
+ 32,101,116,99,46,114,86,0,0,0,114,87,0,0,0,114,
+ 142,0,0,0,243,2,0,0,0,46,46,114,4,0,0,0,
+ 114,6,0,0,0,114,2,0,0,0,114,3,0,0,0,114,
+ 8,0,0,0,114,91,0,0,0,41,10,114,69,0,0,0,
+ 114,70,0,0,0,114,56,0,0,0,114,57,0,0,0,114,
+ 74,0,0,0,114,14,0,0,0,114,15,0,0,0,114,135,
+ 0,0,0,218,6,97,112,112,101,110,100,114,12,0,0,0,
+ 41,10,114,59,0,0,0,114,37,0,0,0,114,40,0,0,
+ 0,114,35,0,0,0,114,36,0,0,0,114,113,0,0,0,
+ 114,114,0,0,0,218,6,112,114,101,102,105,120,218,5,99,
+ 111,109,112,115,114,139,0,0,0,115,10,0,0,0,32,32,
+ 32,32,32,32,32,32,32,32,114,60,0,0,0,114,33,0,
+ 0,0,114,33,0,0,0,221,1,0,0,115,32,1,0,0,
+ 128,0,228,15,17,143,121,138,121,152,20,139,127,136,4,220,
+ 11,21,144,100,156,69,215,11,34,209,11,34,216,18,23,136,
+ 67,216,21,25,136,70,216,21,25,136,70,216,21,26,137,70,
+ 224,18,22,136,67,216,21,24,136,70,216,21,24,136,70,216,
+ 21,25,136,70,216,15,19,143,124,137,124,152,70,211,15,40,
+ 136,4,220,28,37,160,100,155,79,209,8,25,136,5,144,84,
+ 216,17,22,145,28,136,6,216,16,20,151,10,145,10,152,51,
+ 147,15,136,5,216,12,13,136,1,216,14,15,148,35,144,101,
+ 147,42,139,110,216,19,24,151,56,152,117,153,120,168,54,211,
+ 31,49,216,20,25,145,72,216,17,22,145,24,152,86,211,17,
+ 35,216,19,20,144,113,147,53,152,85,160,81,161,51,153,90,
+ 168,54,211,29,49,216,24,29,160,1,153,99,160,33,160,65,
+ 161,35,152,103,152,14,216,20,21,152,17,145,70,145,65,216,
+ 21,22,152,33,147,86,166,4,216,24,29,153,8,224,20,21,
+ 152,17,145,70,145,65,224,16,17,144,81,145,6,144,1,240,
+ 25,0,15,16,148,35,144,101,147,42,141,110,246,28,0,16,
+ 22,158,101,216,12,17,143,76,137,76,152,22,212,12,32,216,
+ 15,21,159,8,153,8,160,21,155,15,209,15,39,208,8,39,
+ 114,62,0,0,0,41,1,218,16,95,103,101,116,102,117,108,
+ 108,112,97,116,104,110,97,109,101,99,1,0,0,0,0,0,
+ 0,0,0,0,0,0,6,0,0,0,3,0,0,0,243,244,
+ 1,0,0,149,0,30,0,91,1,0,0,0,0,0,0,0,
+ 0,91,3,0,0,0,0,0,0,0,0,85,0,53,1,0,
+ 0,0,0,0,0,53,1,0,0,0,0,0,0,36,0,33,
+ 0,91,4,0,0,0,0,0,0,0,0,91,6,0,0,0,
+ 0,0,0,0,0,52,2,7,0,97,3,0,0,32,0,31,
+ 0,79,4,102,0,61,3,31,0,102,1,91,8,0,0,0,
+ 0,0,0,0,0,82,10,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,34,0,85,0,53,1,0,
+ 0,0,0,0,0,110,0,91,13,0,0,0,0,0,0,0,
+ 0,85,0,53,1,0,0,0,0,0,0,40,0,0,0,0,
+ 0,0,0,100,157,0,0,91,15,0,0,0,0,0,0,0,
+ 0,85,0,91,16,0,0,0,0,0,0,0,0,53,2,0,
+ 0,0,0,0,0,40,0,0,0,0,0,0,0,97,19,0,
+ 0,83,1,110,1,91,8,0,0,0,0,0,0,0,0,82,
+ 18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,110,2,79,18,83,2,110,1,91,8,0,0,0,
+ 0,0,0,0,0,82,20,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,110,2,91,23,0,0,0,
+ 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,117,
+ 3,0,0,112,52,110,0,85,3,40,0,0,0,0,0,0,
+ 0,100,7,0,0,85,4,40,0,0,0,0,0,0,0,97,
+ 54,0,0,30,0,91,25,0,0,0,0,0,0,0,0,91,
+ 1,0,0,0,0,0,0,0,0,88,52,45,0,0,0,53,
+ 1,0,0,0,0,0,0,85,0,53,2,0,0,0,0,0,
+ 0,110,0,79,46,33,0,91,4,0,0,0,0,0,0,0,
+ 0,91,6,0,0,0,0,0,0,0,0,52,2,7,0,97,
+ 10,0,0,32,0,88,49,45,0,0,0,85,0,45,0,0,
+ 0,110,0,31,0,79,21,102,0,61,3,31,0,102,1,91,
+ 25,0,0,0,0,0,0,0,0,85,2,34,0,53,0,0,
0,0,0,0,0,85,0,53,2,0,0,0,0,0,0,110,
- 0,79,46,33,0,91,4,0,0,0,0,0,0,0,0,91,
- 6,0,0,0,0,0,0,0,0,52,2,7,0,97,10,0,
- 0,32,0,88,49,45,0,0,0,85,0,45,0,0,0,110,
- 0,31,0,79,21,102,0,61,3,31,0,102,1,91,25,0,
- 0,0,0,0,0,0,0,85,2,34,0,53,0,0,0,0,
- 0,0,0,85,0,53,2,0,0,0,0,0,0,110,0,91,
- 3,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
- 0,0,0,36,0,41,3,250,38,82,101,116,117,114,110,32,
- 116,104,101,32,97,98,115,111,108,117,116,101,32,118,101,114,
- 115,105,111,110,32,111,102,32,97,32,112,97,116,104,46,114,
- 86,0,0,0,114,4,0,0,0,41,13,114,234,0,0,0,
- 114,33,0,0,0,218,7,79,83,69,114,114,111,114,218,10,
- 86,97,108,117,101,69,114,114,111,114,114,69,0,0,0,114,
- 70,0,0,0,114,11,0,0,0,114,56,0,0,0,114,57,
- 0,0,0,218,7,103,101,116,99,119,100,98,218,6,103,101,
- 116,99,119,100,114,14,0,0,0,114,12,0,0,0,41,5,
- 114,59,0,0,0,114,37,0,0,0,114,240,0,0,0,114,
- 113,0,0,0,114,114,0,0,0,115,5,0,0,0,32,32,
- 32,32,32,114,60,0,0,0,114,34,0,0,0,114,34,0,
- 0,0,17,2,0,0,115,212,0,0,0,128,0,240,4,4,
- 9,17,220,19,35,164,72,168,84,163,78,211,19,51,208,12,
- 51,248,220,16,23,156,26,208,15,36,243,0,2,9,17,225,
- 12,16,240,5,2,9,17,250,244,6,0,16,18,143,121,138,
- 121,152,20,139,127,136,4,220,15,20,144,84,143,123,137,123,
- 220,15,25,152,36,164,5,215,15,38,209,15,38,216,22,27,
- 144,3,220,25,27,159,26,153,26,145,6,224,22,26,144,3,
- 220,25,27,159,25,153,25,144,6,220,32,41,168,36,163,15,
- 209,12,29,136,69,152,20,230,15,20,158,4,240,2,4,17,
- 46,220,27,31,212,32,48,176,21,177,28,211,32,62,192,4,
- 211,27,69,145,68,248,220,24,31,164,26,208,23,44,243,0,
- 2,17,46,224,27,32,153,59,168,20,209,27,45,146,68,240,
- 5,2,17,46,250,244,8,0,24,28,153,70,155,72,160,100,
- 211,23,43,144,4,220,15,23,152,4,139,126,208,8,29,115,
- 30,0,0,0,130,19,22,0,150,16,41,3,168,1,41,3,
- 194,41,23,67,1,0,195,1,23,67,27,3,195,26,1,67,
- 27,3,99,1,0,0,0,0,0,0,0,0,0,0,0,4,
- 0,0,0,3,0,0,0,243,250,0,0,0,149,0,91,0,
- 0,0,0,0,0,0,0,0,82,2,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,34,0,85,0,
- 53,1,0,0,0,0,0,0,110,0,91,5,0,0,0,0,
- 0,0,0,0,85,0,53,1,0,0,0,0,0,0,40,0,
- 0,0,0,0,0,0,100,75,0,0,91,7,0,0,0,0,
- 0,0,0,0,85,0,91,8,0,0,0,0,0,0,0,0,
- 53,2,0,0,0,0,0,0,40,0,0,0,0,0,0,0,
- 97,22,0,0,91,0,0,0,0,0,0,0,0,0,82,10,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,34,0,53,0,0,0,0,0,0,0,110,1,79,21,
- 91,0,0,0,0,0,0,0,0,0,82,12,0,0,0,0,
+ 0,91,3,0,0,0,0,0,0,0,0,85,0,53,1,0,
+ 0,0,0,0,0,36,0,41,3,250,38,82,101,116,117,114,
+ 110,32,116,104,101,32,97,98,115,111,108,117,116,101,32,118,
+ 101,114,115,105,111,110,32,111,102,32,97,32,112,97,116,104,
+ 46,114,86,0,0,0,114,4,0,0,0,41,13,114,234,0,
+ 0,0,114,33,0,0,0,218,7,79,83,69,114,114,111,114,
+ 218,10,86,97,108,117,101,69,114,114,111,114,114,69,0,0,
+ 0,114,70,0,0,0,114,11,0,0,0,114,56,0,0,0,
+ 114,57,0,0,0,218,7,103,101,116,99,119,100,98,218,6,
+ 103,101,116,99,119,100,114,14,0,0,0,114,12,0,0,0,
+ 41,5,114,59,0,0,0,114,37,0,0,0,114,240,0,0,
+ 0,114,113,0,0,0,114,114,0,0,0,115,5,0,0,0,
+ 32,32,32,32,32,114,60,0,0,0,114,34,0,0,0,114,
+ 34,0,0,0,19,2,0,0,115,212,0,0,0,128,0,240,
+ 4,4,9,17,220,19,35,164,72,168,84,163,78,211,19,51,
+ 208,12,51,248,220,16,23,156,26,208,15,36,243,0,2,9,
+ 17,225,12,16,240,5,2,9,17,250,244,6,0,16,18,143,
+ 121,138,121,152,20,139,127,136,4,220,15,20,144,84,143,123,
+ 137,123,220,15,25,152,36,164,5,215,15,38,209,15,38,216,
+ 22,27,144,3,220,25,27,159,26,153,26,145,6,224,22,26,
+ 144,3,220,25,27,159,25,153,25,144,6,220,32,41,168,36,
+ 163,15,209,12,29,136,69,152,20,230,15,20,158,4,240,2,
+ 4,17,46,220,27,31,212,32,48,176,21,177,28,211,32,62,
+ 192,4,211,27,69,145,68,248,220,24,31,164,26,208,23,44,
+ 243,0,2,17,46,224,27,32,153,59,168,20,209,27,45,146,
+ 68,240,5,2,17,46,250,244,8,0,24,28,153,70,155,72,
+ 160,100,211,23,43,144,4,220,15,23,152,4,139,126,208,8,
+ 29,115,30,0,0,0,130,19,22,0,150,16,41,3,168,1,
+ 41,3,194,41,23,67,1,0,195,1,23,67,27,3,195,26,
+ 1,67,27,3,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,4,0,0,0,3,0,0,0,243,250,0,0,0,149,0,
+ 91,0,0,0,0,0,0,0,0,0,82,2,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,
- 53,0,0,0,0,0,0,0,110,1,91,15,0,0,0,0,
- 0,0,0,0,88,16,53,2,0,0,0,0,0,0,110,0,
- 91,17,0,0,0,0,0,0,0,0,85,0,53,1,0,0,
- 0,0,0,0,36,0,41,1,114,236,0,0,0,41,9,114,
- 69,0,0,0,114,70,0,0,0,114,11,0,0,0,114,56,
- 0,0,0,114,57,0,0,0,114,239,0,0,0,114,240,0,
- 0,0,114,12,0,0,0,114,33,0,0,0,41,2,114,59,
- 0,0,0,218,3,99,119,100,115,2,0,0,0,32,32,114,
- 60,0,0,0,114,34,0,0,0,114,34,0,0,0,5,2,
- 0,0,115,78,0,0,0,128,0,228,15,17,143,121,138,121,
- 152,20,139,127,136,4,220,15,20,144,84,143,123,137,123,220,
- 15,25,152,36,164,5,215,15,38,209,15,38,220,22,24,151,
- 106,146,106,147,108,145,3,228,22,24,151,105,146,105,147,107,
- 144,3,220,19,23,152,3,147,63,136,68,220,15,23,152,4,
- 139,126,208,8,29,114,62,0,0,0,41,3,218,14,95,102,
- 105,110,100,102,105,114,115,116,102,105,108,101,218,17,95,103,
- 101,116,102,105,110,97,108,112,97,116,104,110,97,109,101,218,
- 8,114,101,97,100,108,105,110,107,99,2,0,0,0,0,0,
- 0,0,0,0,0,0,7,0,0,0,3,0,0,0,243,150,
- 1,0,0,149,0,83,1,110,2,91,1,0,0,0,0,0,
- 0,0,0,53,0,0,0,0,0,0,0,110,3,91,3,0,
- 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
- 0,85,3,59,1,0,0,97,124,0,0,85,3,82,5,0,
+ 85,0,53,1,0,0,0,0,0,0,110,0,91,5,0,0,
+ 0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,
+ 40,0,0,0,0,0,0,0,100,75,0,0,91,7,0,0,
+ 0,0,0,0,0,0,85,0,91,8,0,0,0,0,0,0,
+ 0,0,53,2,0,0,0,0,0,0,40,0,0,0,0,0,
+ 0,0,97,22,0,0,91,0,0,0,0,0,0,0,0,0,
+ 82,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,34,0,53,0,0,0,0,0,0,0,110,1,
+ 79,21,91,0,0,0,0,0,0,0,0,0,82,12,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,91,3,0,0,0,0,0,0,0,0,85,0,53,1,0,
- 0,0,0,0,0,53,1,0,0,0,0,0,0,32,0,30,
- 0,85,0,110,4,91,7,0,0,0,0,0,0,0,0,85,
- 0,53,1,0,0,0,0,0,0,110,0,91,9,0,0,0,
- 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,40,
- 0,0,0,0,0,0,0,100,51,0,0,91,11,0,0,0,
- 0,0,0,0,0,85,4,53,1,0,0,0,0,0,0,40,
- 0,0,0,0,0,0,0,100,5,0,0,85,4,110,0,30,
- 0,85,0,36,0,91,13,0,0,0,0,0,0,0,0,91,
- 15,0,0,0,0,0,0,0,0,91,17,0,0,0,0,0,
- 0,0,0,85,4,53,1,0,0,0,0,0,0,85,0,53,
- 2,0,0,0,0,0,0,53,1,0,0,0,0,0,0,110,
- 0,91,3,0,0,0,0,0,0,0,0,85,0,53,1,0,
- 0,0,0,0,0,85,3,59,1,0,0,97,2,0,0,77,
- 124,0,0,85,0,36,0,33,0,85,1,7,0,97,28,0,
- 0,110,5,85,5,82,18,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,85,2,59,0,0,0,97,
- 6,0,0,31,0,83,0,110,5,65,5,85,0,36,0,101,
- 0,83,0,110,5,65,5,102,1,91,20,0,0,0,0,0,
- 0,0,0,7,0,97,4,0,0,32,0,31,0,85,0,36,
- 0,102,0,61,3,31,0,102,1,41,2,78,41,12,114,91,
- 0,0,0,114,123,0,0,0,114,90,0,0,0,233,5,0,
- 0,0,233,21,0,0,0,114,155,0,0,0,233,50,0,0,
- 0,233,67,0,0,0,233,87,0,0,0,105,38,17,0,0,
- 105,40,17,0,0,105,41,17,0,0,41,11,218,3,115,101,
- 116,114,10,0,0,0,218,3,97,100,100,218,12,95,110,116,
- 95,114,101,97,100,108,105,110,107,114,11,0,0,0,114,24,
- 0,0,0,114,33,0,0,0,114,12,0,0,0,114,18,0,
- 0,0,218,8,119,105,110,101,114,114,111,114,114,238,0,0,
- 0,41,6,114,59,0,0,0,218,13,105,103,110,111,114,101,
- 100,95,101,114,114,111,114,218,16,97,108,108,111,119,101,100,
- 95,119,105,110,101,114,114,111,114,218,4,115,101,101,110,218,
- 8,111,108,100,95,112,97,116,104,218,2,101,120,115,6,0,
- 0,0,32,32,32,32,32,32,114,60,0,0,0,218,14,95,
- 114,101,97,100,108,105,110,107,95,100,101,101,112,114,5,1,
- 0,0,51,2,0,0,115,212,0,0,0,128,0,240,30,0,
- 28,76,1,208,8,24,228,15,18,139,117,136,4,220,14,22,
- 144,116,139,110,160,68,211,14,40,216,12,16,143,72,137,72,
- 148,88,152,100,147,94,212,12,36,240,2,19,13,22,216,27,
- 31,144,8,220,23,35,160,68,211,23,41,144,4,244,6,0,
- 24,29,152,84,151,123,145,123,244,8,0,28,34,160,40,215,
- 27,43,209,27,43,216,31,39,152,4,216,24,29,240,18,0,
- 16,20,136,11,244,17,0,28,36,164,68,172,23,176,24,211,
- 41,58,184,68,211,36,65,211,27,66,144,68,244,29,0,15,
- 23,144,116,139,110,160,68,213,14,40,240,44,0,16,20,136,
- 11,248,240,15,0,20,33,243,0,3,13,22,216,19,21,151,
- 59,145,59,208,34,50,211,19,50,219,20,25,240,10,0,16,
- 20,136,11,240,9,0,17,22,251,220,19,29,243,0,2,13,
- 22,224,16,21,216,15,19,136,11,240,7,2,13,22,250,115,
- 41,0,0,0,183,47,66,26,0,193,41,30,66,26,0,194,
- 26,6,67,8,3,194,32,16,66,55,3,194,54,1,66,55,
- 3,194,55,13,67,8,3,195,7,1,67,8,3,99,2,0,
- 0,0,0,0,0,0,0,0,0,0,6,0,0,0,3,0,
- 0,0,243,34,2,0,0,149,0,83,1,110,2,85,0,83,
- 0,83,2,4,0,110,3,85,0,40,0,0,0,0,0,0,
- 0,97,32,0,0,30,0,91,1,0,0,0,0,0,0,0,
- 0,85,0,53,1,0,0,0,0,0,0,110,0,85,3,40,
- 0,0,0,0,0,0,0,97,11,0,0,91,3,0,0,0,
- 0,0,0,0,0,88,3,53,2,0,0,0,0,0,0,36,
- 0,85,0,36,0,85,3,36,0,33,0,85,1,7,0,97,
- 204,0,0,110,4,85,4,82,4,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,85,2,59,1,0,
- 0,97,1,0,0,101,0,30,0,91,7,0,0,0,0,0,
- 0,0,0,85,0,85,1,83,3,57,2,110,5,88,80,58,
- 119,0,0,97,25,0,0,85,3,40,0,0,0,0,0,0,
- 0,97,11,0,0,91,3,0,0,0,0,0,0,0,0,88,
- 83,53,2,0,0,0,0,0,0,79,1,85,5,115,2,31,
- 0,83,0,110,4,65,4,36,0,79,12,33,0,85,1,7,
- 0,97,3,0,0,32,0,31,0,79,4,102,0,61,3,31,
- 0,102,1,85,4,82,4,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,83,4,59,0,0,0,97,
- 51,0,0,30,0,91,9,0,0,0,0,0,0,0,0,85,
- 0,53,1,0,0,0,0,0,0,110,6,91,11,0,0,0,
- 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,117,
- 2,0,0,112,7,79,38,33,0,85,1,7,0,97,16,0,
- 0,32,0,91,11,0,0,0,0,0,0,0,0,85,0,53,
- 1,0,0,0,0,0,0,117,2,0,0,112,6,31,0,79,
- 17,102,0,61,3,31,0,102,1,91,11,0,0,0,0,0,
- 0,0,0,85,0,53,1,0,0,0,0,0,0,117,2,0,
- 0,112,6,85,0,40,0,0,0,0,0,0,0,97,16,0,
- 0,85,6,40,0,0,0,0,0,0,0,100,9,0,0,88,
- 3,45,0,0,0,115,2,31,0,83,0,110,4,65,4,36,
- 0,85,3,40,0,0,0,0,0,0,0,97,11,0,0,91,
- 3,0,0,0,0,0,0,0,0,88,99,53,2,0,0,0,
- 0,0,0,79,1,85,6,110,3,31,0,83,0,110,4,65,
- 4,79,8,83,0,110,4,65,4,102,1,102,0,61,3,31,
- 0,102,1,85,0,40,0,0,0,0,0,0,0,97,3,0,
- 0,71,1,77,1,0,0,78,226,41,5,78,41,16,114,91,
- 0,0,0,114,123,0,0,0,114,90,0,0,0,114,247,0,
- 0,0,114,248,0,0,0,114,155,0,0,0,114,249,0,0,
- 0,233,53,0,0,0,233,65,0,0,0,114,250,0,0,0,
- 114,251,0,0,0,233,123,0,0,0,233,161,0,0,0,105,
- 237,3,0,0,233,128,7,0,0,233,129,7,0,0,114,8,
- 0,0,0,169,1,114,0,1,0,0,41,7,114,91,0,0,
- 0,114,247,0,0,0,114,155,0,0,0,114,249,0,0,0,
- 114,251,0,0,0,114,11,1,0,0,114,12,1,0,0,41,
- 6,114,244,0,0,0,114,12,0,0,0,114,255,0,0,0,
- 114,5,1,0,0,114,243,0,0,0,114,15,0,0,0,41,
- 8,114,59,0,0,0,114,0,1,0,0,114,1,1,0,0,
- 114,115,0,0,0,114,4,1,0,0,218,8,110,101,119,95,
- 112,97,116,104,114,174,0,0,0,218,1,95,115,8,0,0,
- 0,32,32,32,32,32,32,32,32,114,60,0,0,0,218,27,
+ 34,0,53,0,0,0,0,0,0,0,110,1,91,15,0,0,
+ 0,0,0,0,0,0,88,16,53,2,0,0,0,0,0,0,
+ 110,0,91,17,0,0,0,0,0,0,0,0,85,0,53,1,
+ 0,0,0,0,0,0,36,0,41,1,114,236,0,0,0,41,
+ 9,114,69,0,0,0,114,70,0,0,0,114,11,0,0,0,
+ 114,56,0,0,0,114,57,0,0,0,114,239,0,0,0,114,
+ 240,0,0,0,114,12,0,0,0,114,33,0,0,0,41,2,
+ 114,59,0,0,0,218,3,99,119,100,115,2,0,0,0,32,
+ 32,114,60,0,0,0,114,34,0,0,0,114,34,0,0,0,
+ 7,2,0,0,115,78,0,0,0,128,0,228,15,17,143,121,
+ 138,121,152,20,139,127,136,4,220,15,20,144,84,143,123,137,
+ 123,220,15,25,152,36,164,5,215,15,38,209,15,38,220,22,
+ 24,151,106,146,106,147,108,145,3,228,22,24,151,105,146,105,
+ 147,107,144,3,220,19,23,152,3,147,63,136,68,220,15,23,
+ 152,4,139,126,208,8,29,114,62,0,0,0,41,3,218,14,
+ 95,102,105,110,100,102,105,114,115,116,102,105,108,101,218,17,
95,103,101,116,102,105,110,97,108,112,97,116,104,110,97,109,
- 101,95,110,111,110,115,116,114,105,99,116,114,16,1,0,0,
- 93,2,0,0,115,30,1,0,0,128,0,240,38,0,28,94,
- 1,208,8,24,240,8,0,16,20,144,66,144,81,136,120,136,
- 4,222,14,18,240,2,28,13,58,220,23,40,168,20,211,23,
- 46,144,4,222,43,47,148,116,152,68,211,23,39,208,16,57,
- 176,84,208,16,57,240,54,0,16,20,136,11,248,240,53,0,
- 20,33,243,0,25,13,58,216,19,21,151,59,145,59,208,38,
- 54,211,19,54,216,20,25,240,2,10,17,25,244,8,0,32,
- 46,168,100,216,60,73,241,3,1,32,75,1,144,72,224,23,
- 31,211,23,39,222,55,59,156,116,160,72,212,31,51,192,24,
- 213,24,73,240,3,0,24,40,248,224,23,36,243,0,2,17,
- 25,225,20,24,240,5,2,17,25,250,240,8,0,20,22,151,
- 59,145,59,208,34,64,211,19,64,240,2,4,21,49,220,31,
- 45,168,100,211,31,51,152,4,220,34,39,168,4,163,43,153,
- 7,152,4,152,97,248,216,27,40,243,0,1,21,49,220,37,
- 42,168,52,163,91,153,10,152,4,153,100,240,3,1,21,49,
- 250,244,6,0,34,39,160,116,163,27,145,74,144,68,222,19,
- 23,166,4,216,27,31,153,59,213,20,38,222,43,47,148,116,
- 152,68,212,23,39,176,84,149,4,251,240,51,25,13,58,250,
- 247,9,0,15,19,138,100,115,114,0,0,0,144,28,49,0,
- 173,1,49,0,177,6,68,3,3,183,17,67,62,3,193,9,
- 34,65,50,2,193,43,1,68,3,3,193,49,1,67,62,3,
- 193,50,6,65,59,5,193,56,2,67,62,3,193,58,1,65,
- 59,5,193,59,19,67,62,3,194,15,24,66,40,2,194,39,
- 1,67,62,3,194,40,19,66,62,5,194,59,2,67,62,3,
- 194,61,1,66,62,5,194,62,33,67,62,3,195,31,1,68,
- 3,3,195,37,20,67,62,3,195,62,5,68,3,3,70,41,
- 1,218,6,115,116,114,105,99,116,99,1,0,0,0,0,0,
- 0,0,1,0,0,0,6,0,0,0,3,0,0,0,243,204,
- 3,0,0,149,0,91,1,0,0,0,0,0,0,0,0,85,
- 0,53,1,0,0,0,0,0,0,110,0,91,3,0,0,0,
- 0,0,0,0,0,85,0,91,4,0,0,0,0,0,0,0,
- 0,53,2,0,0,0,0,0,0,40,0,0,0,0,0,0,
- 0,97,46,0,0,83,1,110,2,83,2,110,3,83,3,110,
- 4,91,6,0,0,0,0,0,0,0,0,82,8,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,
- 0,53,0,0,0,0,0,0,0,110,5,83,4,110,6,91,
- 11,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
- 0,0,0,85,6,58,88,0,0,97,1,0,0,103,5,79,
- 45,83,6,110,2,83,7,110,3,83,8,110,4,91,6,0,
- 0,0,0,0,0,0,0,82,12,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,34,0,53,0,0,
- 0,0,0,0,0,110,5,83,9,110,6,91,11,0,0,0,
- 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,85,
- 6,58,88,0,0,97,1,0,0,103,10,85,0,82,15,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,85,2,53,1,0,0,0,0,0,0,110,7,85,1,91,
- 16,0,0,0,0,0,0,0,0,76,0,97,9,0,0,91,
- 18,0,0,0,0,0,0,0,0,110,8,83,11,110,1,79,
- 16,85,1,40,0,0,0,0,0,0,0,97,3,0,0,83,
- 12,110,8,79,6,91,20,0,0,0,0,0,0,0,0,110,
- 8,85,7,40,0,0,0,0,0,0,0,100,27,0,0,91,
- 23,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
- 0,0,0,40,0,0,0,0,0,0,0,100,11,0,0,91,
- 25,0,0,0,0,0,0,0,0,88,80,53,2,0,0,0,
- 0,0,0,110,0,30,0,91,27,0,0,0,0,0,0,0,
- 0,85,0,53,1,0,0,0,0,0,0,110,0,83,13,110,
- 9,85,7,40,0,0,0,0,0,0,0,100,95,0,0,85,
- 0,82,15,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,85,2,53,1,0,0,0,0,0,0,40,
- 0,0,0,0,0,0,0,97,73,0,0,85,0,82,15,0,
+ 101,218,8,114,101,97,100,108,105,110,107,99,2,0,0,0,
+ 0,0,0,0,0,0,0,0,7,0,0,0,3,0,0,0,
+ 243,150,1,0,0,149,0,83,1,110,2,91,1,0,0,0,
+ 0,0,0,0,0,53,0,0,0,0,0,0,0,110,3,91,
+ 3,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
+ 0,0,0,85,3,59,1,0,0,97,124,0,0,85,3,82,
+ 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,91,3,0,0,0,0,0,0,0,0,85,0,53,
+ 1,0,0,0,0,0,0,53,1,0,0,0,0,0,0,32,
+ 0,30,0,85,0,110,4,91,7,0,0,0,0,0,0,0,
+ 0,85,0,53,1,0,0,0,0,0,0,110,0,91,9,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,40,0,0,0,0,0,0,0,100,51,0,0,91,11,0,
+ 0,0,0,0,0,0,0,85,4,53,1,0,0,0,0,0,
+ 0,40,0,0,0,0,0,0,0,100,5,0,0,85,4,110,
+ 0,30,0,85,0,36,0,91,13,0,0,0,0,0,0,0,
+ 0,91,15,0,0,0,0,0,0,0,0,91,17,0,0,0,
+ 0,0,0,0,0,85,4,53,1,0,0,0,0,0,0,85,
+ 0,53,2,0,0,0,0,0,0,53,1,0,0,0,0,0,
+ 0,110,0,91,3,0,0,0,0,0,0,0,0,85,0,53,
+ 1,0,0,0,0,0,0,85,3,59,1,0,0,97,2,0,
+ 0,77,124,0,0,85,0,36,0,33,0,85,1,7,0,97,
+ 28,0,0,110,5,85,5,82,18,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,85,2,59,0,0,
+ 0,97,6,0,0,31,0,83,0,110,5,65,5,85,0,36,
+ 0,101,0,83,0,110,5,65,5,102,1,91,20,0,0,0,
+ 0,0,0,0,0,7,0,97,4,0,0,32,0,31,0,85,
+ 0,36,0,102,0,61,3,31,0,102,1,41,2,78,41,12,
+ 114,91,0,0,0,114,123,0,0,0,114,90,0,0,0,233,
+ 5,0,0,0,233,21,0,0,0,114,155,0,0,0,233,50,
+ 0,0,0,233,67,0,0,0,233,87,0,0,0,105,38,17,
+ 0,0,105,40,17,0,0,105,41,17,0,0,41,11,218,3,
+ 115,101,116,114,10,0,0,0,218,3,97,100,100,218,12,95,
+ 110,116,95,114,101,97,100,108,105,110,107,114,11,0,0,0,
+ 114,24,0,0,0,114,33,0,0,0,114,12,0,0,0,114,
+ 18,0,0,0,218,8,119,105,110,101,114,114,111,114,114,238,
+ 0,0,0,41,6,114,59,0,0,0,218,13,105,103,110,111,
+ 114,101,100,95,101,114,114,111,114,218,16,97,108,108,111,119,
+ 101,100,95,119,105,110,101,114,114,111,114,218,4,115,101,101,
+ 110,218,8,111,108,100,95,112,97,116,104,218,2,101,120,115,
+ 6,0,0,0,32,32,32,32,32,32,114,60,0,0,0,218,
+ 14,95,114,101,97,100,108,105,110,107,95,100,101,101,112,114,
+ 5,1,0,0,53,2,0,0,115,212,0,0,0,128,0,240,
+ 30,0,28,76,1,208,8,24,228,15,18,139,117,136,4,220,
+ 14,22,144,116,139,110,160,68,211,14,40,216,12,16,143,72,
+ 137,72,148,88,152,100,147,94,212,12,36,240,2,19,13,22,
+ 216,27,31,144,8,220,23,35,160,68,211,23,41,144,4,244,
+ 6,0,24,29,152,84,151,123,145,123,244,8,0,28,34,160,
+ 40,215,27,43,209,27,43,216,31,39,152,4,216,24,29,240,
+ 18,0,16,20,136,11,244,17,0,28,36,164,68,172,23,176,
+ 24,211,41,58,184,68,211,36,65,211,27,66,144,68,244,29,
+ 0,15,23,144,116,139,110,160,68,213,14,40,240,44,0,16,
+ 20,136,11,248,240,15,0,20,33,243,0,3,13,22,216,19,
+ 21,151,59,145,59,208,34,50,211,19,50,219,20,25,240,10,
+ 0,16,20,136,11,240,9,0,17,22,251,220,19,29,243,0,
+ 2,13,22,224,16,21,216,15,19,136,11,240,7,2,13,22,
+ 250,115,41,0,0,0,183,47,66,26,0,193,41,30,66,26,
+ 0,194,26,6,67,8,3,194,32,16,66,55,3,194,54,1,
+ 66,55,3,194,55,13,67,8,3,195,7,1,67,8,3,99,
+ 2,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,
+ 3,0,0,0,243,34,2,0,0,149,0,83,1,110,2,85,
+ 0,83,0,83,2,4,0,110,3,85,0,40,0,0,0,0,
+ 0,0,0,97,32,0,0,30,0,91,1,0,0,0,0,0,
+ 0,0,0,85,0,53,1,0,0,0,0,0,0,110,0,85,
+ 3,40,0,0,0,0,0,0,0,97,11,0,0,91,3,0,
+ 0,0,0,0,0,0,0,88,3,53,2,0,0,0,0,0,
+ 0,36,0,85,0,36,0,85,3,36,0,33,0,85,1,7,
+ 0,97,204,0,0,110,4,85,4,82,4,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,85,2,59,
+ 1,0,0,97,1,0,0,101,0,30,0,91,7,0,0,0,
+ 0,0,0,0,0,85,0,85,1,83,3,57,2,110,5,88,
+ 80,58,119,0,0,97,25,0,0,85,3,40,0,0,0,0,
+ 0,0,0,97,11,0,0,91,3,0,0,0,0,0,0,0,
+ 0,88,83,53,2,0,0,0,0,0,0,79,1,85,5,115,
+ 2,31,0,83,0,110,4,65,4,36,0,79,12,33,0,85,
+ 1,7,0,97,3,0,0,32,0,31,0,79,4,102,0,61,
+ 3,31,0,102,1,85,4,82,4,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,83,4,59,0,0,
+ 0,97,51,0,0,30,0,91,9,0,0,0,0,0,0,0,
+ 0,85,0,53,1,0,0,0,0,0,0,110,6,91,11,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,117,2,0,0,112,7,79,38,33,0,85,1,7,0,97,
+ 16,0,0,32,0,91,11,0,0,0,0,0,0,0,0,85,
+ 0,53,1,0,0,0,0,0,0,117,2,0,0,112,6,31,
+ 0,79,17,102,0,61,3,31,0,102,1,91,11,0,0,0,
+ 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,117,
+ 2,0,0,112,6,85,0,40,0,0,0,0,0,0,0,97,
+ 16,0,0,85,6,40,0,0,0,0,0,0,0,100,9,0,
+ 0,88,3,45,0,0,0,115,2,31,0,83,0,110,4,65,
+ 4,36,0,85,3,40,0,0,0,0,0,0,0,97,11,0,
+ 0,91,3,0,0,0,0,0,0,0,0,88,99,53,2,0,
+ 0,0,0,0,0,79,1,85,6,110,3,31,0,83,0,110,
+ 4,65,4,79,8,83,0,110,4,65,4,102,1,102,0,61,
+ 3,31,0,102,1,85,0,40,0,0,0,0,0,0,0,97,
+ 3,0,0,71,1,77,1,0,0,78,226,41,5,78,41,16,
+ 114,91,0,0,0,114,123,0,0,0,114,90,0,0,0,114,
+ 247,0,0,0,114,248,0,0,0,114,155,0,0,0,114,249,
+ 0,0,0,233,53,0,0,0,233,65,0,0,0,114,250,0,
+ 0,0,114,251,0,0,0,233,123,0,0,0,233,161,0,0,
+ 0,105,237,3,0,0,233,128,7,0,0,233,129,7,0,0,
+ 114,8,0,0,0,169,1,114,0,1,0,0,41,7,114,91,
+ 0,0,0,114,247,0,0,0,114,155,0,0,0,114,249,0,
+ 0,0,114,251,0,0,0,114,11,1,0,0,114,12,1,0,
+ 0,41,6,114,244,0,0,0,114,12,0,0,0,114,255,0,
+ 0,0,114,5,1,0,0,114,243,0,0,0,114,15,0,0,
+ 0,41,8,114,59,0,0,0,114,0,1,0,0,114,1,1,
+ 0,0,114,115,0,0,0,114,4,1,0,0,218,8,110,101,
+ 119,95,112,97,116,104,114,174,0,0,0,218,1,95,115,8,
+ 0,0,0,32,32,32,32,32,32,32,32,114,60,0,0,0,
+ 218,27,95,103,101,116,102,105,110,97,108,112,97,116,104,110,
+ 97,109,101,95,110,111,110,115,116,114,105,99,116,114,16,1,
+ 0,0,95,2,0,0,115,30,1,0,0,128,0,240,38,0,
+ 28,94,1,208,8,24,240,8,0,16,20,144,66,144,81,136,
+ 120,136,4,222,14,18,240,2,28,13,58,220,23,40,168,20,
+ 211,23,46,144,4,222,43,47,148,116,152,68,211,23,39,208,
+ 16,57,176,84,208,16,57,240,54,0,16,20,136,11,248,240,
+ 53,0,20,33,243,0,25,13,58,216,19,21,151,59,145,59,
+ 208,38,54,211,19,54,216,20,25,240,2,10,17,25,244,8,
+ 0,32,46,168,100,216,60,73,241,3,1,32,75,1,144,72,
+ 224,23,31,211,23,39,222,55,59,156,116,160,72,212,31,51,
+ 192,24,213,24,73,240,3,0,24,40,248,224,23,36,243,0,
+ 2,17,25,225,20,24,240,5,2,17,25,250,240,8,0,20,
+ 22,151,59,145,59,208,34,64,211,19,64,240,2,4,21,49,
+ 220,31,45,168,100,211,31,51,152,4,220,34,39,168,4,163,
+ 43,153,7,152,4,152,97,248,216,27,40,243,0,1,21,49,
+ 220,37,42,168,52,163,91,153,10,152,4,153,100,240,3,1,
+ 21,49,250,244,6,0,34,39,160,116,163,27,145,74,144,68,
+ 222,19,23,166,4,216,27,31,153,59,213,20,38,222,43,47,
+ 148,116,152,68,212,23,39,176,84,149,4,251,240,51,25,13,
+ 58,250,247,9,0,15,19,138,100,115,114,0,0,0,144,28,
+ 49,0,173,1,49,0,177,6,68,3,3,183,17,67,62,3,
+ 193,9,34,65,50,2,193,43,1,68,3,3,193,49,1,67,
+ 62,3,193,50,6,65,59,5,193,56,2,67,62,3,193,58,
+ 1,65,59,5,193,59,19,67,62,3,194,15,24,66,40,2,
+ 194,39,1,67,62,3,194,40,19,66,62,5,194,59,2,67,
+ 62,3,194,61,1,66,62,5,194,62,33,67,62,3,195,31,
+ 1,68,3,3,195,37,20,67,62,3,195,62,5,68,3,3,
+ 70,41,1,218,6,115,116,114,105,99,116,99,1,0,0,0,
+ 0,0,0,0,1,0,0,0,6,0,0,0,3,0,0,0,
+ 243,204,3,0,0,149,0,91,1,0,0,0,0,0,0,0,
+ 0,85,0,53,1,0,0,0,0,0,0,110,0,91,3,0,
+ 0,0,0,0,0,0,0,85,0,91,4,0,0,0,0,0,
+ 0,0,0,53,2,0,0,0,0,0,0,40,0,0,0,0,
+ 0,0,0,97,46,0,0,83,1,110,2,83,2,110,3,83,
+ 3,110,4,91,6,0,0,0,0,0,0,0,0,82,8,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,85,3,53,1,0,0,0,0,0,0,40,0,0,0,0,
- 0,0,0,97,17,0,0,88,64,91,37,0,0,0,0,0,
- 0,0,0,85,3,53,1,0,0,0,0,0,0,83,0,4,
- 0,45,0,0,0,110,11,79,14,85,0,91,37,0,0,0,
- 0,0,0,0,0,85,2,53,1,0,0,0,0,0,0,83,
- 0,4,0,110,11,30,0,91,27,0,0,0,0,0,0,0,
- 0,85,11,53,1,0,0,0,0,0,0,85,0,58,88,0,
- 0,97,2,0,0,85,11,110,0,85,0,36,0,85,0,36,
- 0,33,0,91,28,0,0,0,0,0,0,0,0,7,0,97,
- 49,0,0,110,10,85,1,40,0,0,0,0,0,0,0,97,
- 21,0,0,91,21,0,0,0,0,0,0,0,0,91,31,0,
- 0,0,0,0,0,0,0,85,10,53,1,0,0,0,0,0,
- 0,53,1,0,0,0,0,0,0,83,0,101,2,91,1,0,
+ 0,34,0,53,0,0,0,0,0,0,0,110,5,83,4,110,
+ 6,91,11,0,0,0,0,0,0,0,0,85,0,53,1,0,
+ 0,0,0,0,0,85,6,58,88,0,0,97,1,0,0,103,
+ 5,79,45,83,6,110,2,83,7,110,3,83,8,110,4,91,
+ 6,0,0,0,0,0,0,0,0,82,12,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,53,
+ 0,0,0,0,0,0,0,110,5,83,9,110,6,91,11,0,
0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
- 0,110,0,31,0,83,0,110,10,65,10,78,158,83,0,110,
- 10,65,10,102,1,85,8,7,0,97,32,0,0,110,10,85,
- 10,82,32,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,110,9,91,35,0,0,0,0,0,0,0,
- 0,85,0,85,8,83,14,57,2,110,0,31,0,83,0,110,
- 10,65,10,78,194,83,0,110,10,65,10,102,1,102,0,61,
- 3,31,0,102,1,33,0,91,28,0,0,0,0,0,0,0,
- 0,7,0,97,11,0,0,110,10,31,0,83,0,110,10,65,
- 10,85,0,36,0,83,0,110,10,65,10,102,1,91,20,0,
- 0,0,0,0,0,0,0,7,0,97,29,0,0,110,10,85,
- 10,82,32,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,87,9,58,88,0,0,97,2,0,0,85,
- 11,110,0,31,0,83,0,110,10,65,10,85,0,36,0,83,
- 0,110,10,65,10,102,1,102,0,61,3,31,0,102,1,41,
- 15,78,115,4,0,0,0,92,92,63,92,114,119,0,0,0,
- 114,88,0,0,0,115,3,0,0,0,110,117,108,115,7,0,
- 0,0,92,92,46,92,78,85,76,122,4,92,92,63,92,114,
- 121,0,0,0,114,89,0,0,0,114,7,0,0,0,122,7,
- 92,92,46,92,78,85,76,84,169,0,114,8,0,0,0,114,
- 13,1,0,0,41,19,114,33,0,0,0,114,56,0,0,0,
- 114,57,0,0,0,114,69,0,0,0,114,239,0,0,0,114,
- 10,0,0,0,114,240,0,0,0,114,92,0,0,0,114,52,
- 0,0,0,218,17,70,105,108,101,78,111,116,70,111,117,110,
- 100,69,114,114,111,114,114,237,0,0,0,114,11,0,0,0,
- 114,12,0,0,0,114,244,0,0,0,114,238,0,0,0,218,
- 3,115,116,114,114,255,0,0,0,114,16,1,0,0,114,135,
- 0,0,0,41,12,114,59,0,0,0,114,17,1,0,0,114,
- 232,0,0,0,114,128,0,0,0,218,14,110,101,119,95,117,
- 110,99,95,112,114,101,102,105,120,114,242,0,0,0,114,42,
- 0,0,0,218,10,104,97,100,95,112,114,101,102,105,120,114,
- 0,1,0,0,218,16,105,110,105,116,105,97,108,95,119,105,
- 110,101,114,114,111,114,114,4,1,0,0,218,5,115,112,97,
- 116,104,115,12,0,0,0,32,32,32,32,32,32,32,32,32,
- 32,32,32,114,60,0,0,0,114,43,0,0,0,114,43,0,
- 0,0,149,2,0,0,115,213,1,0,0,128,0,220,15,23,
- 152,4,139,126,136,4,220,11,21,144,100,156,69,215,11,34,
- 209,11,34,216,21,31,136,70,216,25,40,136,74,216,29,36,
- 136,78,220,18,20,151,42,146,42,147,44,136,67,224,22,28,
- 136,71,220,15,23,152,4,139,126,160,23,211,15,40,216,23,
- 36,240,3,0,16,41,240,6,0,22,31,136,70,216,25,39,
- 136,74,216,29,35,136,78,220,18,20,151,41,146,41,147,43,
- 136,67,224,22,27,136,71,220,15,23,152,4,139,126,160,23,
- 211,15,40,216,23,35,216,21,25,151,95,145,95,160,86,211,
- 21,44,136,10,224,11,17,148,93,210,11,34,220,28,45,136,
- 77,216,21,25,137,70,222,13,19,216,28,30,137,77,228,28,
- 35,136,77,230,15,25,164,37,168,4,167,43,161,43,220,19,
- 23,152,3,147,63,136,68,240,2,14,9,76,1,220,19,36,
- 160,84,211,19,42,136,68,216,31,32,208,12,28,246,32,0,
- 16,26,152,100,159,111,153,111,168,102,215,30,53,209,30,53,
- 240,6,0,16,20,143,127,137,127,152,122,215,15,42,209,15,
- 42,216,24,38,172,99,176,42,171,111,208,46,62,208,41,63,
- 209,24,63,145,5,224,24,28,156,83,160,22,155,91,152,92,
- 208,24,42,144,5,240,4,11,13,33,220,19,36,160,85,211,
- 19,43,168,116,211,19,51,216,27,32,144,68,240,20,0,16,
- 20,136,11,136,116,136,11,248,244,71,1,0,16,26,243,0,
- 7,9,34,246,10,0,16,22,220,22,29,156,99,160,34,155,
- 103,211,22,38,168,68,208,16,48,220,19,27,152,68,147,62,
- 141,68,251,216,15,28,243,0,3,9,76,1,216,31,33,159,
- 123,153,123,208,12,28,220,19,46,168,116,216,61,74,241,3,
- 1,20,76,1,141,68,251,240,5,3,9,76,1,251,244,36,
- 0,20,30,243,0,3,13,21,243,6,0,17,21,240,12,0,
- 16,20,136,11,251,244,11,0,20,27,243,0,4,13,33,240,
- 6,0,20,22,151,59,145,59,208,34,50,211,19,50,216,27,
- 32,144,68,251,216,15,19,136,11,251,240,11,4,13,33,250,
- 115,66,0,0,0,195,18,13,69,7,0,196,50,17,70,41,
- 0,197,7,10,70,38,3,197,17,39,69,61,3,197,61,9,
- 70,38,3,198,6,22,70,33,3,198,33,5,70,38,3,198,
- 41,10,71,35,3,198,57,13,71,35,3,199,6,18,71,30,
- 3,199,30,5,71,35,3,99,1,0,0,0,0,0,0,0,
- 1,0,0,0,3,0,0,0,3,0,0,0,243,24,0,0,
- 0,149,0,91,1,0,0,0,0,0,0,0,0,85,0,53,
- 1,0,0,0,0,0,0,36,0,114,171,0,0,0,41,1,
- 114,34,0,0,0,41,2,114,59,0,0,0,114,17,1,0,
- 0,115,2,0,0,0,32,32,114,60,0,0,0,114,43,0,
- 0,0,114,43,0,0,0,48,2,0,0,115,12,0,0,0,
- 128,0,220,15,22,144,116,139,125,208,8,28,114,62,0,0,
- 0,84,99,2,0,0,0,0,0,0,0,0,0,0,0,7,
- 0,0,0,3,0,0,0,243,54,3,0,0,149,0,91,0,
- 0,0,0,0,0,0,0,0,82,2,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,34,0,85,0,
- 53,1,0,0,0,0,0,0,110,0,85,0,40,0,0,0,
- 0,0,0,0,100,11,0,0,91,5,0,0,0,0,0,0,
- 0,0,83,1,53,1,0,0,0,0,0,0,101,1,91,7,
- 0,0,0,0,0,0,0,0,85,0,91,8,0,0,0,0,
- 0,0,0,0,53,2,0,0,0,0,0,0,40,0,0,0,
- 0,0,0,0,97,7,0,0,83,2,110,2,83,3,110,3,
- 83,4,110,4,79,6,83,5,110,2,83,6,110,3,83,7,
- 110,4,85,1,99,3,0,0,85,3,110,1,79,22,91,0,
- 0,0,0,0,0,0,0,0,82,2,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,34,0,85,1,
- 53,1,0,0,0,0,0,0,110,1,30,0,91,11,0,0,
- 0,0,0,0,0,0,85,1,53,1,0,0,0,0,0,0,
- 110,5,91,11,0,0,0,0,0,0,0,0,85,0,53,1,
- 0,0,0,0,0,0,110,6,91,13,0,0,0,0,0,0,
- 0,0,85,5,53,1,0,0,0,0,0,0,117,3,0,0,
- 112,120,110,9,91,13,0,0,0,0,0,0,0,0,85,6,
- 53,1,0,0,0,0,0,0,117,3,0,0,112,168,110,11,
- 91,15,0,0,0,0,0,0,0,0,85,7,53,1,0,0,
- 0,0,0,0,91,15,0,0,0,0,0,0,0,0,85,10,
- 53,1,0,0,0,0,0,0,58,119,0,0,97,19,0,0,
- 91,5,0,0,0,0,0,0,0,0,83,9,85,10,60,2,
- 14,0,83,10,85,7,60,2,14,0,51,4,53,1,0,0,
- 0,0,0,0,101,1,85,9,40,0,0,0,0,0,0,0,
- 97,17,0,0,85,9,82,17,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,85,2,53,1,0,0,
- 0,0,0,0,79,1,47,0,110,12,85,11,40,0,0,0,
- 0,0,0,0,97,17,0,0,85,11,82,17,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,2,
- 53,1,0,0,0,0,0,0,79,1,47,0,110,13,83,11,
- 110,14,91,19,0,0,0,0,0,0,0,0,88,205,53,2,
- 0,0,0,0,0,0,19,0,72,37,0,0,117,2,0,0,
- 110,15,110,16,91,15,0,0,0,0,0,0,0,0,85,15,
- 53,1,0,0,0,0,0,0,91,15,0,0,0,0,0,0,
- 0,0,85,16,53,1,0,0,0,0,0,0,58,119,0,0,
- 97,2,0,0,32,0,79,9,85,14,83,12,45,13,0,0,
- 110,14,77,39,0,0,11,0,32,0,85,4,47,1,91,21,
- 0,0,0,0,0,0,0,0,85,12,53,1,0,0,0,0,
- 0,0,85,14,45,10,0,0,45,5,0,0,88,222,83,8,
- 4,0,45,0,0,0,110,17,85,17,40,0,0,0,0,0,
- 0,0,100,2,0,0,85,3,36,0,85,2,82,23,0,0,
+ 0,85,6,58,88,0,0,97,1,0,0,103,10,85,0,82,
+ 15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,85,2,53,1,0,0,0,0,0,0,110,7,85,
+ 1,91,16,0,0,0,0,0,0,0,0,76,0,97,9,0,
+ 0,91,18,0,0,0,0,0,0,0,0,110,8,83,11,110,
+ 1,79,16,85,1,40,0,0,0,0,0,0,0,97,3,0,
+ 0,83,12,110,8,79,6,91,20,0,0,0,0,0,0,0,
+ 0,110,8,85,7,40,0,0,0,0,0,0,0,100,27,0,
+ 0,91,23,0,0,0,0,0,0,0,0,85,0,53,1,0,
+ 0,0,0,0,0,40,0,0,0,0,0,0,0,100,11,0,
+ 0,91,25,0,0,0,0,0,0,0,0,88,80,53,2,0,
+ 0,0,0,0,0,110,0,30,0,91,27,0,0,0,0,0,
+ 0,0,0,85,0,53,1,0,0,0,0,0,0,110,0,83,
+ 13,110,9,85,7,40,0,0,0,0,0,0,0,100,95,0,
+ 0,85,0,82,15,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,85,2,53,1,0,0,0,0,0,
+ 0,40,0,0,0,0,0,0,0,97,73,0,0,85,0,82,
+ 15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,85,3,53,1,0,0,0,0,0,0,40,0,0,
+ 0,0,0,0,0,97,17,0,0,88,64,91,37,0,0,0,
+ 0,0,0,0,0,85,3,53,1,0,0,0,0,0,0,83,
+ 0,4,0,45,0,0,0,110,11,79,14,85,0,91,37,0,
+ 0,0,0,0,0,0,0,85,2,53,1,0,0,0,0,0,
+ 0,83,0,4,0,110,11,30,0,91,27,0,0,0,0,0,
+ 0,0,0,85,11,53,1,0,0,0,0,0,0,85,0,58,
+ 88,0,0,97,2,0,0,85,11,110,0,85,0,36,0,85,
+ 0,36,0,33,0,91,28,0,0,0,0,0,0,0,0,7,
+ 0,97,49,0,0,110,10,85,1,40,0,0,0,0,0,0,
+ 0,97,21,0,0,91,21,0,0,0,0,0,0,0,0,91,
+ 31,0,0,0,0,0,0,0,0,85,10,53,1,0,0,0,
+ 0,0,0,53,1,0,0,0,0,0,0,83,0,101,2,91,
+ 1,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
+ 0,0,0,110,0,31,0,83,0,110,10,65,10,78,158,83,
+ 0,110,10,65,10,102,1,85,8,7,0,97,32,0,0,110,
+ 10,85,10,82,32,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,110,9,91,35,0,0,0,0,0,
+ 0,0,0,85,0,85,8,83,14,57,2,110,0,31,0,83,
+ 0,110,10,65,10,78,194,83,0,110,10,65,10,102,1,102,
+ 0,61,3,31,0,102,1,33,0,91,28,0,0,0,0,0,
+ 0,0,0,7,0,97,11,0,0,110,10,31,0,83,0,110,
+ 10,65,10,85,0,36,0,83,0,110,10,65,10,102,1,91,
+ 20,0,0,0,0,0,0,0,0,7,0,97,29,0,0,110,
+ 10,85,10,82,32,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,87,9,58,88,0,0,97,2,0,
+ 0,85,11,110,0,31,0,83,0,110,10,65,10,85,0,36,
+ 0,83,0,110,10,65,10,102,1,102,0,61,3,31,0,102,
+ 1,41,15,78,115,4,0,0,0,92,92,63,92,114,119,0,
+ 0,0,114,88,0,0,0,115,3,0,0,0,110,117,108,115,
+ 7,0,0,0,92,92,46,92,78,85,76,122,4,92,92,63,
+ 92,114,121,0,0,0,114,89,0,0,0,114,7,0,0,0,
+ 122,7,92,92,46,92,78,85,76,84,169,0,114,8,0,0,
+ 0,114,13,1,0,0,41,19,114,33,0,0,0,114,56,0,
+ 0,0,114,57,0,0,0,114,69,0,0,0,114,239,0,0,
+ 0,114,10,0,0,0,114,240,0,0,0,114,92,0,0,0,
+ 114,52,0,0,0,218,17,70,105,108,101,78,111,116,70,111,
+ 117,110,100,69,114,114,111,114,114,237,0,0,0,114,11,0,
+ 0,0,114,12,0,0,0,114,244,0,0,0,114,238,0,0,
+ 0,218,3,115,116,114,114,255,0,0,0,114,16,1,0,0,
+ 114,135,0,0,0,41,12,114,59,0,0,0,114,17,1,0,
+ 0,114,232,0,0,0,114,128,0,0,0,218,14,110,101,119,
+ 95,117,110,99,95,112,114,101,102,105,120,114,242,0,0,0,
+ 114,42,0,0,0,218,10,104,97,100,95,112,114,101,102,105,
+ 120,114,0,1,0,0,218,16,105,110,105,116,105,97,108,95,
+ 119,105,110,101,114,114,111,114,114,4,1,0,0,218,5,115,
+ 112,97,116,104,115,12,0,0,0,32,32,32,32,32,32,32,
+ 32,32,32,32,32,114,60,0,0,0,114,43,0,0,0,114,
+ 43,0,0,0,151,2,0,0,115,213,1,0,0,128,0,220,
+ 15,23,152,4,139,126,136,4,220,11,21,144,100,156,69,215,
+ 11,34,209,11,34,216,21,31,136,70,216,25,40,136,74,216,
+ 29,36,136,78,220,18,20,151,42,146,42,147,44,136,67,224,
+ 22,28,136,71,220,15,23,152,4,139,126,160,23,211,15,40,
+ 216,23,36,240,3,0,16,41,240,6,0,22,31,136,70,216,
+ 25,39,136,74,216,29,35,136,78,220,18,20,151,41,146,41,
+ 147,43,136,67,224,22,27,136,71,220,15,23,152,4,139,126,
+ 160,23,211,15,40,216,23,35,216,21,25,151,95,145,95,160,
+ 86,211,21,44,136,10,224,11,17,148,93,210,11,34,220,28,
+ 45,136,77,216,21,25,137,70,222,13,19,216,28,30,137,77,
+ 228,28,35,136,77,230,15,25,164,37,168,4,167,43,161,43,
+ 220,19,23,152,3,147,63,136,68,240,2,14,9,76,1,220,
+ 19,36,160,84,211,19,42,136,68,216,31,32,208,12,28,246,
+ 32,0,16,26,152,100,159,111,153,111,168,102,215,30,53,209,
+ 30,53,240,6,0,16,20,143,127,137,127,152,122,215,15,42,
+ 209,15,42,216,24,38,172,99,176,42,171,111,208,46,62,208,
+ 41,63,209,24,63,145,5,224,24,28,156,83,160,22,155,91,
+ 152,92,208,24,42,144,5,240,4,11,13,33,220,19,36,160,
+ 85,211,19,43,168,116,211,19,51,216,27,32,144,68,240,20,
+ 0,16,20,136,11,136,116,136,11,248,244,71,1,0,16,26,
+ 243,0,7,9,34,246,10,0,16,22,220,22,29,156,99,160,
+ 34,155,103,211,22,38,168,68,208,16,48,220,19,27,152,68,
+ 147,62,141,68,251,216,15,28,243,0,3,9,76,1,216,31,
+ 33,159,123,153,123,208,12,28,220,19,46,168,116,216,61,74,
+ 241,3,1,20,76,1,141,68,251,240,5,3,9,76,1,251,
+ 244,36,0,20,30,243,0,3,13,21,243,6,0,17,21,240,
+ 12,0,16,20,136,11,251,244,11,0,20,27,243,0,4,13,
+ 33,240,6,0,20,22,151,59,145,59,208,34,50,211,19,50,
+ 216,27,32,144,68,251,216,15,19,136,11,251,240,11,4,13,
+ 33,250,115,66,0,0,0,195,18,13,69,7,0,196,50,17,
+ 70,41,0,197,7,10,70,38,3,197,17,39,69,61,3,197,
+ 61,9,70,38,3,198,6,22,70,33,3,198,33,5,70,38,
+ 3,198,41,10,71,35,3,198,57,13,71,35,3,199,6,18,
+ 71,30,3,199,30,5,71,35,3,99,1,0,0,0,0,0,
+ 0,0,1,0,0,0,3,0,0,0,3,0,0,0,243,24,
+ 0,0,0,149,0,91,1,0,0,0,0,0,0,0,0,85,
+ 0,53,1,0,0,0,0,0,0,36,0,114,171,0,0,0,
+ 41,1,114,34,0,0,0,41,2,114,59,0,0,0,114,17,
+ 1,0,0,115,2,0,0,0,32,32,114,60,0,0,0,114,
+ 43,0,0,0,114,43,0,0,0,50,2,0,0,115,12,0,
+ 0,0,128,0,220,15,22,144,116,139,125,208,8,28,114,62,
+ 0,0,0,84,99,2,0,0,0,0,0,0,0,0,0,0,
+ 0,7,0,0,0,3,0,0,0,243,54,3,0,0,149,0,
+ 91,0,0,0,0,0,0,0,0,0,82,2,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,
+ 85,0,53,1,0,0,0,0,0,0,110,0,85,0,40,0,
+ 0,0,0,0,0,0,100,11,0,0,91,5,0,0,0,0,
+ 0,0,0,0,83,1,53,1,0,0,0,0,0,0,101,1,
+ 91,7,0,0,0,0,0,0,0,0,85,0,91,8,0,0,
+ 0,0,0,0,0,0,53,2,0,0,0,0,0,0,40,0,
+ 0,0,0,0,0,0,97,7,0,0,83,2,110,2,83,3,
+ 110,3,83,4,110,4,79,6,83,5,110,2,83,6,110,3,
+ 83,7,110,4,85,1,99,3,0,0,85,3,110,1,79,22,
+ 91,0,0,0,0,0,0,0,0,0,82,2,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,
+ 85,1,53,1,0,0,0,0,0,0,110,1,30,0,91,11,
+ 0,0,0,0,0,0,0,0,85,1,53,1,0,0,0,0,
+ 0,0,110,5,91,11,0,0,0,0,0,0,0,0,85,0,
+ 53,1,0,0,0,0,0,0,110,6,91,13,0,0,0,0,
+ 0,0,0,0,85,5,53,1,0,0,0,0,0,0,117,3,
+ 0,0,112,120,110,9,91,13,0,0,0,0,0,0,0,0,
+ 85,6,53,1,0,0,0,0,0,0,117,3,0,0,112,168,
+ 110,11,91,15,0,0,0,0,0,0,0,0,85,7,53,1,
+ 0,0,0,0,0,0,91,15,0,0,0,0,0,0,0,0,
+ 85,10,53,1,0,0,0,0,0,0,58,119,0,0,97,19,
+ 0,0,91,5,0,0,0,0,0,0,0,0,83,9,85,10,
+ 60,2,14,0,83,10,85,7,60,2,14,0,51,4,53,1,
+ 0,0,0,0,0,0,101,1,85,9,40,0,0,0,0,0,
+ 0,0,97,17,0,0,85,9,82,17,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,85,2,53,1,
+ 0,0,0,0,0,0,79,1,47,0,110,12,85,11,40,0,
+ 0,0,0,0,0,0,97,17,0,0,85,11,82,17,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 85,17,53,1,0,0,0,0,0,0,36,0,33,0,91,24,
- 0,0,0,0,0,0,0,0,91,4,0,0,0,0,0,0,
- 0,0,91,26,0,0,0,0,0,0,0,0,91,28,0,0,
- 0,0,0,0,0,0,91,30,0,0,0,0,0,0,0,0,
- 52,5,7,0,97,25,0,0,32,0,91,32,0,0,0,0,
- 0,0,0,0,82,34,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,34,0,83,13,88,1,53,3,
- 0,0,0,0,0,0,32,0,101,0,102,0,61,3,31,0,
- 102,1,41,14,122,35,82,101,116,117,114,110,32,97,32,114,
- 101,108,97,116,105,118,101,32,118,101,114,115,105,111,110,32,
- 111,102,32,97,32,112,97,116,104,122,17,110,111,32,112,97,
- 116,104,32,115,112,101,99,105,102,105,101,100,114,86,0,0,
- 0,114,142,0,0,0,114,230,0,0,0,114,4,0,0,0,
- 114,2,0,0,0,114,3,0,0,0,78,122,17,112,97,116,
- 104,32,105,115,32,111,110,32,109,111,117,110,116,32,122,17,
- 44,32,115,116,97,114,116,32,111,110,32,109,111,117,110,116,
- 32,114,8,0,0,0,114,91,0,0,0,114,45,0,0,0,
- 41,18,114,69,0,0,0,114,70,0,0,0,114,238,0,0,
- 0,114,56,0,0,0,114,57,0,0,0,114,34,0,0,0,
- 114,14,0,0,0,114,10,0,0,0,114,15,0,0,0,218,
- 3,122,105,112,114,135,0,0,0,114,12,0,0,0,114,97,
- 0,0,0,114,98,0,0,0,114,99,0,0,0,218,18,68,
- 101,112,114,101,99,97,116,105,111,110,87,97,114,110,105,110,
- 103,114,100,0,0,0,114,101,0,0,0,41,18,114,59,0,
- 0,0,114,131,0,0,0,114,37,0,0,0,114,35,0,0,
- 0,114,36,0,0,0,218,9,115,116,97,114,116,95,97,98,
- 115,218,8,112,97,116,104,95,97,98,115,218,11,115,116,97,
- 114,116,95,100,114,105,118,101,114,15,1,0,0,218,10,115,
- 116,97,114,116,95,114,101,115,116,218,10,112,97,116,104,95,
- 100,114,105,118,101,218,9,112,97,116,104,95,114,101,115,116,
- 218,10,115,116,97,114,116,95,108,105,115,116,218,9,112,97,
- 116,104,95,108,105,115,116,114,139,0,0,0,218,2,101,49,
- 218,2,101,50,218,8,114,101,108,95,108,105,115,116,115,18,
- 0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,
- 32,32,32,32,32,114,60,0,0,0,114,45,0,0,0,114,
- 45,0,0,0,225,2,0,0,115,128,1,0,0,128,0,228,
- 11,13,143,57,138,57,144,84,139,63,128,68,222,11,15,220,
- 14,24,208,25,44,211,14,45,208,8,45,228,7,17,144,36,
- 156,5,215,7,30,209,7,30,216,14,19,136,3,216,17,21,
- 136,6,216,17,22,137,6,224,14,18,136,3,216,17,20,136,
- 6,216,17,21,136,6,224,7,12,129,125,216,16,22,137,5,
- 228,16,18,151,9,146,9,152,37,211,16,32,136,5,240,4,
- 24,5,14,220,20,27,152,69,147,78,136,9,220,19,26,152,
- 52,147,61,136,8,220,37,46,168,121,211,37,57,209,8,34,
- 136,11,152,10,220,35,44,168,88,211,35,54,209,8,32,136,
- 10,144,121,220,11,19,144,75,211,11,32,164,72,168,90,211,
- 36,56,211,11,56,221,18,28,219,16,26,154,75,240,3,1,
- 30,41,243,0,1,19,42,240,0,1,13,42,246,6,0,47,
- 57,144,90,215,21,37,209,21,37,160,99,212,21,42,184,98,
- 136,10,222,44,53,144,73,151,79,145,79,160,67,212,20,40,
- 184,50,136,9,224,12,13,136,1,220,22,25,152,42,214,22,
- 48,137,70,136,66,144,2,220,15,23,152,2,139,124,156,120,
- 168,2,155,124,211,15,43,217,16,21,216,12,13,144,17,137,
- 70,138,65,241,7,0,23,49,240,10,0,21,27,144,56,156,
- 115,160,58,155,127,168,113,209,31,48,209,19,49,176,73,184,
- 98,176,77,209,19,65,136,8,222,15,23,216,19,25,136,77,
- 216,15,18,143,120,137,120,152,8,211,15,33,208,8,33,248,
- 220,12,21,148,122,164,62,180,60,212,65,83,208,11,84,243,
- 0,2,5,14,220,8,19,215,8,36,210,8,36,160,89,176,
- 4,212,8,60,216,8,13,240,5,2,5,14,250,115,19,0,
- 0,0,193,40,67,38,69,32,0,197,15,16,69,32,0,197,
- 32,56,70,24,3,99,1,0,0,0,0,0,0,0,0,0,
- 0,0,10,0,0,0,3,0,0,0,243,210,4,0,0,149,
- 0,91,1,0,0,0,0,0,0,0,0,91,3,0,0,0,
- 0,0,0,0,0,91,4,0,0,0,0,0,0,0,0,82,
- 6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,85,0,53,2,0,0,0,0,0,0,53,1,0,
- 0,0,0,0,0,110,0,85,0,40,0,0,0,0,0,0,
- 0,100,11,0,0,91,9,0,0,0,0,0,0,0,0,83,
- 1,53,1,0,0,0,0,0,0,101,1,91,11,0,0,0,
- 0,0,0,0,0,85,0,83,2,5,0,0,0,91,12,0,
- 0,0,0,0,0,0,0,53,2,0,0,0,0,0,0,40,
- 0,0,0,0,0,0,0,97,7,0,0,83,3,110,1,83,
- 4,110,2,83,5,110,3,79,6,83,6,110,1,83,7,110,
- 2,83,8,110,3,30,0,85,0,19,0,86,4,115,2,47,
- 0,115,2,19,0,72,43,0,0,110,4,91,15,0,0,0,
- 0,0,0,0,0,85,4,82,17,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,88,33,53,2,0,
- 0,0,0,0,0,82,19,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,53,0,0,0,0,0,0,
- 0,53,1,0,0,0,0,0,0,80,2,77,45,0,0,11,
- 0,32,0,110,5,110,4,85,5,19,0,86,6,86,7,86,
- 4,115,4,47,0,115,2,19,0,72,22,0,0,117,3,0,
- 0,112,103,111,68,82,21,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,85,1,53,1,0,0,0,
- 0,0,0,80,2,77,24,0,0,11,0,32,0,110,8,110,
- 7,110,6,110,4,91,23,0,0,0,0,0,0,0,0,85,
- 5,19,0,86,6,86,7,86,4,115,4,49,0,115,2,19,
- 0,72,7,0,0,117,3,0,0,112,103,111,70,105,2,77,
- 9,0,0,11,0,32,0,115,4,110,4,110,7,110,6,53,
- 1,0,0,0,0,0,0,83,9,58,119,0,0,97,11,0,
- 0,91,9,0,0,0,0,0,0,0,0,83,10,53,1,0,
- 0,0,0,0,0,101,1,91,15,0,0,0,0,0,0,0,
- 0,85,0,83,2,5,0,0,0,82,17,0,0,0,0,0,
+ 85,2,53,1,0,0,0,0,0,0,79,1,47,0,110,13,
+ 83,11,110,14,91,19,0,0,0,0,0,0,0,0,88,205,
+ 53,2,0,0,0,0,0,0,19,0,72,37,0,0,117,2,
+ 0,0,110,15,110,16,91,15,0,0,0,0,0,0,0,0,
+ 85,15,53,1,0,0,0,0,0,0,91,15,0,0,0,0,
+ 0,0,0,0,85,16,53,1,0,0,0,0,0,0,58,119,
+ 0,0,97,2,0,0,32,0,79,9,85,14,83,12,45,13,
+ 0,0,110,14,77,39,0,0,11,0,32,0,85,4,47,1,
+ 91,21,0,0,0,0,0,0,0,0,85,12,53,1,0,0,
+ 0,0,0,0,85,14,45,10,0,0,45,5,0,0,88,222,
+ 83,8,4,0,45,0,0,0,110,17,85,17,40,0,0,0,
+ 0,0,0,0,100,2,0,0,85,3,36,0,85,2,82,23,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,85,17,53,1,0,0,0,0,0,0,36,0,33,0,
+ 91,24,0,0,0,0,0,0,0,0,91,4,0,0,0,0,
+ 0,0,0,0,91,26,0,0,0,0,0,0,0,0,91,28,
+ 0,0,0,0,0,0,0,0,91,30,0,0,0,0,0,0,
+ 0,0,52,5,7,0,97,25,0,0,32,0,91,32,0,0,
+ 0,0,0,0,0,0,82,34,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,34,0,83,13,88,1,
+ 53,3,0,0,0,0,0,0,32,0,101,0,102,0,61,3,
+ 31,0,102,1,41,14,122,35,82,101,116,117,114,110,32,97,
+ 32,114,101,108,97,116,105,118,101,32,118,101,114,115,105,111,
+ 110,32,111,102,32,97,32,112,97,116,104,122,17,110,111,32,
+ 112,97,116,104,32,115,112,101,99,105,102,105,101,100,114,86,
+ 0,0,0,114,142,0,0,0,114,230,0,0,0,114,4,0,
+ 0,0,114,2,0,0,0,114,3,0,0,0,78,122,17,112,
+ 97,116,104,32,105,115,32,111,110,32,109,111,117,110,116,32,
+ 122,17,44,32,115,116,97,114,116,32,111,110,32,109,111,117,
+ 110,116,32,114,8,0,0,0,114,91,0,0,0,114,45,0,
+ 0,0,41,18,114,69,0,0,0,114,70,0,0,0,114,238,
+ 0,0,0,114,56,0,0,0,114,57,0,0,0,114,34,0,
+ 0,0,114,14,0,0,0,114,10,0,0,0,114,15,0,0,
+ 0,218,3,122,105,112,114,135,0,0,0,114,12,0,0,0,
+ 114,97,0,0,0,114,98,0,0,0,114,99,0,0,0,218,
+ 18,68,101,112,114,101,99,97,116,105,111,110,87,97,114,110,
+ 105,110,103,114,100,0,0,0,114,101,0,0,0,41,18,114,
+ 59,0,0,0,114,131,0,0,0,114,37,0,0,0,114,35,
+ 0,0,0,114,36,0,0,0,218,9,115,116,97,114,116,95,
+ 97,98,115,218,8,112,97,116,104,95,97,98,115,218,11,115,
+ 116,97,114,116,95,100,114,105,118,101,114,15,1,0,0,218,
+ 10,115,116,97,114,116,95,114,101,115,116,218,10,112,97,116,
+ 104,95,100,114,105,118,101,218,9,112,97,116,104,95,114,101,
+ 115,116,218,10,115,116,97,114,116,95,108,105,115,116,218,9,
+ 112,97,116,104,95,108,105,115,116,114,139,0,0,0,218,2,
+ 101,49,218,2,101,50,218,8,114,101,108,95,108,105,115,116,
+ 115,18,0,0,0,32,32,32,32,32,32,32,32,32,32,32,
+ 32,32,32,32,32,32,32,114,60,0,0,0,114,45,0,0,
+ 0,114,45,0,0,0,227,2,0,0,115,128,1,0,0,128,
+ 0,228,11,13,143,57,138,57,144,84,139,63,128,68,222,11,
+ 15,220,14,24,208,25,44,211,14,45,208,8,45,228,7,17,
+ 144,36,156,5,215,7,30,209,7,30,216,14,19,136,3,216,
+ 17,21,136,6,216,17,22,137,6,224,14,18,136,3,216,17,
+ 20,136,6,216,17,21,136,6,224,7,12,129,125,216,16,22,
+ 137,5,228,16,18,151,9,146,9,152,37,211,16,32,136,5,
+ 240,4,24,5,14,220,20,27,152,69,147,78,136,9,220,19,
+ 26,152,52,147,61,136,8,220,37,46,168,121,211,37,57,209,
+ 8,34,136,11,152,10,220,35,44,168,88,211,35,54,209,8,
+ 32,136,10,144,121,220,11,19,144,75,211,11,32,164,72,168,
+ 90,211,36,56,211,11,56,221,18,28,219,16,26,154,75,240,
+ 3,1,30,41,243,0,1,19,42,240,0,1,13,42,246,6,
+ 0,47,57,144,90,215,21,37,209,21,37,160,99,212,21,42,
+ 184,98,136,10,222,44,53,144,73,151,79,145,79,160,67,212,
+ 20,40,184,50,136,9,224,12,13,136,1,220,22,25,152,42,
+ 214,22,48,137,70,136,66,144,2,220,15,23,152,2,139,124,
+ 156,120,168,2,155,124,211,15,43,217,16,21,216,12,13,144,
+ 17,137,70,138,65,241,7,0,23,49,240,10,0,21,27,144,
+ 56,156,115,160,58,155,127,168,113,209,31,48,209,19,49,176,
+ 73,184,98,176,77,209,19,65,136,8,222,15,23,216,19,25,
+ 136,77,216,15,18,143,120,137,120,152,8,211,15,33,208,8,
+ 33,248,220,12,21,148,122,164,62,180,60,212,65,83,208,11,
+ 84,243,0,2,5,14,220,8,19,215,8,36,210,8,36,160,
+ 89,176,4,212,8,60,216,8,13,240,5,2,5,14,250,115,
+ 19,0,0,0,193,40,67,38,69,32,0,197,15,16,69,32,
+ 0,197,32,56,70,24,3,99,1,0,0,0,0,0,0,0,
+ 0,0,0,0,10,0,0,0,3,0,0,0,243,210,4,0,
+ 0,149,0,91,1,0,0,0,0,0,0,0,0,91,3,0,
+ 0,0,0,0,0,0,0,91,4,0,0,0,0,0,0,0,
+ 0,82,6,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,85,0,53,2,0,0,0,0,0,0,53,
+ 1,0,0,0,0,0,0,110,0,85,0,40,0,0,0,0,
+ 0,0,0,100,11,0,0,91,9,0,0,0,0,0,0,0,
+ 0,83,1,53,1,0,0,0,0,0,0,101,1,91,11,0,
+ 0,0,0,0,0,0,0,85,0,83,2,5,0,0,0,91,
+ 12,0,0,0,0,0,0,0,0,53,2,0,0,0,0,0,
+ 0,40,0,0,0,0,0,0,0,97,7,0,0,83,3,110,
+ 1,83,4,110,2,83,5,110,3,79,6,83,6,110,1,83,
+ 7,110,2,83,8,110,3,30,0,85,0,19,0,86,4,115,
+ 2,47,0,115,2,19,0,72,43,0,0,110,4,91,15,0,
+ 0,0,0,0,0,0,0,85,4,82,17,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,88,33,53,
- 2,0,0,0,0,0,0,53,1,0,0,0,0,0,0,117,
- 3,0,0,112,154,110,11,91,23,0,0,0,0,0,0,0,
+ 2,0,0,0,0,0,0,82,19,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,53,0,0,0,0,
+ 0,0,0,53,1,0,0,0,0,0,0,80,2,77,45,0,
+ 0,11,0,32,0,110,5,110,4,85,5,19,0,86,6,86,
+ 7,86,4,115,4,47,0,115,2,19,0,72,22,0,0,117,
+ 3,0,0,112,103,111,68,82,21,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,85,1,53,1,0,
+ 0,0,0,0,0,80,2,77,24,0,0,11,0,32,0,110,
+ 8,110,7,110,6,110,4,91,23,0,0,0,0,0,0,0,
0,85,5,19,0,86,6,86,7,86,4,115,4,49,0,115,
- 2,19,0,72,7,0,0,117,3,0,0,112,103,111,71,105,
+ 2,19,0,72,7,0,0,117,3,0,0,112,103,111,70,105,
2,77,9,0,0,11,0,32,0,115,4,110,4,110,7,110,
6,53,1,0,0,0,0,0,0,83,9,58,119,0,0,97,
- 29,0,0,85,9,40,0,0,0,0,0,0,0,97,11,0,
- 0,91,9,0,0,0,0,0,0,0,0,83,11,53,1,0,
- 0,0,0,0,0,101,1,91,9,0,0,0,0,0,0,0,
- 0,83,12,53,1,0,0,0,0,0,0,101,1,85,11,82,
- 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,85,1,53,1,0,0,0,0,0,0,110,12,85,
- 12,19,0,86,13,115,2,47,0,115,2,19,0,72,20,0,
- 0,111,221,40,0,0,0,0,0,0,0,100,2,0,0,77,
- 11,0,0,88,211,58,119,0,0,100,2,0,0,77,18,0,
- 0,85,13,80,2,77,22,0,0,11,0,32,0,110,12,110,
- 13,85,8,19,0,86,14,86,13,115,3,47,0,115,2,19,
- 0,72,36,0,0,111,238,19,0,86,13,115,2,47,0,115,
- 2,19,0,72,20,0,0,111,221,40,0,0,0,0,0,0,
- 0,100,2,0,0,77,11,0,0,88,211,58,119,0,0,100,
- 2,0,0,77,18,0,0,85,13,80,2,77,22,0,0,11,
- 0,32,0,115,2,110,13,80,2,77,38,0,0,11,0,32,
- 0,110,8,110,14,110,13,91,25,0,0,0,0,0,0,0,
- 0,85,8,53,1,0,0,0,0,0,0,110,15,91,27,0,
- 0,0,0,0,0,0,0,85,8,53,1,0,0,0,0,0,
- 0,110,16,91,29,0,0,0,0,0,0,0,0,85,15,53,
- 1,0,0,0,0,0,0,19,0,72,22,0,0,117,2,0,
- 0,110,17,110,13,85,13,85,16,85,17,5,0,0,0,58,
- 119,0,0,100,2,0,0,77,17,0,0,85,12,83,13,85,
- 17,4,0,110,12,32,0,79,16,11,0,32,0,85,12,83,
- 13,91,23,0,0,0,0,0,0,0,0,85,15,53,1,0,
- 0,0,0,0,0,4,0,110,12,88,154,45,0,0,0,85,
- 1,82,31,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,85,12,53,1,0,0,0,0,0,0,45,
- 0,0,0,36,0,115,2,32,0,115,2,110,4,102,0,115,
+ 11,0,0,91,9,0,0,0,0,0,0,0,0,83,10,53,
+ 1,0,0,0,0,0,0,101,1,91,15,0,0,0,0,0,
+ 0,0,0,85,0,83,2,5,0,0,0,82,17,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,
+ 33,53,2,0,0,0,0,0,0,53,1,0,0,0,0,0,
+ 0,117,3,0,0,112,154,110,11,91,23,0,0,0,0,0,
+ 0,0,0,85,5,19,0,86,6,86,7,86,4,115,4,49,
+ 0,115,2,19,0,72,7,0,0,117,3,0,0,112,103,111,
+ 71,105,2,77,9,0,0,11,0,32,0,115,4,110,4,110,
+ 7,110,6,53,1,0,0,0,0,0,0,83,9,58,119,0,
+ 0,97,29,0,0,85,9,40,0,0,0,0,0,0,0,97,
+ 11,0,0,91,9,0,0,0,0,0,0,0,0,83,11,53,
+ 1,0,0,0,0,0,0,101,1,91,9,0,0,0,0,0,
+ 0,0,0,83,12,53,1,0,0,0,0,0,0,101,1,85,
+ 11,82,21,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,85,1,53,1,0,0,0,0,0,0,110,
+ 12,85,12,19,0,86,13,115,2,47,0,115,2,19,0,72,
+ 20,0,0,111,221,40,0,0,0,0,0,0,0,100,2,0,
+ 0,77,11,0,0,88,211,58,119,0,0,100,2,0,0,77,
+ 18,0,0,85,13,80,2,77,22,0,0,11,0,32,0,110,
+ 12,110,13,85,8,19,0,86,14,86,13,115,3,47,0,115,
+ 2,19,0,72,36,0,0,111,238,19,0,86,13,115,2,47,
+ 0,115,2,19,0,72,20,0,0,111,221,40,0,0,0,0,
+ 0,0,0,100,2,0,0,77,11,0,0,88,211,58,119,0,
+ 0,100,2,0,0,77,18,0,0,85,13,80,2,77,22,0,
+ 0,11,0,32,0,115,2,110,13,80,2,77,38,0,0,11,
+ 0,32,0,110,8,110,14,110,13,91,25,0,0,0,0,0,
+ 0,0,0,85,8,53,1,0,0,0,0,0,0,110,15,91,
+ 27,0,0,0,0,0,0,0,0,85,8,53,1,0,0,0,
+ 0,0,0,110,16,91,29,0,0,0,0,0,0,0,0,85,
+ 15,53,1,0,0,0,0,0,0,19,0,72,22,0,0,117,
+ 2,0,0,110,17,110,13,85,13,85,16,85,17,5,0,0,
+ 0,58,119,0,0,100,2,0,0,77,17,0,0,85,12,83,
+ 13,85,17,4,0,110,12,32,0,79,16,11,0,32,0,85,
+ 12,83,13,91,23,0,0,0,0,0,0,0,0,85,15,53,
+ 1,0,0,0,0,0,0,4,0,110,12,88,154,45,0,0,
+ 0,85,1,82,31,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,85,12,53,1,0,0,0,0,0,
+ 0,45,0,0,0,36,0,115,2,32,0,115,2,110,4,102,
+ 0,115,2,32,0,115,4,110,4,110,7,110,6,102,0,115,
2,32,0,115,4,110,4,110,7,110,6,102,0,115,2,32,
0,115,4,110,4,110,7,110,6,102,0,115,2,32,0,115,
- 4,110,4,110,7,110,6,102,0,115,2,32,0,115,2,110,
- 13,102,0,115,2,32,0,115,2,110,13,102,0,115,2,32,
- 0,115,3,110,13,110,14,102,0,33,0,91,32,0,0,0,
- 0,0,0,0,0,91,34,0,0,0,0,0,0,0,0,52,
- 2,7,0,97,25,0,0,32,0,91,36,0,0,0,0,0,
- 0,0,0,82,38,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,34,0,83,14,47,1,85,0,81,
- 1,55,6,54,0,32,0,101,0,102,0,61,3,31,0,102,
- 1,41,15,122,69,71,105,118,101,110,32,97,110,32,105,116,
- 101,114,97,98,108,101,32,111,102,32,112,97,116,104,32,110,
- 97,109,101,115,44,32,114,101,116,117,114,110,115,32,116,104,
- 101,32,108,111,110,103,101,115,116,32,99,111,109,109,111,110,
- 32,115,117,98,45,112,97,116,104,46,122,37,99,111,109,109,
- 111,110,112,97,116,104,40,41,32,97,114,103,32,105,115,32,
- 97,110,32,101,109,112,116,121,32,105,116,101,114,97,98,108,
- 101,114,8,0,0,0,114,86,0,0,0,114,87,0,0,0,
- 114,142,0,0,0,114,4,0,0,0,114,6,0,0,0,114,
- 2,0,0,0,114,91,0,0,0,122,31,80,97,116,104,115,
- 32,100,111,110,39,116,32,104,97,118,101,32,116,104,101,32,
- 115,97,109,101,32,100,114,105,118,101,122,37,67,97,110,39,
- 116,32,109,105,120,32,97,98,115,111,108,117,116,101,32,97,
- 110,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,
- 115,122,37,67,97,110,39,116,32,109,105,120,32,114,111,111,
- 116,101,100,32,97,110,100,32,110,111,116,45,114,111,111,116,
- 101,100,32,112,97,116,104,115,78,114,49,0,0,0,41,20,
- 218,5,116,117,112,108,101,218,3,109,97,112,114,69,0,0,
- 0,114,70,0,0,0,114,238,0,0,0,114,56,0,0,0,
- 114,57,0,0,0,114,14,0,0,0,114,74,0,0,0,114,
- 84,0,0,0,114,15,0,0,0,114,135,0,0,0,218,3,
- 109,105,110,218,3,109,97,120,218,9,101,110,117,109,101,114,
- 97,116,101,114,12,0,0,0,114,97,0,0,0,114,98,0,
- 0,0,114,100,0,0,0,114,101,0,0,0,41,18,114,102,
- 0,0,0,114,37,0,0,0,114,40,0,0,0,114,35,0,
- 0,0,114,108,0,0,0,218,11,100,114,105,118,101,115,112,
- 108,105,116,115,114,137,0,0,0,114,138,0,0,0,218,11,
- 115,112,108,105,116,95,112,97,116,104,115,114,113,0,0,0,
- 114,114,0,0,0,114,59,0,0,0,218,6,99,111,109,109,
- 111,110,218,1,99,114,79,0,0,0,218,2,115,49,218,2,
- 115,50,114,139,0,0,0,115,18,0,0,0,32,32,32,32,
- 32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,60,
- 0,0,0,114,49,0,0,0,114,49,0,0,0,26,3,0,
- 0,115,47,2,0,0,128,0,228,12,17,148,35,148,98,151,
- 105,145,105,160,21,211,18,39,211,12,40,128,69,222,11,16,
- 220,14,24,208,25,64,211,14,65,208,8,65,228,7,17,144,
- 37,152,1,145,40,156,69,215,7,34,209,7,34,216,14,19,
- 136,3,216,17,21,136,6,216,17,21,137,6,224,14,18,136,
- 3,216,17,20,136,6,216,17,20,136,6,240,4,33,5,14,
- 217,74,79,211,22,80,202,37,192,81,148,121,160,17,167,25,
- 161,25,168,54,211,33,55,215,33,61,209,33,61,211,33,63,
- 214,23,64,201,37,136,11,208,22,80,217,51,62,213,22,63,
- 178,59,169,7,168,1,168,97,151,119,145,119,152,115,150,124,
- 177,59,136,11,210,22,63,244,10,0,12,15,161,27,213,15,
- 45,162,27,145,103,144,97,152,65,146,1,161,27,211,15,45,
- 211,11,46,176,33,211,11,51,220,18,28,208,29,62,211,18,
- 63,208,12,63,228,28,37,160,101,168,65,161,104,215,38,54,
- 209,38,54,176,118,211,38,67,211,28,68,209,8,25,136,5,
- 144,84,220,11,14,161,27,213,15,45,162,27,145,103,144,97,
- 152,65,146,1,161,27,211,15,45,211,11,46,176,33,211,11,
- 51,222,15,20,220,22,32,208,33,72,211,22,73,208,16,73,
- 228,22,32,208,33,72,211,22,73,208,16,73,224,17,21,151,
- 26,145,26,152,67,147,31,136,6,217,29,35,211,17,57,154,
- 86,152,1,163,113,147,33,168,81,169,91,151,33,153,86,136,
- 6,208,17,57,225,68,79,212,22,80,194,75,184,113,160,49,
- 211,23,58,162,49,152,97,171,1,155,1,168,97,169,107,159,
- 1,161,49,212,23,58,193,75,136,11,209,22,80,220,13,16,
- 144,27,211,13,29,136,2,220,13,16,144,27,211,13,29,136,
- 2,220,20,29,152,98,150,77,137,68,136,65,136,113,216,15,
- 16,144,66,144,113,145,69,141,122,216,25,31,160,2,160,17,
- 152,26,144,6,217,16,21,241,7,0,21,34,240,10,0,22,
- 28,152,72,156,83,160,18,155,87,208,21,37,136,70,224,15,
- 20,137,124,152,99,159,104,153,104,160,118,211,30,46,209,15,
- 46,208,8,46,249,242,59,0,23,81,1,249,220,22,63,249,
- 244,10,0,16,46,249,244,8,0,16,46,249,242,14,0,18,
- 58,249,226,23,58,249,211,22,80,248,244,22,0,13,22,148,
- 126,208,11,38,243,0,2,5,14,220,8,19,215,8,36,210,
- 8,36,160,92,208,8,58,176,69,211,8,58,216,8,13,240,
- 5,2,5,14,250,115,145,0,0,0,193,28,4,72,61,0,
- 193,32,50,72,19,4,194,18,8,72,61,0,194,26,29,72,
- 24,8,194,55,15,72,61,0,195,6,14,72,31,12,195,20,
- 65,3,72,61,0,196,23,14,72,38,12,196,37,63,72,61,
- 0,197,36,10,72,45,4,197,50,3,72,45,4,197,57,6,
- 72,45,4,197,63,7,72,61,0,198,6,9,72,55,6,198,
- 15,10,72,50,12,198,29,3,72,50,12,198,36,6,72,50,
- 12,198,42,7,72,55,6,198,49,49,72,61,0,199,38,44,
- 72,61,0,200,19,31,72,61,0,200,50,5,72,55,6,200,
- 55,6,72,61,0,200,61,41,73,38,3,41,1,218,11,95,
- 112,97,116,104,95,105,115,100,105,114,41,1,218,12,95,112,
- 97,116,104,95,105,115,102,105,108,101,41,1,218,12,95,112,
- 97,116,104,95,105,115,108,105,110,107,41,1,218,16,95,112,
- 97,116,104,95,105,115,106,117,110,99,116,105,111,110,41,1,
- 218,12,95,112,97,116,104,95,101,120,105,115,116,115,41,1,
- 218,13,95,112,97,116,104,95,108,101,120,105,115,116,115,41,
- 1,218,16,95,112,97,116,104,95,105,115,100,101,118,100,114,
- 105,118,101,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 5,0,0,0,3,0,0,0,243,76,0,0,0,149,0,30,
- 0,91,1,0,0,0,0,0,0,0,0,91,3,0,0,0,
- 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,53,
- 1,0,0,0,0,0,0,36,0,33,0,91,4,0,0,0,
- 0,0,0,0,0,7,0,97,3,0,0,32,0,31,0,103,
- 1,102,0,61,3,31,0,102,1,41,2,122,64,68,101,116,
- 101,114,109,105,110,101,115,32,119,104,101,116,104,101,114,32,
- 116,104,101,32,115,112,101,99,105,102,105,101,100,32,112,97,
- 116,104,32,105,115,32,111,110,32,97,32,87,105,110,100,111,
- 119,115,32,68,101,118,32,68,114,105,118,101,46,70,41,3,
- 114,59,1,0,0,114,34,0,0,0,114,237,0,0,0,114,
- 58,0,0,0,115,1,0,0,0,32,114,60,0,0,0,114,
- 51,0,0,0,114,51,0,0,0,94,3,0,0,115,40,0,
- 0,0,128,0,240,4,3,9,25,220,19,35,164,71,168,68,
- 163,77,211,19,50,208,12,50,248,220,15,22,243,0,1,9,
- 25,217,19,24,240,3,1,9,25,250,115,12,0,0,0,130,
- 19,22,0,150,10,35,3,162,1,35,3,114,171,0,0,0,
- 41,77,218,7,95,95,100,111,99,95,95,114,35,0,0,0,
- 114,36,0,0,0,114,41,0,0,0,114,37,0,0,0,114,
- 38,0,0,0,114,40,0,0,0,114,39,0,0,0,114,42,
- 0,0,0,114,69,0,0,0,114,71,0,0,0,114,100,0,
- 0,0,218,7,95,95,97,108,108,95,95,114,61,0,0,0,
- 218,7,95,119,105,110,97,112,105,114,63,0,0,0,114,75,
- 0,0,0,114,64,0,0,0,114,76,0,0,0,114,65,0,
- 0,0,114,77,0,0,0,114,10,0,0,0,218,11,73,109,
- 112,111,114,116,69,114,114,111,114,114,11,0,0,0,114,12,
- 0,0,0,114,13,0,0,0,218,2,110,116,114,116,0,0,
- 0,114,14,0,0,0,114,15,0,0,0,114,16,0,0,0,
- 114,143,0,0,0,114,17,0,0,0,114,18,0,0,0,114,
- 149,0,0,0,114,29,0,0,0,218,9,102,114,111,122,101,
- 110,115,101,116,218,5,114,97,110,103,101,218,3,99,104,114,
- 114,181,0,0,0,114,184,0,0,0,114,30,0,0,0,114,
- 172,0,0,0,114,31,0,0,0,114,223,0,0,0,114,227,
- 0,0,0,114,220,0,0,0,114,32,0,0,0,114,228,0,
- 0,0,114,33,0,0,0,114,234,0,0,0,114,34,0,0,
- 0,114,243,0,0,0,114,244,0,0,0,114,245,0,0,0,
- 114,254,0,0,0,114,237,0,0,0,114,5,1,0,0,114,
- 16,1,0,0,114,43,0,0,0,114,44,0,0,0,114,45,
- 0,0,0,114,49,0,0,0,114,53,1,0,0,114,27,0,
- 0,0,114,54,1,0,0,114,28,0,0,0,114,55,1,0,
- 0,114,24,0,0,0,114,56,1,0,0,114,50,0,0,0,
- 114,57,1,0,0,114,25,0,0,0,114,58,1,0,0,114,
- 26,0,0,0,114,59,1,0,0,114,51,0,0,0,41,2,
- 114,139,0,0,0,114,50,1,0,0,115,2,0,0,0,48,
- 48,114,60,0,0,0,218,8,60,109,111,100,117,108,101,62,
- 114,69,1,0,0,1,0,0,0,115,146,2,0,0,240,3,
- 1,1,1,241,4,4,1,4,240,18,0,10,13,128,6,216,
- 9,13,128,6,216,9,12,128,6,216,6,10,128,3,216,10,
- 13,128,7,216,9,12,128,6,216,10,21,128,7,216,10,15,
- 128,7,227,0,9,219,0,10,219,0,18,220,0,25,242,4,
- 7,11,42,128,7,242,18,4,1,21,240,20,33,1,44,247,
- 2,3,5,45,241,0,3,5,45,242,10,17,5,56,242,60,
- 15,1,66,1,242,38,41,1,14,242,94,1,20,1,30,240,
- 46,45,1,35,221,4,50,242,104,1,13,1,43,242,42,5,
- 1,56,240,12,0,20,31,215,19,40,209,19,40,215,19,48,
- 209,19,48,128,8,212,0,16,242,10,2,1,23,242,14,2,
- 1,23,240,30,3,1,30,221,4,37,242,6,17,1,21,241,
- 40,0,19,28,217,21,26,152,50,148,89,211,4,31,146,89,
- 144,1,129,83,136,17,134,86,145,89,209,4,31,218,4,50,
- 241,3,1,5,51,243,3,3,19,2,128,15,241,10,0,19,
- 28,218,4,53,217,24,47,211,4,48,210,24,47,144,49,128,
- 115,136,49,136,35,131,89,209,24,47,209,4,48,241,3,1,
- 5,49,225,24,47,211,4,48,210,24,47,144,49,128,115,136,
- 49,136,35,131,89,209,24,47,209,4,48,241,5,2,5,49,
- 243,3,4,19,2,128,15,242,12,5,1,76,1,242,14,13,
- 1,73,1,242,50,44,1,31,240,120,1,0,15,64,1,128,
- 11,216,10,14,128,7,216,11,15,128,8,242,4,58,1,27,
- 240,64,2,38,1,40,221,4,45,240,82,1,41,1,30,221,
- 4,35,242,30,25,5,30,240,54,111,2,1,20,223,4,78,
- 209,4,78,240,12,0,44,51,244,0,40,5,20,240,84,1,
- 0,57,64,1,244,0,54,5,20,240,112,1,0,34,39,245,
- 0,70,1,5,20,240,84,2,0,30,34,208,0,26,244,4,
- 44,1,14,242,114,1,48,1,14,240,102,1,12,1,9,245,
- 8,0,5,40,221,4,41,221,4,41,221,4,49,221,4,41,
- 221,4,43,240,12,10,1,9,221,4,35,243,2,5,5,25,
- 248,240,117,24,0,8,19,243,0,9,1,44,245,2,8,5,
- 44,240,3,9,1,44,251,240,78,3,0,8,19,243,0,43,
- 1,35,245,2,42,5,35,240,3,43,1,35,251,240,86,3,
- 0,8,19,243,0,1,1,30,216,25,29,211,4,22,240,3,
- 1,1,30,252,242,46,0,5,32,249,242,12,0,5,49,249,
- 218,4,48,248,240,76,5,0,8,19,243,0,35,1,40,244,
- 2,34,5,40,240,3,35,1,40,251,240,84,1,0,8,19,
- 243,0,10,1,30,244,2,9,5,30,240,3,10,1,30,251,
- 240,84,1,0,8,19,243,0,3,1,29,224,33,38,247,0,
- 1,5,29,240,5,3,1,29,251,240,82,9,0,8,19,243,
- 0,2,1,9,225,4,8,240,5,2,1,9,251,240,26,0,
- 8,19,243,0,2,1,9,225,4,8,240,5,2,1,9,250,
- 115,161,0,0,0,172,13,69,23,0,193,3,6,69,39,0,
- 193,49,6,69,55,0,194,6,18,70,6,8,194,45,15,70,
- 11,10,195,4,15,70,16,10,195,47,6,70,21,0,195,54,
- 6,70,36,0,196,0,10,70,51,0,196,40,36,71,6,0,
- 197,13,9,71,18,0,197,23,9,69,36,3,197,35,1,69,
- 36,3,197,39,9,69,52,3,197,51,1,69,52,3,197,55,
- 8,70,3,3,198,2,1,70,3,3,198,21,9,70,33,3,
- 198,32,1,70,33,3,198,36,9,70,48,3,198,47,1,70,
- 48,3,198,51,13,71,3,3,199,2,1,71,3,3,199,6,
- 6,71,15,3,199,14,1,71,15,3,199,18,6,71,27,3,
- 199,26,1,71,27,3,
+ 2,110,13,102,0,115,2,32,0,115,2,110,13,102,0,115,
+ 2,32,0,115,3,110,13,110,14,102,0,33,0,91,32,0,
+ 0,0,0,0,0,0,0,91,34,0,0,0,0,0,0,0,
+ 0,52,2,7,0,97,25,0,0,32,0,91,36,0,0,0,
+ 0,0,0,0,0,82,38,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,34,0,83,14,47,1,85,
+ 0,81,1,55,6,54,0,32,0,101,0,102,0,61,3,31,
+ 0,102,1,41,15,122,69,71,105,118,101,110,32,97,110,32,
+ 105,116,101,114,97,98,108,101,32,111,102,32,112,97,116,104,
+ 32,110,97,109,101,115,44,32,114,101,116,117,114,110,115,32,
+ 116,104,101,32,108,111,110,103,101,115,116,32,99,111,109,109,
+ 111,110,32,115,117,98,45,112,97,116,104,46,122,37,99,111,
+ 109,109,111,110,112,97,116,104,40,41,32,97,114,103,32,105,
+ 115,32,97,110,32,101,109,112,116,121,32,105,116,101,114,97,
+ 98,108,101,114,8,0,0,0,114,86,0,0,0,114,87,0,
+ 0,0,114,142,0,0,0,114,4,0,0,0,114,6,0,0,
+ 0,114,2,0,0,0,114,91,0,0,0,122,31,80,97,116,
+ 104,115,32,100,111,110,39,116,32,104,97,118,101,32,116,104,
+ 101,32,115,97,109,101,32,100,114,105,118,101,122,37,67,97,
+ 110,39,116,32,109,105,120,32,97,98,115,111,108,117,116,101,
+ 32,97,110,100,32,114,101,108,97,116,105,118,101,32,112,97,
+ 116,104,115,122,37,67,97,110,39,116,32,109,105,120,32,114,
+ 111,111,116,101,100,32,97,110,100,32,110,111,116,45,114,111,
+ 111,116,101,100,32,112,97,116,104,115,78,114,49,0,0,0,
+ 41,20,218,5,116,117,112,108,101,218,3,109,97,112,114,69,
+ 0,0,0,114,70,0,0,0,114,238,0,0,0,114,56,0,
+ 0,0,114,57,0,0,0,114,14,0,0,0,114,74,0,0,
+ 0,114,84,0,0,0,114,15,0,0,0,114,135,0,0,0,
+ 218,3,109,105,110,218,3,109,97,120,218,9,101,110,117,109,
+ 101,114,97,116,101,114,12,0,0,0,114,97,0,0,0,114,
+ 98,0,0,0,114,100,0,0,0,114,101,0,0,0,41,18,
+ 114,102,0,0,0,114,37,0,0,0,114,40,0,0,0,114,
+ 35,0,0,0,114,108,0,0,0,218,11,100,114,105,118,101,
+ 115,112,108,105,116,115,114,137,0,0,0,114,138,0,0,0,
+ 218,11,115,112,108,105,116,95,112,97,116,104,115,114,113,0,
+ 0,0,114,114,0,0,0,114,59,0,0,0,218,6,99,111,
+ 109,109,111,110,218,1,99,114,79,0,0,0,218,2,115,49,
+ 218,2,115,50,114,139,0,0,0,115,18,0,0,0,32,32,
+ 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+ 114,60,0,0,0,114,49,0,0,0,114,49,0,0,0,28,
+ 3,0,0,115,47,2,0,0,128,0,228,12,17,148,35,148,
+ 98,151,105,145,105,160,21,211,18,39,211,12,40,128,69,222,
+ 11,16,220,14,24,208,25,64,211,14,65,208,8,65,228,7,
+ 17,144,37,152,1,145,40,156,69,215,7,34,209,7,34,216,
+ 14,19,136,3,216,17,21,136,6,216,17,21,137,6,224,14,
+ 18,136,3,216,17,20,136,6,216,17,20,136,6,240,4,33,
+ 5,14,217,74,79,211,22,80,202,37,192,81,148,121,160,17,
+ 167,25,161,25,168,54,211,33,55,215,33,61,209,33,61,211,
+ 33,63,214,23,64,201,37,136,11,208,22,80,217,51,62,213,
+ 22,63,178,59,169,7,168,1,168,97,151,119,145,119,152,115,
+ 150,124,177,59,136,11,210,22,63,244,10,0,12,15,161,27,
+ 213,15,45,162,27,145,103,144,97,152,65,146,1,161,27,211,
+ 15,45,211,11,46,176,33,211,11,51,220,18,28,208,29,62,
+ 211,18,63,208,12,63,228,28,37,160,101,168,65,161,104,215,
+ 38,54,209,38,54,176,118,211,38,67,211,28,68,209,8,25,
+ 136,5,144,84,220,11,14,161,27,213,15,45,162,27,145,103,
+ 144,97,152,65,146,1,161,27,211,15,45,211,11,46,176,33,
+ 211,11,51,222,15,20,220,22,32,208,33,72,211,22,73,208,
+ 16,73,228,22,32,208,33,72,211,22,73,208,16,73,224,17,
+ 21,151,26,145,26,152,67,147,31,136,6,217,29,35,211,17,
+ 57,154,86,152,1,163,113,147,33,168,81,169,91,151,33,153,
+ 86,136,6,208,17,57,225,68,79,212,22,80,194,75,184,113,
+ 160,49,211,23,58,162,49,152,97,171,1,155,1,168,97,169,
+ 107,159,1,161,49,212,23,58,193,75,136,11,209,22,80,220,
+ 13,16,144,27,211,13,29,136,2,220,13,16,144,27,211,13,
+ 29,136,2,220,20,29,152,98,150,77,137,68,136,65,136,113,
+ 216,15,16,144,66,144,113,145,69,141,122,216,25,31,160,2,
+ 160,17,152,26,144,6,217,16,21,241,7,0,21,34,240,10,
+ 0,22,28,152,72,156,83,160,18,155,87,208,21,37,136,70,
+ 224,15,20,137,124,152,99,159,104,153,104,160,118,211,30,46,
+ 209,15,46,208,8,46,249,242,59,0,23,81,1,249,220,22,
+ 63,249,244,10,0,16,46,249,244,8,0,16,46,249,242,14,
+ 0,18,58,249,226,23,58,249,211,22,80,248,244,22,0,13,
+ 22,148,126,208,11,38,243,0,2,5,14,220,8,19,215,8,
+ 36,210,8,36,160,92,208,8,58,176,69,211,8,58,216,8,
+ 13,240,5,2,5,14,250,115,145,0,0,0,193,28,4,72,
+ 61,0,193,32,50,72,19,4,194,18,8,72,61,0,194,26,
+ 29,72,24,8,194,55,15,72,61,0,195,6,14,72,31,12,
+ 195,20,65,3,72,61,0,196,23,14,72,38,12,196,37,63,
+ 72,61,0,197,36,10,72,45,4,197,50,3,72,45,4,197,
+ 57,6,72,45,4,197,63,7,72,61,0,198,6,9,72,55,
+ 6,198,15,10,72,50,12,198,29,3,72,50,12,198,36,6,
+ 72,50,12,198,42,7,72,55,6,198,49,49,72,61,0,199,
+ 38,44,72,61,0,200,19,31,72,61,0,200,50,5,72,55,
+ 6,200,55,6,72,61,0,200,61,41,73,38,3,41,1,218,
+ 11,95,112,97,116,104,95,105,115,100,105,114,41,1,218,12,
+ 95,112,97,116,104,95,105,115,102,105,108,101,41,1,218,12,
+ 95,112,97,116,104,95,105,115,108,105,110,107,41,1,218,16,
+ 95,112,97,116,104,95,105,115,106,117,110,99,116,105,111,110,
+ 41,1,218,12,95,112,97,116,104,95,101,120,105,115,116,115,
+ 41,1,218,13,95,112,97,116,104,95,108,101,120,105,115,116,
+ 115,41,1,218,16,95,112,97,116,104,95,105,115,100,101,118,
+ 100,114,105,118,101,99,1,0,0,0,0,0,0,0,0,0,
+ 0,0,5,0,0,0,3,0,0,0,243,76,0,0,0,149,
+ 0,30,0,91,1,0,0,0,0,0,0,0,0,91,3,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,53,1,0,0,0,0,0,0,36,0,33,0,91,4,0,
+ 0,0,0,0,0,0,0,7,0,97,3,0,0,32,0,31,
+ 0,103,1,102,0,61,3,31,0,102,1,41,2,122,64,68,
+ 101,116,101,114,109,105,110,101,115,32,119,104,101,116,104,101,
+ 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,
+ 112,97,116,104,32,105,115,32,111,110,32,97,32,87,105,110,
+ 100,111,119,115,32,68,101,118,32,68,114,105,118,101,46,70,
+ 41,3,114,59,1,0,0,114,34,0,0,0,114,237,0,0,
+ 0,114,58,0,0,0,115,1,0,0,0,32,114,60,0,0,
+ 0,114,51,0,0,0,114,51,0,0,0,96,3,0,0,115,
+ 40,0,0,0,128,0,240,4,3,9,25,220,19,35,164,71,
+ 168,68,163,77,211,19,50,208,12,50,248,220,15,22,243,0,
+ 1,9,25,217,19,24,240,3,1,9,25,250,115,12,0,0,
+ 0,130,19,22,0,150,10,35,3,162,1,35,3,114,171,0,
+ 0,0,41,77,218,7,95,95,100,111,99,95,95,114,35,0,
+ 0,0,114,36,0,0,0,114,41,0,0,0,114,37,0,0,
+ 0,114,38,0,0,0,114,40,0,0,0,114,39,0,0,0,
+ 114,42,0,0,0,114,69,0,0,0,114,71,0,0,0,114,
+ 100,0,0,0,218,7,95,95,97,108,108,95,95,114,61,0,
+ 0,0,218,7,95,119,105,110,97,112,105,114,63,0,0,0,
+ 114,75,0,0,0,114,64,0,0,0,114,76,0,0,0,114,
+ 65,0,0,0,114,77,0,0,0,114,10,0,0,0,218,11,
+ 73,109,112,111,114,116,69,114,114,111,114,114,11,0,0,0,
+ 114,12,0,0,0,114,13,0,0,0,218,2,110,116,114,116,
+ 0,0,0,114,14,0,0,0,114,15,0,0,0,114,16,0,
+ 0,0,114,143,0,0,0,114,17,0,0,0,114,18,0,0,
+ 0,114,149,0,0,0,114,29,0,0,0,218,9,102,114,111,
+ 122,101,110,115,101,116,218,5,114,97,110,103,101,218,3,99,
+ 104,114,114,181,0,0,0,114,184,0,0,0,114,30,0,0,
+ 0,114,172,0,0,0,114,31,0,0,0,114,223,0,0,0,
+ 114,227,0,0,0,114,220,0,0,0,114,32,0,0,0,114,
+ 228,0,0,0,114,33,0,0,0,114,234,0,0,0,114,34,
+ 0,0,0,114,243,0,0,0,114,244,0,0,0,114,245,0,
+ 0,0,114,254,0,0,0,114,237,0,0,0,114,5,1,0,
+ 0,114,16,1,0,0,114,43,0,0,0,114,44,0,0,0,
+ 114,45,0,0,0,114,49,0,0,0,114,53,1,0,0,114,
+ 27,0,0,0,114,54,1,0,0,114,28,0,0,0,114,55,
+ 1,0,0,114,24,0,0,0,114,56,1,0,0,114,50,0,
+ 0,0,114,57,1,0,0,114,25,0,0,0,114,58,1,0,
+ 0,114,26,0,0,0,114,59,1,0,0,114,51,0,0,0,
+ 41,2,114,139,0,0,0,114,50,1,0,0,115,2,0,0,
+ 0,48,48,114,60,0,0,0,218,8,60,109,111,100,117,108,
+ 101,62,114,69,1,0,0,1,0,0,0,115,146,2,0,0,
+ 240,3,1,1,1,241,4,4,1,4,240,18,0,10,13,128,
+ 6,216,9,13,128,6,216,9,12,128,6,216,6,10,128,3,
+ 216,10,13,128,7,216,9,12,128,6,216,10,21,128,7,216,
+ 10,15,128,7,227,0,9,219,0,10,219,0,18,220,0,25,
+ 242,4,7,11,42,128,7,242,18,4,1,21,240,20,33,1,
+ 44,247,2,3,5,45,241,0,3,5,45,242,10,17,5,56,
+ 242,60,15,1,66,1,242,38,41,1,14,242,94,1,22,1,
+ 30,240,50,45,1,35,221,4,50,242,104,1,13,1,43,242,
+ 42,5,1,56,240,12,0,20,31,215,19,40,209,19,40,215,
+ 19,48,209,19,48,128,8,212,0,16,242,10,2,1,23,242,
+ 14,2,1,23,240,30,3,1,30,221,4,37,242,6,17,1,
+ 21,241,40,0,19,28,217,21,26,152,50,148,89,211,4,31,
+ 146,89,144,1,129,83,136,17,134,86,145,89,209,4,31,218,
+ 4,50,241,3,1,5,51,243,3,3,19,2,128,15,241,10,
+ 0,19,28,218,4,53,217,24,47,211,4,48,210,24,47,144,
+ 49,128,115,136,49,136,35,131,89,209,24,47,209,4,48,241,
+ 3,1,5,49,225,24,47,211,4,48,210,24,47,144,49,128,
+ 115,136,49,136,35,131,89,209,24,47,209,4,48,241,5,2,
+ 5,49,243,3,4,19,2,128,15,242,12,5,1,76,1,242,
+ 14,13,1,73,1,242,50,44,1,31,240,120,1,0,15,64,
+ 1,128,11,216,10,14,128,7,216,11,15,128,8,242,4,58,
+ 1,27,240,64,2,38,1,40,221,4,45,240,82,1,41,1,
+ 30,221,4,35,242,30,25,5,30,240,54,111,2,1,20,223,
+ 4,78,209,4,78,240,12,0,44,51,244,0,40,5,20,240,
+ 84,1,0,57,64,1,244,0,54,5,20,240,112,1,0,34,
+ 39,245,0,70,1,5,20,240,84,2,0,30,34,208,0,26,
+ 244,4,44,1,14,242,114,1,48,1,14,240,102,1,12,1,
+ 9,245,8,0,5,40,221,4,41,221,4,41,221,4,49,221,
+ 4,41,221,4,43,240,12,10,1,9,221,4,35,243,2,5,
+ 5,25,248,240,121,24,0,8,19,243,0,9,1,44,245,2,
+ 8,5,44,240,3,9,1,44,251,240,82,3,0,8,19,243,
+ 0,43,1,35,245,2,42,5,35,240,3,43,1,35,251,240,
+ 86,3,0,8,19,243,0,1,1,30,216,25,29,211,4,22,
+ 240,3,1,1,30,252,242,46,0,5,32,249,242,12,0,5,
+ 49,249,218,4,48,248,240,76,5,0,8,19,243,0,35,1,
+ 40,244,2,34,5,40,240,3,35,1,40,251,240,84,1,0,
+ 8,19,243,0,10,1,30,244,2,9,5,30,240,3,10,1,
+ 30,251,240,84,1,0,8,19,243,0,3,1,29,224,33,38,
+ 247,0,1,5,29,240,5,3,1,29,251,240,82,9,0,8,
+ 19,243,0,2,1,9,225,4,8,240,5,2,1,9,251,240,
+ 26,0,8,19,243,0,2,1,9,225,4,8,240,5,2,1,
+ 9,250,115,161,0,0,0,172,13,69,23,0,193,3,6,69,
+ 39,0,193,49,6,69,55,0,194,6,18,70,6,8,194,45,
+ 15,70,11,10,195,4,15,70,16,10,195,47,6,70,21,0,
+ 195,54,6,70,36,0,196,0,10,70,51,0,196,40,36,71,
+ 6,0,197,13,9,71,18,0,197,23,9,69,36,3,197,35,
+ 1,69,36,3,197,39,9,69,52,3,197,51,1,69,52,3,
+ 197,55,8,70,3,3,198,2,1,70,3,3,198,21,9,70,
+ 33,3,198,32,1,70,33,3,198,36,9,70,48,3,198,47,
+ 1,70,48,3,198,51,13,71,3,3,199,2,1,71,3,3,
+ 199,6,6,71,15,3,199,14,1,71,15,3,199,18,6,71,
+ 27,3,199,26,1,71,27,3,
};
diff --git a/contrib/tools/python3/Python/frozen_modules/runpy.h b/contrib/tools/python3/Python/frozen_modules/runpy.h
index b950789260a..c5d285cdd84 100644
--- a/contrib/tools/python3/Python/frozen_modules/runpy.h
+++ b/contrib/tools/python3/Python/frozen_modules/runpy.h
@@ -299,603 +299,620 @@ const unsigned char _Py_M__runpy[] = {
65,46,5,193,14,8,65,63,3,193,46,10,65,60,9,193,
56,7,65,63,3,193,63,10,66,28,7,99,2,0,0,0,
0,0,0,0,0,0,0,0,9,0,0,0,3,0,0,0,
- 243,232,4,0,0,149,0,85,0,82,1,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,83,1,53,
- 1,0,0,0,0,0,0,40,0,0,0,0,0,0,0,97,
- 8,0,0,85,1,34,0,83,2,53,1,0,0,0,0,0,
- 0,101,1,85,0,82,3,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,83,1,53,1,0,0,0,
- 0,0,0,117,3,0,0,110,2,32,0,110,3,85,2,40,
- 0,0,0,0,0,0,0,97,101,0,0,30,0,91,5,0,
- 0,0,0,0,0,0,0,85,2,53,1,0,0,0,0,0,
- 0,32,0,91,10,0,0,0,0,0,0,0,0,82,12,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,82,15,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,110,
- 5,85,5,98,55,0,0,91,17,0,0,0,0,0,0,0,
- 0,85,5,83,3,53,2,0,0,0,0,0,0,40,0,0,
- 0,0,0,0,0,100,38,0,0,83,4,83,5,75,9,74,
- 10,110,6,32,0,83,6,82,23,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,88,2,83,7,57,
- 2,110,7,85,6,34,0,91,25,0,0,0,0,0,0,0,
- 0,85,7,53,1,0,0,0,0,0,0,53,1,0,0,0,
- 0,0,0,32,0,30,0,91,26,0,0,0,0,0,0,0,
- 0,82,28,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,82,31,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
- 0,0,0,110,8,85,8,99,11,0,0,85,1,34,0,83,
- 14,85,0,45,6,0,0,53,1,0,0,0,0,0,0,101,
- 1,85,8,82,44,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,98,53,0,0,85,0,83,15,58,
- 88,0,0,100,22,0,0,85,0,82,39,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,83,16,53,
- 1,0,0,0,0,0,0,40,0,0,0,0,0,0,0,97,
- 8,0,0,85,1,34,0,83,17,53,1,0,0,0,0,0,
- 0,101,1,30,0,85,0,83,16,45,0,0,0,110,10,91,
- 47,0,0,0,0,0,0,0,0,88,161,53,2,0,0,0,
- 0,0,0,36,0,85,8,82,48,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,110,11,85,11,99,
- 11,0,0,85,1,34,0,83,20,85,0,45,6,0,0,53,
- 1,0,0,0,0,0,0,101,1,30,0,85,11,82,51,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,85,0,53,1,0,0,0,0,0,0,110,12,85,12,99,
- 11,0,0,85,1,34,0,83,21,85,0,45,6,0,0,53,
- 1,0,0,0,0,0,0,101,1,88,8,85,12,52,3,36,
- 0,33,0,91,6,0,0,0,0,0,0,0,0,7,0,97,
- 76,0,0,110,4,85,4,82,8,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,98,51,0,0,85,
- 4,82,8,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,85,2,58,119,0,0,97,36,0,0,85,
- 2,82,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,85,4,82,8,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,83,1,45,0,0,
- 0,53,1,0,0,0,0,0,0,40,0,0,0,0,0,0,
- 0,100,1,0,0,101,0,31,0,83,0,110,4,65,4,71,
- 1,78,88,83,0,110,4,65,4,102,1,102,0,61,3,31,
- 0,102,1,33,0,91,6,0,0,0,0,0,0,0,0,91,
- 32,0,0,0,0,0,0,0,0,91,34,0,0,0,0,0,
- 0,0,0,91,36,0,0,0,0,0,0,0,0,52,4,7,
- 0,97,89,0,0,110,9,83,8,110,7,85,0,82,39,0,
+ 243,42,5,0,0,149,0,91,1,0,0,0,0,0,0,0,
+ 0,85,1,91,2,0,0,0,0,0,0,0,0,53,2,0,
+ 0,0,0,0,0,40,0,0,0,0,0,0,0,97,4,0,
+ 0,83,1,85,0,48,1,79,1,48,0,110,2,85,0,82,
+ 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,83,2,53,1,0,0,0,0,0,0,40,0,0,
+ 0,0,0,0,0,97,8,0,0,85,1,34,0,83,21,48,
+ 0,85,2,68,1,54,1,101,1,85,0,82,7,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,
+ 2,53,1,0,0,0,0,0,0,117,3,0,0,110,3,32,
+ 0,110,4,85,3,40,0,0,0,0,0,0,0,97,101,0,
+ 0,30,0,91,9,0,0,0,0,0,0,0,0,85,3,53,
+ 1,0,0,0,0,0,0,32,0,91,12,0,0,0,0,0,
+ 0,0,0,82,14,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,82,17,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,85,0,53,1,0,
+ 0,0,0,0,0,110,6,85,6,98,55,0,0,91,19,0,
+ 0,0,0,0,0,0,0,85,6,83,3,53,2,0,0,0,
+ 0,0,0,40,0,0,0,0,0,0,0,100,38,0,0,83,
+ 4,83,5,75,10,74,11,110,7,32,0,83,6,82,25,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,83,9,53,1,0,0,0,0,0,0,40,0,0,0,0,
- 0,0,0,97,15,0,0,85,7,83,10,85,0,83,0,83,
- 11,4,0,14,0,83,12,85,0,14,0,83,13,51,5,45,
- 13,0,0,110,7,85,1,34,0,85,7,82,23,0,0,0,
+ 0,88,3,83,7,57,2,110,8,85,7,34,0,91,27,0,
+ 0,0,0,0,0,0,0,85,8,53,1,0,0,0,0,0,
+ 0,53,1,0,0,0,0,0,0,32,0,30,0,91,28,0,
+ 0,0,0,0,0,0,0,82,30,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,82,33,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,
- 0,91,41,0,0,0,0,0,0,0,0,85,9,53,1,0,
- 0,0,0,0,0,82,42,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,85,9,53,3,0,0,0,
- 0,0,0,53,1,0,0,0,0,0,0,85,9,101,2,83,
- 0,110,9,65,9,102,1,102,0,61,3,31,0,102,1,33,
- 0,85,1,7,0,97,42,0,0,110,4,85,0,91,10,0,
- 0,0,0,0,0,0,0,82,12,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,59,1,0,0,97,
- 1,0,0,101,0,85,1,34,0,85,4,60,1,14,0,83,
- 18,85,0,60,2,14,0,83,19,51,4,53,1,0,0,0,
- 0,0,0,101,1,83,0,110,4,65,4,102,1,102,0,61,
- 3,31,0,102,1,33,0,91,6,0,0,0,0,0,0,0,
- 0,7,0,97,23,0,0,110,4,85,1,34,0,91,23,0,
- 0,0,0,0,0,0,0,85,4,53,1,0,0,0,0,0,
- 0,53,1,0,0,0,0,0,0,85,4,101,2,83,0,110,
- 4,65,4,102,1,102,0,61,3,31,0,102,1,41,22,78,
- 218,1,46,122,35,82,101,108,97,116,105,118,101,32,109,111,
- 100,117,108,101,32,110,97,109,101,115,32,110,111,116,32,115,
- 117,112,112,111,114,116,101,100,218,8,95,95,112,97,116,104,
- 95,95,114,2,0,0,0,41,1,218,4,119,97,114,110,122,
- 154,123,109,111,100,95,110,97,109,101,33,114,125,32,102,111,
- 117,110,100,32,105,110,32,115,121,115,46,109,111,100,117,108,
- 101,115,32,97,102,116,101,114,32,105,109,112,111,114,116,32,
- 111,102,32,112,97,99,107,97,103,101,32,123,112,107,103,95,
- 110,97,109,101,33,114,125,44,32,98,117,116,32,112,114,105,
- 111,114,32,116,111,32,101,120,101,99,117,116,105,111,110,32,
- 111,102,32,123,109,111,100,95,110,97,109,101,33,114,125,59,
- 32,116,104,105,115,32,109,97,121,32,114,101,115,117,108,116,
- 32,105,110,32,117,110,112,114,101,100,105,99,116,97,98,108,
- 101,32,98,101,104,97,118,105,111,117,114,41,2,114,10,0,
- 0,0,114,71,0,0,0,122,58,69,114,114,111,114,32,119,
- 104,105,108,101,32,102,105,110,100,105,110,103,32,109,111,100,
- 117,108,101,32,115,112,101,99,105,102,105,99,97,116,105,111,
- 110,32,102,111,114,32,123,33,114,125,32,40,123,125,58,32,
- 123,125,41,122,3,46,112,121,122,13,46,32,84,114,121,32,
- 117,115,105,110,103,32,39,233,253,255,255,255,122,14,39,32,
- 105,110,115,116,101,97,100,32,111,102,32,39,122,21,39,32,
- 97,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,
- 109,101,46,122,18,78,111,32,109,111,100,117,108,101,32,110,
- 97,109,101,100,32,37,115,218,8,95,95,109,97,105,110,95,
- 95,122,9,46,95,95,109,97,105,110,95,95,122,37,67,97,
- 110,110,111,116,32,117,115,101,32,112,97,99,107,97,103,101,
- 32,97,115,32,95,95,109,97,105,110,95,95,32,109,111,100,
- 117,108,101,122,2,59,32,122,45,32,105,115,32,97,32,112,
- 97,99,107,97,103,101,32,97,110,100,32,99,97,110,110,111,
- 116,32,98,101,32,100,105,114,101,99,116,108,121,32,101,120,
- 101,99,117,116,101,100,122,48,37,114,32,105,115,32,97,32,
- 110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,
- 101,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,
- 101,120,101,99,117,116,101,100,122,31,78,111,32,99,111,100,
- 101,32,111,98,106,101,99,116,32,97,118,97,105,108,97,98,
- 108,101,32,102,111,114,32,37,115,41,26,218,10,115,116,97,
- 114,116,115,119,105,116,104,218,10,114,112,97,114,116,105,116,
- 105,111,110,218,10,95,95,105,109,112,111,114,116,95,95,218,
- 11,73,109,112,111,114,116,69,114,114,111,114,218,4,110,97,
- 109,101,114,22,0,0,0,114,23,0,0,0,218,3,103,101,
- 116,218,7,104,97,115,97,116,116,114,218,8,119,97,114,110,
- 105,110,103,115,114,84,0,0,0,218,6,102,111,114,109,97,
- 116,218,14,82,117,110,116,105,109,101,87,97,114,110,105,110,
- 103,218,9,105,109,112,111,114,116,108,105,98,218,4,117,116,
- 105,108,218,9,102,105,110,100,95,115,112,101,99,218,14,65,
- 116,116,114,105,98,117,116,101,69,114,114,111,114,218,9,84,
- 121,112,101,69,114,114,111,114,218,10,86,97,108,117,101,69,
- 114,114,111,114,218,8,101,110,100,115,119,105,116,104,218,4,
- 116,121,112,101,114,33,0,0,0,218,26,115,117,98,109,111,
- 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97,
- 116,105,111,110,115,218,19,95,103,101,116,95,109,111,100,117,
- 108,101,95,100,101,116,97,105,108,115,114,62,0,0,0,218,
- 8,103,101,116,95,99,111,100,101,41,13,114,10,0,0,0,
- 218,5,101,114,114,111,114,114,71,0,0,0,218,1,95,218,
- 1,101,218,8,101,120,105,115,116,105,110,103,114,84,0,0,
- 0,218,3,109,115,103,218,4,115,112,101,99,218,2,101,120,
- 218,13,112,107,103,95,109,97,105,110,95,110,97,109,101,114,
- 62,0,0,0,114,67,0,0,0,115,13,0,0,0,32,32,
- 32,32,32,32,32,32,32,32,32,32,32,114,16,0,0,0,
- 114,106,0,0,0,114,106,0,0,0,105,0,0,0,115,152,
- 2,0,0,128,0,216,7,15,215,7,26,209,7,26,152,51,
- 215,7,31,209,7,31,217,14,19,208,20,57,211,14,58,208,
- 8,58,216,21,29,215,21,40,209,21,40,168,19,211,21,45,
- 129,78,128,72,136,97,144,17,222,7,15,240,4,8,9,22,
- 220,12,22,144,120,212,12,32,244,18,0,20,23,151,59,145,
- 59,151,63,145,63,160,56,211,19,44,136,8,216,11,19,209,
- 11,31,172,7,176,8,184,42,215,40,69,209,40,69,221,12,
- 37,240,2,3,19,28,247,6,0,29,35,153,70,168,72,152,
- 70,208,28,72,240,7,0,13,16,241,8,0,13,17,148,30,
- 160,3,211,17,36,212,12,37,240,4,10,5,73,1,220,15,
- 24,143,126,137,126,215,15,39,209,15,39,168,8,211,15,49,
- 136,4,240,20,0,8,12,129,124,217,14,19,208,20,40,168,
- 56,209,20,51,211,14,52,208,8,52,216,7,11,215,7,38,
- 209,7,38,209,7,50,216,11,19,144,122,211,11,33,160,88,
- 215,37,54,209,37,54,176,123,215,37,67,209,37,67,217,18,
- 23,208,24,63,211,18,64,208,12,64,240,2,7,9,71,1,
- 216,28,36,160,123,209,28,50,136,77,220,19,38,160,125,211,
- 19,60,208,12,60,240,12,0,14,18,143,91,137,91,128,70,
- 216,7,13,129,126,217,14,19,208,20,70,216,67,75,241,3,
- 1,21,76,1,243,0,1,15,77,1,240,0,1,9,77,1,
- 240,4,3,5,38,216,15,21,143,127,137,127,152,120,211,15,
- 40,136,4,240,6,0,8,12,129,124,217,14,19,208,20,53,
- 184,8,209,20,64,211,14,65,208,8,65,216,11,19,152,52,
- 208,11,31,208,4,31,248,244,103,1,0,16,27,243,0,6,
- 9,22,240,8,0,16,17,143,118,137,118,137,126,160,33,167,
- 38,161,38,168,72,211,34,52,216,24,32,215,24,43,209,24,
- 43,168,65,175,70,169,70,176,83,169,76,215,24,57,209,24,
- 57,216,16,21,255,249,240,13,6,9,22,251,244,38,0,13,
- 24,156,30,172,25,180,74,208,11,63,243,0,8,5,73,1,
- 240,8,0,15,75,1,136,3,216,11,19,215,11,28,209,11,
- 28,152,85,215,11,35,209,11,35,216,12,15,144,109,160,72,
- 168,83,168,98,160,77,160,63,240,0,1,51,24,216,24,32,
- 144,122,208,33,54,240,3,1,21,56,241,0,1,13,57,136,
- 67,225,14,19,144,67,151,74,145,74,152,120,172,20,168,98,
- 171,24,215,41,58,209,41,58,184,66,211,20,63,211,14,64,
- 192,98,208,8,72,251,240,17,8,5,73,1,251,240,34,0,
- 16,21,243,0,4,9,71,1,216,15,23,156,115,159,123,153,
- 123,211,15,42,216,16,21,217,18,23,219,57,58,187,72,240,
- 3,1,25,70,1,243,0,1,19,71,1,240,0,1,13,71,
- 1,251,240,7,4,9,71,1,251,244,22,0,12,23,243,0,
- 1,5,38,217,14,19,148,70,152,49,147,73,211,14,30,160,
- 65,208,8,37,251,240,3,1,5,38,250,115,97,0,0,0,
- 188,11,69,14,0,194,33,31,70,39,0,196,0,15,72,29,
- 0,196,43,17,73,16,0,197,14,10,70,36,3,197,24,65,
- 1,70,31,3,198,31,5,70,36,3,198,39,26,72,26,3,
- 199,1,65,20,72,21,3,200,21,5,72,26,3,200,29,6,
- 73,13,3,200,35,37,73,8,3,201,8,5,73,13,3,201,
- 16,10,73,49,3,201,26,18,73,44,3,201,44,5,73,49,
- 3,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
- 0,0,0,0,0,0,243,24,0,0,0,149,0,92,0,114,
- 1,83,0,114,2,83,1,114,3,83,2,114,4,83,3,114,
- 5,103,4,41,5,218,6,95,69,114,114,111,114,233,166,0,
- 0,0,122,66,69,114,114,111,114,32,116,104,97,116,32,95,
- 114,117,110,95,109,111,100,117,108,101,95,97,115,95,109,97,
- 105,110,40,41,32,115,104,111,117,108,100,32,114,101,112,111,
- 114,116,32,119,105,116,104,111,117,116,32,97,32,116,114,97,
- 99,101,98,97,99,107,114,39,0,0,0,78,41,6,114,33,
- 0,0,0,114,34,0,0,0,114,35,0,0,0,114,36,0,
- 0,0,114,37,0,0,0,114,38,0,0,0,114,39,0,0,
- 0,114,19,0,0,0,114,16,0,0,0,114,117,0,0,0,
- 114,117,0,0,0,166,0,0,0,115,5,0,0,0,134,0,
- 220,4,76,114,19,0,0,0,114,117,0,0,0,99,2,0,
- 0,0,0,0,0,0,0,0,0,0,7,0,0,0,3,0,
- 0,0,243,148,1,0,0,149,0,30,0,85,1,40,0,0,
- 0,0,0,0,0,100,6,0,0,85,0,83,1,58,119,0,
- 0,97,20,0,0,91,1,0,0,0,0,0,0,0,0,85,
- 0,91,2,0,0,0,0,0,0,0,0,53,2,0,0,0,
- 0,0,0,117,3,0,0,112,2,110,3,79,19,91,5,0,
- 0,0,0,0,0,0,0,91,2,0,0,0,0,0,0,0,
- 0,53,1,0,0,0,0,0,0,117,3,0,0,112,2,110,
- 3,30,0,91,6,0,0,0,0,0,0,0,0,82,12,0,
+ 0,53,1,0,0,0,0,0,0,110,9,85,9,99,12,0,
+ 0,85,1,34,0,83,14,85,0,45,6,0,0,52,1,48,
+ 0,85,2,68,1,54,1,101,1,85,9,82,46,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,
+ 53,0,0,85,0,83,15,58,88,0,0,100,22,0,0,85,
+ 0,82,41,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,83,16,53,1,0,0,0,0,0,0,40,
+ 0,0,0,0,0,0,0,97,8,0,0,85,1,34,0,83,
+ 22,48,0,85,2,68,1,54,1,101,1,30,0,85,0,83,
+ 16,45,0,0,0,110,11,91,49,0,0,0,0,0,0,0,
+ 0,88,177,53,2,0,0,0,0,0,0,36,0,85,9,82,
+ 50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,110,12,85,12,99,12,0,0,85,1,34,0,83,
+ 19,85,0,45,6,0,0,52,1,48,0,85,2,68,1,54,
+ 1,101,1,30,0,85,12,82,53,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,85,0,53,1,0,
+ 0,0,0,0,0,110,13,85,13,99,12,0,0,85,1,34,
+ 0,83,20,85,0,45,6,0,0,52,1,48,0,85,2,68,
+ 1,54,1,101,1,88,9,85,13,52,3,36,0,33,0,91,
+ 2,0,0,0,0,0,0,0,0,7,0,97,76,0,0,110,
+ 5,85,5,82,10,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,98,51,0,0,85,5,82,10,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,83,1,5,0,0,0,82,14,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,110,6,85,1,40,
- 0,0,0,0,0,0,0,97,29,0,0,87,2,82,16,0,
+ 0,85,3,58,119,0,0,97,36,0,0,85,3,82,5,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,91,6,0,0,0,0,0,0,0,0,82,18,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,
- 4,39,0,0,0,91,21,0,0,0,0,0,0,0,0,87,
- 3,85,6,83,3,83,1,87,2,53,5,0,0,0,0,0,
- 0,36,0,33,0,91,2,0,0,0,0,0,0,0,0,7,
- 0,97,55,0,0,110,4,91,6,0,0,0,0,0,0,0,
- 0,82,8,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,60,1,14,0,83,2,85,4,60,1,14,
- 0,51,3,110,5,91,6,0,0,0,0,0,0,0,0,82,
- 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,34,0,85,5,53,1,0,0,0,0,0,0,32,
- 0,31,0,83,3,110,4,65,4,78,140,83,3,110,4,65,
- 4,102,1,102,0,61,3,31,0,102,1,41,5,97,130,1,
- 0,0,82,117,110,115,32,116,104,101,32,100,101,115,105,103,
- 110,97,116,101,100,32,109,111,100,117,108,101,32,105,110,32,
- 116,104,101,32,95,95,109,97,105,110,95,95,32,110,97,109,
- 101,115,112,97,99,101,10,10,78,111,116,101,32,116,104,97,
- 116,32,116,104,101,32,101,120,101,99,117,116,101,100,32,109,
- 111,100,117,108,101,32,119,105,108,108,32,104,97,118,101,32,
- 102,117,108,108,32,97,99,99,101,115,115,32,116,111,32,116,
- 104,101,10,95,95,109,97,105,110,95,95,32,110,97,109,101,
- 115,112,97,99,101,46,32,73,102,32,116,104,105,115,32,105,
- 115,32,110,111,116,32,100,101,115,105,114,97,98,108,101,44,
- 32,116,104,101,32,114,117,110,95,109,111,100,117,108,101,40,
- 41,10,102,117,110,99,116,105,111,110,32,115,104,111,117,108,
- 100,32,98,101,32,117,115,101,100,32,116,111,32,114,117,110,
- 32,116,104,101,32,109,111,100,117,108,101,32,99,111,100,101,
- 32,105,110,32,97,32,102,114,101,115,104,32,110,97,109,101,
- 115,112,97,99,101,46,10,10,65,116,32,116,104,101,32,118,
- 101,114,121,32,108,101,97,115,116,44,32,116,104,101,115,101,
- 32,118,97,114,105,97,98,108,101,115,32,105,110,32,95,95,
- 109,97,105,110,95,95,32,119,105,108,108,32,98,101,32,111,
- 118,101,114,119,114,105,116,116,101,110,58,10,32,32,32,32,
- 95,95,110,97,109,101,95,95,10,32,32,32,32,95,95,102,
- 105,108,101,95,95,10,32,32,32,32,95,95,99,97,99,104,
- 101,100,95,95,10,32,32,32,32,95,95,108,111,97,100,101,
- 114,95,95,10,32,32,32,32,95,95,112,97,99,107,97,103,
- 101,95,95,10,114,86,0,0,0,122,2,58,32,78,114,2,
- 0,0,0,41,11,114,106,0,0,0,114,117,0,0,0,218,
- 24,95,103,101,116,95,109,97,105,110,95,109,111,100,117,108,
- 101,95,100,101,116,97,105,108,115,114,22,0,0,0,218,10,
- 101,120,101,99,117,116,97,98,108,101,218,4,101,120,105,116,
- 114,23,0,0,0,114,76,0,0,0,114,63,0,0,0,114,
- 51,0,0,0,114,74,0,0,0,41,7,114,10,0,0,0,
- 218,10,97,108,116,101,114,95,97,114,103,118,114,70,0,0,
- 0,114,67,0,0,0,218,3,101,120,99,114,112,0,0,0,
- 218,12,109,97,105,110,95,103,108,111,98,97,108,115,115,7,
- 0,0,0,32,32,32,32,32,32,32,114,16,0,0,0,218,
- 19,95,114,117,110,95,109,111,100,117,108,101,95,97,115,95,
- 109,97,105,110,114,126,0,0,0,173,0,0,0,115,160,0,
- 0,0,128,0,240,28,7,5,22,222,11,21,152,24,160,90,
- 211,25,47,220,39,58,184,56,196,86,211,39,76,209,12,36,
- 136,72,161,4,228,39,63,196,6,211,39,71,209,12,36,136,
- 72,161,4,244,8,0,20,23,151,59,145,59,152,122,209,19,
- 42,215,19,51,209,19,51,128,76,222,7,17,216,22,30,151,
- 111,145,111,140,3,143,8,137,8,144,17,137,11,220,11,20,
- 144,84,152,60,168,20,216,21,31,160,24,243,3,1,12,43,
- 240,0,1,5,43,248,244,13,0,12,18,243,0,2,5,22,
- 220,26,29,159,46,156,46,170,35,208,14,46,136,3,220,8,
- 11,143,8,138,8,144,19,143,13,137,13,251,240,5,2,5,
- 22,250,115,28,0,0,0,130,32,66,6,0,163,18,66,6,
- 0,194,6,10,67,7,3,194,16,45,67,2,3,195,2,5,
- 67,7,3,99,4,0,0,0,0,0,0,0,0,0,0,0,
- 7,0,0,0,3,0,0,0,243,106,0,0,0,149,0,91,
- 1,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
- 0,0,0,117,3,0,0,112,4,110,5,85,2,99,2,0,
- 0,85,0,110,2,85,3,40,0,0,0,0,0,0,0,97,
- 12,0,0,91,3,0,0,0,0,0,0,0,0,88,81,88,
- 36,53,4,0,0,0,0,0,0,36,0,91,5,0,0,0,
- 0,0,0,0,0,85,5,48,0,88,18,85,4,53,5,0,
- 0,0,0,0,0,36,0,41,1,117,202,2,0,0,69,120,
- 101,99,117,116,101,32,97,32,109,111,100,117,108,101,39,115,
- 32,99,111,100,101,32,119,105,116,104,111,117,116,32,105,109,
- 112,111,114,116,105,110,103,32,105,116,46,10,10,109,111,100,
- 95,110,97,109,101,32,45,45,32,97,110,32,97,98,115,111,
- 108,117,116,101,32,109,111,100,117,108,101,32,110,97,109,101,
- 32,111,114,32,112,97,99,107,97,103,101,32,110,97,109,101,
- 46,10,10,79,112,116,105,111,110,97,108,32,97,114,103,117,
- 109,101,110,116,115,58,10,105,110,105,116,95,103,108,111,98,
- 97,108,115,32,45,45,32,100,105,99,116,105,111,110,97,114,
- 121,32,117,115,101,100,32,116,111,32,112,114,101,45,112,111,
- 112,117,108,97,116,101,32,116,104,101,32,109,111,100,117,108,
- 101,226,128,153,115,10,103,108,111,98,97,108,115,32,100,105,
- 99,116,105,111,110,97,114,121,32,98,101,102,111,114,101,32,
- 116,104,101,32,99,111,100,101,32,105,115,32,101,120,101,99,
- 117,116,101,100,46,10,10,114,117,110,95,110,97,109,101,32,
- 45,45,32,105,102,32,110,111,116,32,78,111,110,101,44,32,
- 116,104,105,115,32,119,105,108,108,32,98,101,32,117,115,101,
- 100,32,102,111,114,32,115,101,116,116,105,110,103,32,95,95,
- 110,97,109,101,95,95,59,10,111,116,104,101,114,119,105,115,
- 101,44,32,95,95,110,97,109,101,95,95,32,119,105,108,108,
- 32,98,101,32,115,101,116,32,116,111,32,109,111,100,95,110,
- 97,109,101,32,43,32,39,95,95,109,97,105,110,95,95,39,
- 32,105,102,32,116,104,101,10,110,97,109,101,100,32,109,111,
- 100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,
- 101,32,97,110,100,32,116,111,32,106,117,115,116,32,109,111,
- 100,95,110,97,109,101,32,111,116,104,101,114,119,105,115,101,
- 46,10,10,97,108,116,101,114,95,115,121,115,32,45,45,32,
- 105,102,32,84,114,117,101,44,32,115,121,115,46,97,114,103,
- 118,91,48,93,32,105,115,32,117,112,100,97,116,101,100,32,
- 119,105,116,104,32,116,104,101,32,118,97,108,117,101,32,111,
- 102,10,95,95,102,105,108,101,95,95,32,97,110,100,32,115,
- 121,115,46,109,111,100,117,108,101,115,91,95,95,110,97,109,
- 101,95,95,93,32,105,115,32,117,112,100,97,116,101,100,32,
- 119,105,116,104,32,97,32,116,101,109,112,111,114,97,114,121,
- 10,109,111,100,117,108,101,32,111,98,106,101,99,116,32,102,
- 111,114,32,116,104,101,32,109,111,100,117,108,101,32,98,101,
- 105,110,103,32,101,120,101,99,117,116,101,100,46,32,66,111,
- 116,104,32,97,114,101,10,114,101,115,116,111,114,101,100,32,
- 116,111,32,116,104,101,105,114,32,111,114,105,103,105,110,97,
- 108,32,118,97,108,117,101,115,32,98,101,102,111,114,101,32,
- 116,104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,
- 117,114,110,115,46,10,10,82,101,116,117,114,110,115,32,116,
- 104,101,32,114,101,115,117,108,116,105,110,103,32,109,111,100,
- 117,108,101,32,103,108,111,98,97,108,115,32,100,105,99,116,
- 105,111,110,97,114,121,46,10,41,3,114,106,0,0,0,114,
- 80,0,0,0,114,74,0,0,0,41,6,114,10,0,0,0,
- 114,69,0,0,0,218,8,114,117,110,95,110,97,109,101,218,
- 9,97,108,116,101,114,95,115,121,115,114,70,0,0,0,114,
- 67,0,0,0,115,6,0,0,0,32,32,32,32,32,32,114,
- 16,0,0,0,114,3,0,0,0,114,3,0,0,0,201,0,
- 0,0,115,65,0,0,0,128,0,244,42,0,32,51,176,56,
- 211,31,60,209,4,28,128,72,152,4,216,7,15,209,7,23,
- 216,19,27,136,8,222,7,16,220,15,31,160,4,176,72,211,
- 15,71,208,8,71,244,6,0,16,25,152,20,152,114,160,60,
- 184,56,211,15,68,208,8,68,114,19,0,0,0,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,8,0,0,0,3,0,
- 0,0,243,68,1,0,0,149,0,83,1,110,1,91,0,0,
- 0,0,0,0,0,0,0,82,2,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,85,1,5,0,0,
- 0,110,2,91,0,0,0,0,0,0,0,0,0,82,2,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,85,1,9,0,30,0,91,5,0,0,0,0,0,0,0,
- 0,85,1,53,1,0,0,0,0,0,0,85,2,91,0,0,
- 0,0,0,0,0,0,0,82,2,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,85,1,39,0,0,
- 0,36,0,33,0,91,6,0,0,0,0,0,0,0,0,7,
- 0,97,55,0,0,110,3,85,1,91,9,0,0,0,0,0,
- 0,0,0,85,3,53,1,0,0,0,0,0,0,59,0,0,
- 0,97,34,0,0,85,0,34,0,83,2,85,1,60,2,14,
- 0,83,3,91,0,0,0,0,0,0,0,0,0,82,10,0,
+ 0,85,5,82,10,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,83,2,45,0,0,0,53,1,0,
+ 0,0,0,0,0,40,0,0,0,0,0,0,0,100,1,0,
+ 0,101,0,31,0,83,0,110,5,65,5,71,1,78,91,83,
+ 0,110,5,65,5,102,1,102,0,61,3,31,0,102,1,33,
+ 0,91,2,0,0,0,0,0,0,0,0,91,34,0,0,0,
+ 0,0,0,0,0,91,36,0,0,0,0,0,0,0,0,91,
+ 38,0,0,0,0,0,0,0,0,52,4,7,0,97,90,0,
+ 0,110,10,83,8,110,8,85,0,82,41,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,83,9,53,
+ 1,0,0,0,0,0,0,40,0,0,0,0,0,0,0,97,
+ 15,0,0,85,8,83,10,85,0,83,0,83,11,4,0,14,
+ 0,83,12,85,0,14,0,83,13,51,5,45,13,0,0,110,
+ 8,85,1,34,0,85,8,82,25,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,85,0,91,43,0,
+ 0,0,0,0,0,0,0,85,10,53,1,0,0,0,0,0,
+ 0,82,44,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,85,10,53,3,0,0,0,0,0,0,52,
+ 1,48,0,85,2,68,1,54,1,85,10,101,2,83,0,110,
+ 10,65,10,102,1,102,0,61,3,31,0,102,1,33,0,85,
+ 1,7,0,97,43,0,0,110,5,85,0,91,12,0,0,0,
+ 0,0,0,0,0,82,14,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,59,1,0,0,97,1,0,
+ 0,101,0,85,1,34,0,85,5,60,1,14,0,83,17,85,
+ 0,60,2,14,0,83,18,51,4,52,1,48,0,85,2,68,
+ 1,54,1,101,1,83,0,110,5,65,5,102,1,102,0,61,
+ 3,31,0,102,1,33,0,91,2,0,0,0,0,0,0,0,
+ 0,7,0,97,24,0,0,110,5,85,1,34,0,91,25,0,
+ 0,0,0,0,0,0,0,85,5,53,1,0,0,0,0,0,
+ 0,52,1,48,0,85,2,68,1,54,1,85,5,101,2,83,
+ 0,110,5,65,5,102,1,102,0,61,3,31,0,102,1,41,
+ 23,78,218,4,110,97,109,101,218,1,46,218,8,95,95,112,
+ 97,116,104,95,95,114,2,0,0,0,41,1,218,4,119,97,
+ 114,110,122,154,123,109,111,100,95,110,97,109,101,33,114,125,
+ 32,102,111,117,110,100,32,105,110,32,115,121,115,46,109,111,
+ 100,117,108,101,115,32,97,102,116,101,114,32,105,109,112,111,
+ 114,116,32,111,102,32,112,97,99,107,97,103,101,32,123,112,
+ 107,103,95,110,97,109,101,33,114,125,44,32,98,117,116,32,
+ 112,114,105,111,114,32,116,111,32,101,120,101,99,117,116,105,
+ 111,110,32,111,102,32,123,109,111,100,95,110,97,109,101,33,
+ 114,125,59,32,116,104,105,115,32,109,97,121,32,114,101,115,
+ 117,108,116,32,105,110,32,117,110,112,114,101,100,105,99,116,
+ 97,98,108,101,32,98,101,104,97,118,105,111,117,114,41,2,
+ 114,10,0,0,0,114,71,0,0,0,122,58,69,114,114,111,
+ 114,32,119,104,105,108,101,32,102,105,110,100,105,110,103,32,
+ 109,111,100,117,108,101,32,115,112,101,99,105,102,105,99,97,
+ 116,105,111,110,32,102,111,114,32,123,33,114,125,32,40,123,
+ 125,58,32,123,125,41,122,3,46,112,121,122,13,46,32,84,
+ 114,121,32,117,115,105,110,103,32,39,233,253,255,255,255,122,
+ 14,39,32,105,110,115,116,101,97,100,32,111,102,32,39,122,
+ 21,39,32,97,115,32,116,104,101,32,109,111,100,117,108,101,
+ 32,110,97,109,101,46,122,18,78,111,32,109,111,100,117,108,
+ 101,32,110,97,109,101,100,32,37,115,218,8,95,95,109,97,
+ 105,110,95,95,122,9,46,95,95,109,97,105,110,95,95,122,
+ 2,59,32,122,45,32,105,115,32,97,32,112,97,99,107,97,
+ 103,101,32,97,110,100,32,99,97,110,110,111,116,32,98,101,
+ 32,100,105,114,101,99,116,108,121,32,101,120,101,99,117,116,
+ 101,100,122,48,37,114,32,105,115,32,97,32,110,97,109,101,
+ 115,112,97,99,101,32,112,97,99,107,97,103,101,32,97,110,
+ 100,32,99,97,110,110,111,116,32,98,101,32,101,120,101,99,
+ 117,116,101,100,122,31,78,111,32,99,111,100,101,32,111,98,
+ 106,101,99,116,32,97,118,97,105,108,97,98,108,101,32,102,
+ 111,114,32,37,115,41,1,122,35,82,101,108,97,116,105,118,
+ 101,32,109,111,100,117,108,101,32,110,97,109,101,115,32,110,
+ 111,116,32,115,117,112,112,111,114,116,101,100,41,1,122,37,
+ 67,97,110,110,111,116,32,117,115,101,32,112,97,99,107,97,
+ 103,101,32,97,115,32,95,95,109,97,105,110,95,95,32,109,
+ 111,100,117,108,101,41,27,218,10,105,115,115,117,98,99,108,
+ 97,115,115,218,11,73,109,112,111,114,116,69,114,114,111,114,
+ 218,10,115,116,97,114,116,115,119,105,116,104,218,10,114,112,
+ 97,114,116,105,116,105,111,110,218,10,95,95,105,109,112,111,
+ 114,116,95,95,114,82,0,0,0,114,22,0,0,0,114,23,
+ 0,0,0,218,3,103,101,116,218,7,104,97,115,97,116,116,
+ 114,218,8,119,97,114,110,105,110,103,115,114,85,0,0,0,
+ 218,6,102,111,114,109,97,116,218,14,82,117,110,116,105,109,
+ 101,87,97,114,110,105,110,103,218,9,105,109,112,111,114,116,
+ 108,105,98,218,4,117,116,105,108,218,9,102,105,110,100,95,
+ 115,112,101,99,218,14,65,116,116,114,105,98,117,116,101,69,
+ 114,114,111,114,218,9,84,121,112,101,69,114,114,111,114,218,
+ 10,86,97,108,117,101,69,114,114,111,114,218,8,101,110,100,
+ 115,119,105,116,104,218,4,116,121,112,101,114,33,0,0,0,
+ 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114,
+ 99,104,95,108,111,99,97,116,105,111,110,115,218,19,95,103,
+ 101,116,95,109,111,100,117,108,101,95,100,101,116,97,105,108,
+ 115,114,62,0,0,0,218,8,103,101,116,95,99,111,100,101,
+ 41,14,114,10,0,0,0,218,5,101,114,114,111,114,218,6,
+ 107,119,97,114,103,115,114,71,0,0,0,218,1,95,218,1,
+ 101,218,8,101,120,105,115,116,105,110,103,114,85,0,0,0,
+ 218,3,109,115,103,218,4,115,112,101,99,218,2,101,120,218,
+ 13,112,107,103,95,109,97,105,110,95,110,97,109,101,114,62,
+ 0,0,0,114,67,0,0,0,115,14,0,0,0,32,32,32,
+ 32,32,32,32,32,32,32,32,32,32,32,114,16,0,0,0,
+ 114,107,0,0,0,114,107,0,0,0,105,0,0,0,115,214,
+ 2,0,0,128,0,228,35,45,168,101,180,91,215,35,65,209,
+ 35,65,136,102,144,104,209,13,31,192,114,128,70,216,7,15,
+ 215,7,26,209,7,26,152,51,215,7,31,209,7,31,217,14,
+ 19,209,14,68,184,86,209,14,68,208,8,68,216,21,29,215,
+ 21,40,209,21,40,168,19,211,21,45,129,78,128,72,136,97,
+ 144,17,222,7,15,240,4,8,9,22,220,12,22,144,120,212,
+ 12,32,244,18,0,20,23,151,59,145,59,151,63,145,63,160,
+ 56,211,19,44,136,8,216,11,19,209,11,31,172,7,176,8,
+ 184,42,215,40,69,209,40,69,221,12,37,240,2,3,19,28,
+ 247,6,0,29,35,153,70,168,72,152,70,208,28,72,240,7,
+ 0,13,16,241,8,0,13,17,148,30,160,3,211,17,36,212,
+ 12,37,240,4,11,5,38,220,15,24,143,126,137,126,215,15,
+ 39,209,15,39,168,8,211,15,49,136,4,240,22,0,8,12,
+ 129,124,217,14,19,208,20,40,168,56,209,20,51,209,14,62,
+ 176,118,209,14,62,208,8,62,216,7,11,215,7,38,209,7,
+ 38,209,7,50,216,11,19,144,122,211,11,33,160,88,215,37,
+ 54,209,37,54,176,123,215,37,67,209,37,67,217,18,23,209,
+ 18,74,192,54,209,18,74,208,12,74,240,2,8,9,34,216,
+ 28,36,160,123,209,28,50,136,77,220,19,38,160,125,211,19,
+ 60,208,12,60,240,14,0,14,18,143,91,137,91,128,70,216,
+ 7,13,129,126,217,14,19,208,20,70,216,67,75,241,3,1,
+ 21,76,1,241,0,2,15,30,224,22,28,241,5,2,15,30,
+ 240,0,2,9,30,240,6,3,5,48,216,15,21,143,127,137,
+ 127,152,120,211,15,40,136,4,240,6,0,8,12,129,124,217,
+ 14,19,208,20,53,184,8,209,20,64,209,14,75,192,70,209,
+ 14,75,208,8,75,216,11,19,152,52,208,11,31,208,4,31,
+ 248,244,109,1,0,16,27,243,0,6,9,22,240,8,0,16,
+ 17,143,118,137,118,137,126,160,33,167,38,161,38,168,72,211,
+ 34,52,216,24,32,215,24,43,209,24,43,168,65,175,70,169,
+ 70,176,83,169,76,215,24,57,209,24,57,216,16,21,255,249,
+ 240,13,6,9,22,251,244,38,0,13,24,156,30,172,25,180,
+ 74,208,11,63,243,0,9,5,38,240,8,0,15,75,1,136,
+ 3,216,11,19,215,11,28,209,11,28,152,85,215,11,35,209,
+ 11,35,216,12,15,144,109,160,72,168,83,168,98,160,77,160,
+ 63,240,0,1,51,24,216,24,32,144,122,208,33,54,240,3,
+ 1,21,56,241,0,1,13,57,136,67,225,14,19,144,67,151,
+ 74,145,74,152,120,172,20,168,98,171,24,215,41,58,209,41,
+ 58,184,66,211,20,63,241,0,1,15,30,216,22,28,241,3,
+ 1,15,30,216,35,37,240,3,1,9,38,251,240,17,9,5,
+ 38,251,240,36,0,16,21,243,0,5,9,34,216,15,23,156,
+ 115,159,123,153,123,211,15,42,216,16,21,217,18,23,219,57,
+ 58,187,72,240,3,1,25,70,1,241,0,2,19,34,224,26,
+ 32,241,5,2,19,34,240,0,2,13,34,251,240,7,5,9,
+ 34,251,244,26,0,12,23,243,0,1,5,48,217,14,19,148,
+ 70,152,49,147,73,209,14,40,160,22,209,14,40,168,97,208,
+ 8,47,251,240,3,1,5,48,250,115,98,0,0,0,193,23,
+ 11,69,44,0,194,60,31,71,5,0,196,28,15,72,60,0,
+ 197,8,17,73,48,0,197,44,10,71,2,3,197,54,65,1,
+ 70,61,3,198,61,5,71,2,3,199,5,26,72,57,3,199,
+ 31,65,21,72,52,3,200,52,5,72,57,3,200,60,6,73,
+ 45,3,201,2,38,73,40,3,201,40,5,73,45,3,201,48,
+ 10,74,18,3,201,58,19,74,13,3,202,13,5,74,18,3,
+ 99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
+ 0,0,0,0,0,243,24,0,0,0,149,0,92,0,114,1,
+ 83,0,114,2,83,1,114,3,83,2,114,4,83,3,114,5,
+ 103,4,41,5,218,6,95,69,114,114,111,114,233,171,0,0,
+ 0,122,66,69,114,114,111,114,32,116,104,97,116,32,95,114,
+ 117,110,95,109,111,100,117,108,101,95,97,115,95,109,97,105,
+ 110,40,41,32,115,104,111,117,108,100,32,114,101,112,111,114,
+ 116,32,119,105,116,104,111,117,116,32,97,32,116,114,97,99,
+ 101,98,97,99,107,114,39,0,0,0,78,41,6,114,33,0,
+ 0,0,114,34,0,0,0,114,35,0,0,0,114,36,0,0,
+ 0,114,37,0,0,0,114,38,0,0,0,114,39,0,0,0,
+ 114,19,0,0,0,114,16,0,0,0,114,119,0,0,0,114,
+ 119,0,0,0,171,0,0,0,115,5,0,0,0,134,0,220,
+ 4,76,114,19,0,0,0,114,119,0,0,0,99,2,0,0,
+ 0,0,0,0,0,0,0,0,0,7,0,0,0,3,0,0,
+ 0,243,148,1,0,0,149,0,30,0,85,1,40,0,0,0,
+ 0,0,0,0,100,6,0,0,85,0,83,1,58,119,0,0,
+ 97,20,0,0,91,1,0,0,0,0,0,0,0,0,85,0,
+ 91,2,0,0,0,0,0,0,0,0,53,2,0,0,0,0,
+ 0,0,117,3,0,0,112,2,110,3,79,19,91,5,0,0,
+ 0,0,0,0,0,0,91,2,0,0,0,0,0,0,0,0,
+ 53,1,0,0,0,0,0,0,117,3,0,0,112,2,110,3,
+ 30,0,91,6,0,0,0,0,0,0,0,0,82,12,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,83,4,5,0,0,0,60,2,14,0,51,4,53,1,0,
- 0,0,0,0,0,85,3,101,2,101,0,83,0,110,3,65,
- 3,102,1,102,0,61,3,31,0,102,1,33,0,85,2,91,
- 0,0,0,0,0,0,0,0,0,82,2,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,85,1,39,
- 0,0,0,102,0,61,3,31,0,102,1,41,5,78,114,86,
- 0,0,0,122,11,99,97,110,39,116,32,102,105,110,100,32,
- 122,11,32,109,111,100,117,108,101,32,105,110,32,114,2,0,
- 0,0,41,6,114,22,0,0,0,114,23,0,0,0,114,106,
- 0,0,0,114,90,0,0,0,218,3,115,116,114,218,4,112,
- 97,116,104,41,4,114,108,0,0,0,218,9,109,97,105,110,
- 95,110,97,109,101,218,10,115,97,118,101,100,95,109,97,105,
- 110,114,124,0,0,0,115,4,0,0,0,32,32,32,32,114,
- 16,0,0,0,114,120,0,0,0,114,120,0,0,0,231,0,
- 0,0,115,149,0,0,0,128,0,240,10,0,17,27,128,73,
- 220,17,20,151,27,145,27,152,89,209,17,39,128,74,220,8,
- 11,143,11,137,11,144,73,208,8,30,240,2,8,5,44,220,
- 15,34,160,57,211,15,45,240,14,0,34,44,140,3,143,11,
- 137,11,144,73,210,8,30,248,244,13,0,12,23,243,0,4,
- 5,14,216,11,20,156,3,152,67,155,8,211,11,32,218,18,
- 23,219,31,40,172,35,175,40,169,40,176,49,171,43,240,3,
- 1,25,55,243,0,1,19,56,216,61,64,240,3,1,13,65,
- 1,224,8,13,251,240,9,4,5,14,251,240,12,0,34,44,
- 140,3,143,11,137,11,144,73,210,8,30,250,115,35,0,0,
- 0,168,10,65,6,0,193,6,10,66,7,3,193,16,50,66,
- 2,3,194,2,5,66,7,3,194,7,3,66,10,0,194,10,
- 21,66,31,3,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,6,0,0,0,3,0,0,0,243,98,1,0,0,149,0,
- 83,1,83,2,75,0,74,1,110,1,32,0,91,4,0,0,
- 0,0,0,0,0,0,82,6,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,82,9,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,0,
- 53,1,0,0,0,0,0,0,110,2,91,10,0,0,0,0,
- 0,0,0,0,82,12,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,34,0,85,2,53,1,0,0,
- 0,0,0,0,2,0,110,3,85,1,34,0,85,3,53,1,
- 0,0,0,0,0,0,110,4,83,0,83,0,83,0,53,2,
- 0,0,0,0,0,0,32,0,87,4,99,60,0,0,91,10,
- 0,0,0,0,0,0,0,0,82,12,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,34,0,85,2,
- 53,1,0,0,0,0,0,0,2,0,110,3,91,15,0,0,
- 0,0,0,0,0,0,85,3,82,17,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,53,0,0,0,
- 0,0,0,0,85,0,83,3,53,3,0,0,0,0,0,0,
- 110,4,83,0,83,0,83,0,53,2,0,0,0,0,0,0,
- 32,0,85,4,36,0,85,4,36,0,33,0,44,0,40,0,
- 0,0,0,0,0,0,100,1,0,0,102,2,32,0,31,0,
- 32,0,32,0,78,79,61,3,31,0,102,1,33,0,44,0,
- 40,0,0,0,0,0,0,0,100,1,0,0,102,2,32,0,
- 31,0,32,0,32,0,85,4,36,0,61,3,31,0,102,1,
- 41,4,78,114,2,0,0,0,41,1,218,9,114,101,97,100,
- 95,99,111,100,101,114,66,0,0,0,41,9,218,7,112,107,
- 103,117,116,105,108,114,136,0,0,0,218,2,111,115,114,132,
- 0,0,0,218,7,97,98,115,112,97,116,104,218,2,105,111,
- 218,9,111,112,101,110,95,99,111,100,101,218,7,99,111,109,
- 112,105,108,101,218,4,114,101,97,100,41,5,114,73,0,0,
- 0,114,136,0,0,0,218,9,99,111,100,101,95,112,97,116,
- 104,218,1,102,114,67,0,0,0,115,5,0,0,0,32,32,
- 32,32,32,114,16,0,0,0,218,19,95,103,101,116,95,99,
- 111,100,101,95,102,114,111,109,95,102,105,108,101,114,146,0,
- 0,0,250,0,0,0,115,127,0,0,0,128,0,229,4,33,
- 220,16,18,151,7,145,7,151,15,145,15,160,5,211,16,38,
- 128,73,220,9,11,143,28,138,28,144,105,212,9,32,160,65,
- 217,15,24,152,17,139,124,136,4,247,3,0,10,33,224,7,
- 11,129,124,228,13,15,143,92,138,92,152,41,212,13,36,168,
- 1,220,19,26,152,49,159,54,153,54,155,56,160,85,168,70,
- 211,19,51,136,68,247,3,0,14,37,224,11,15,128,75,136,
- 52,128,75,247,13,0,10,33,213,9,32,250,247,8,0,14,
- 37,212,13,36,224,11,15,128,75,250,115,23,0,0,0,188,
- 9,66,14,3,193,38,28,66,31,3,194,14,10,66,28,7,
- 194,31,10,66,46,7,99,3,0,0,0,0,0,0,0,0,
- 0,0,0,10,0,0,0,3,0,0,0,243,116,3,0,0,
- 149,0,85,2,99,2,0,0,83,2,110,2,85,2,82,1,
+ 83,1,5,0,0,0,82,14,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,110,6,85,1,40,0,
+ 0,0,0,0,0,0,97,29,0,0,87,2,82,16,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,83,3,53,1,0,0,0,0,0,0,83,4,5,0,
- 0,0,110,3,83,4,83,5,75,1,74,2,110,4,32,0,
- 85,4,34,0,85,0,53,1,0,0,0,0,0,0,110,5,
- 91,6,0,0,0,0,0,0,0,0,82,8,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,
- 85,0,53,1,0,0,0,0,0,0,110,0,91,11,0,0,
- 0,0,0,0,0,0,85,5,91,13,0,0,0,0,0,0,
- 0,0,83,1,53,1,0,0,0,0,0,0,53,2,0,0,
- 0,0,0,0,40,0,0,0,0,0,0,0,97,22,0,0,
- 91,15,0,0,0,0,0,0,0,0,85,0,53,1,0,0,
- 0,0,0,0,110,6,91,17,0,0,0,0,0,0,0,0,
- 88,97,85,2,88,48,83,6,57,5,36,0,91,18,0,0,
- 0,0,0,0,0,0,82,20,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,82,23,0,0,0,0,
+ 91,6,0,0,0,0,0,0,0,0,82,18,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,4,
- 85,0,53,2,0,0,0,0,0,0,32,0,30,0,91,25,
- 0,0,0,0,0,0,0,0,53,0,0,0,0,0,0,0,
- 117,3,0,0,112,120,110,6,91,27,0,0,0,0,0,0,
- 0,0,85,2,53,1,0,0,0,0,0,0,2,0,110,9,
- 91,29,0,0,0,0,0,0,0,0,85,0,53,1,0,0,
- 0,0,0,0,2,0,32,0,85,9,82,30,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,32,
+ 39,0,0,0,91,21,0,0,0,0,0,0,0,0,87,3,
+ 85,6,83,3,83,1,87,2,53,5,0,0,0,0,0,0,
+ 36,0,33,0,91,2,0,0,0,0,0,0,0,0,7,0,
+ 97,55,0,0,110,4,91,6,0,0,0,0,0,0,0,0,
+ 82,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,60,1,14,0,83,2,85,4,60,1,14,0,
+ 51,3,110,5,91,6,0,0,0,0,0,0,0,0,82,10,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,34,0,85,5,53,1,0,0,0,0,0,0,32,0,
+ 31,0,83,3,110,4,65,4,78,140,83,3,110,4,65,4,
+ 102,1,102,0,61,3,31,0,102,1,41,5,97,130,1,0,
+ 0,82,117,110,115,32,116,104,101,32,100,101,115,105,103,110,
+ 97,116,101,100,32,109,111,100,117,108,101,32,105,110,32,116,
+ 104,101,32,95,95,109,97,105,110,95,95,32,110,97,109,101,
+ 115,112,97,99,101,10,10,78,111,116,101,32,116,104,97,116,
+ 32,116,104,101,32,101,120,101,99,117,116,101,100,32,109,111,
+ 100,117,108,101,32,119,105,108,108,32,104,97,118,101,32,102,
+ 117,108,108,32,97,99,99,101,115,115,32,116,111,32,116,104,
+ 101,10,95,95,109,97,105,110,95,95,32,110,97,109,101,115,
+ 112,97,99,101,46,32,73,102,32,116,104,105,115,32,105,115,
+ 32,110,111,116,32,100,101,115,105,114,97,98,108,101,44,32,
+ 116,104,101,32,114,117,110,95,109,111,100,117,108,101,40,41,
+ 10,102,117,110,99,116,105,111,110,32,115,104,111,117,108,100,
+ 32,98,101,32,117,115,101,100,32,116,111,32,114,117,110,32,
+ 116,104,101,32,109,111,100,117,108,101,32,99,111,100,101,32,
+ 105,110,32,97,32,102,114,101,115,104,32,110,97,109,101,115,
+ 112,97,99,101,46,10,10,65,116,32,116,104,101,32,118,101,
+ 114,121,32,108,101,97,115,116,44,32,116,104,101,115,101,32,
+ 118,97,114,105,97,98,108,101,115,32,105,110,32,95,95,109,
+ 97,105,110,95,95,32,119,105,108,108,32,98,101,32,111,118,
+ 101,114,119,114,105,116,116,101,110,58,10,32,32,32,32,95,
+ 95,110,97,109,101,95,95,10,32,32,32,32,95,95,102,105,
+ 108,101,95,95,10,32,32,32,32,95,95,99,97,99,104,101,
+ 100,95,95,10,32,32,32,32,95,95,108,111,97,100,101,114,
+ 95,95,10,32,32,32,32,95,95,112,97,99,107,97,103,101,
+ 95,95,10,114,87,0,0,0,122,2,58,32,78,114,2,0,
+ 0,0,41,11,114,107,0,0,0,114,119,0,0,0,218,24,
+ 95,103,101,116,95,109,97,105,110,95,109,111,100,117,108,101,
+ 95,100,101,116,97,105,108,115,114,22,0,0,0,218,10,101,
+ 120,101,99,117,116,97,98,108,101,218,4,101,120,105,116,114,
+ 23,0,0,0,114,76,0,0,0,114,63,0,0,0,114,51,
+ 0,0,0,114,74,0,0,0,41,7,114,10,0,0,0,218,
+ 10,97,108,116,101,114,95,97,114,103,118,114,70,0,0,0,
+ 114,67,0,0,0,218,3,101,120,99,114,114,0,0,0,218,
+ 12,109,97,105,110,95,103,108,111,98,97,108,115,115,7,0,
+ 0,0,32,32,32,32,32,32,32,114,16,0,0,0,218,19,
+ 95,114,117,110,95,109,111,100,117,108,101,95,97,115,95,109,
+ 97,105,110,114,128,0,0,0,178,0,0,0,115,160,0,0,
+ 0,128,0,240,28,7,5,22,222,11,21,152,24,160,90,211,
+ 25,47,220,39,58,184,56,196,86,211,39,76,209,12,36,136,
+ 72,161,4,228,39,63,196,6,211,39,71,209,12,36,136,72,
+ 161,4,244,8,0,20,23,151,59,145,59,152,122,209,19,42,
+ 215,19,51,209,19,51,128,76,222,7,17,216,22,30,151,111,
+ 145,111,140,3,143,8,137,8,144,17,137,11,220,11,20,144,
+ 84,152,60,168,20,216,21,31,160,24,243,3,1,12,43,240,
+ 0,1,5,43,248,244,13,0,12,18,243,0,2,5,22,220,
+ 26,29,159,46,156,46,170,35,208,14,46,136,3,220,8,11,
+ 143,8,138,8,144,19,143,13,137,13,251,240,5,2,5,22,
+ 250,115,28,0,0,0,130,32,66,6,0,163,18,66,6,0,
+ 194,6,10,67,7,3,194,16,45,67,2,3,195,2,5,67,
+ 7,3,99,4,0,0,0,0,0,0,0,0,0,0,0,7,
+ 0,0,0,3,0,0,0,243,106,0,0,0,149,0,91,1,
+ 0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,
+ 0,0,117,3,0,0,112,4,110,5,85,2,99,2,0,0,
+ 85,0,110,2,85,3,40,0,0,0,0,0,0,0,97,12,
+ 0,0,91,3,0,0,0,0,0,0,0,0,88,81,88,36,
+ 53,4,0,0,0,0,0,0,36,0,91,5,0,0,0,0,
+ 0,0,0,0,85,5,48,0,88,18,85,4,53,5,0,0,
+ 0,0,0,0,36,0,41,1,117,202,2,0,0,69,120,101,
+ 99,117,116,101,32,97,32,109,111,100,117,108,101,39,115,32,
+ 99,111,100,101,32,119,105,116,104,111,117,116,32,105,109,112,
+ 111,114,116,105,110,103,32,105,116,46,10,10,109,111,100,95,
+ 110,97,109,101,32,45,45,32,97,110,32,97,98,115,111,108,
+ 117,116,101,32,109,111,100,117,108,101,32,110,97,109,101,32,
+ 111,114,32,112,97,99,107,97,103,101,32,110,97,109,101,46,
+ 10,10,79,112,116,105,111,110,97,108,32,97,114,103,117,109,
+ 101,110,116,115,58,10,105,110,105,116,95,103,108,111,98,97,
+ 108,115,32,45,45,32,100,105,99,116,105,111,110,97,114,121,
+ 32,117,115,101,100,32,116,111,32,112,114,101,45,112,111,112,
+ 117,108,97,116,101,32,116,104,101,32,109,111,100,117,108,101,
+ 226,128,153,115,10,103,108,111,98,97,108,115,32,100,105,99,
+ 116,105,111,110,97,114,121,32,98,101,102,111,114,101,32,116,
+ 104,101,32,99,111,100,101,32,105,115,32,101,120,101,99,117,
+ 116,101,100,46,10,10,114,117,110,95,110,97,109,101,32,45,
+ 45,32,105,102,32,110,111,116,32,78,111,110,101,44,32,116,
+ 104,105,115,32,119,105,108,108,32,98,101,32,117,115,101,100,
+ 32,102,111,114,32,115,101,116,116,105,110,103,32,95,95,110,
+ 97,109,101,95,95,59,10,111,116,104,101,114,119,105,115,101,
+ 44,32,95,95,110,97,109,101,95,95,32,119,105,108,108,32,
+ 98,101,32,115,101,116,32,116,111,32,109,111,100,95,110,97,
+ 109,101,32,43,32,39,95,95,109,97,105,110,95,95,39,32,
+ 105,102,32,116,104,101,10,110,97,109,101,100,32,109,111,100,
+ 117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,
+ 32,97,110,100,32,116,111,32,106,117,115,116,32,109,111,100,
+ 95,110,97,109,101,32,111,116,104,101,114,119,105,115,101,46,
+ 10,10,97,108,116,101,114,95,115,121,115,32,45,45,32,105,
+ 102,32,84,114,117,101,44,32,115,121,115,46,97,114,103,118,
+ 91,48,93,32,105,115,32,117,112,100,97,116,101,100,32,119,
+ 105,116,104,32,116,104,101,32,118,97,108,117,101,32,111,102,
+ 10,95,95,102,105,108,101,95,95,32,97,110,100,32,115,121,
+ 115,46,109,111,100,117,108,101,115,91,95,95,110,97,109,101,
+ 95,95,93,32,105,115,32,117,112,100,97,116,101,100,32,119,
+ 105,116,104,32,97,32,116,101,109,112,111,114,97,114,121,10,
+ 109,111,100,117,108,101,32,111,98,106,101,99,116,32,102,111,
+ 114,32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,
+ 110,103,32,101,120,101,99,117,116,101,100,46,32,66,111,116,
+ 104,32,97,114,101,10,114,101,115,116,111,114,101,100,32,116,
+ 111,32,116,104,101,105,114,32,111,114,105,103,105,110,97,108,
+ 32,118,97,108,117,101,115,32,98,101,102,111,114,101,32,116,
+ 104,101,32,102,117,110,99,116,105,111,110,32,114,101,116,117,
+ 114,110,115,46,10,10,82,101,116,117,114,110,115,32,116,104,
+ 101,32,114,101,115,117,108,116,105,110,103,32,109,111,100,117,
+ 108,101,32,103,108,111,98,97,108,115,32,100,105,99,116,105,
+ 111,110,97,114,121,46,10,41,3,114,107,0,0,0,114,80,
+ 0,0,0,114,74,0,0,0,41,6,114,10,0,0,0,114,
+ 69,0,0,0,218,8,114,117,110,95,110,97,109,101,218,9,
+ 97,108,116,101,114,95,115,121,115,114,70,0,0,0,114,67,
+ 0,0,0,115,6,0,0,0,32,32,32,32,32,32,114,16,
+ 0,0,0,114,3,0,0,0,114,3,0,0,0,206,0,0,
+ 0,115,65,0,0,0,128,0,244,42,0,32,51,176,56,211,
+ 31,60,209,4,28,128,72,152,4,216,7,15,209,7,23,216,
+ 19,27,136,8,222,7,16,220,15,31,160,4,176,72,211,15,
+ 71,208,8,71,244,6,0,16,25,152,20,152,114,160,60,184,
+ 56,211,15,68,208,8,68,114,19,0,0,0,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,8,0,0,0,3,0,0,
+ 0,243,124,1,0,0,149,0,83,1,110,1,91,1,0,0,
+ 0,0,0,0,0,0,85,0,91,2,0,0,0,0,0,0,
+ 0,0,53,2,0,0,0,0,0,0,40,0,0,0,0,0,
+ 0,0,97,4,0,0,83,2,85,1,48,1,79,1,48,0,
+ 110,2,91,4,0,0,0,0,0,0,0,0,82,6,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,110,10,91,35,0,0,0,0,0,0,0,0,88,106,
- 85,1,88,40,85,3,53,6,0,0,0,0,0,0,82,37,
+ 85,1,5,0,0,0,110,3,91,4,0,0,0,0,0,0,
+ 0,0,82,6,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,85,1,9,0,30,0,91,9,0,0,
+ 0,0,0,0,0,0,85,1,53,1,0,0,0,0,0,0,
+ 85,3,91,4,0,0,0,0,0,0,0,0,82,6,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,53,0,0,0,0,0,0,0,115,2,83,1,83,1,
- 83,1,53,2,0,0,0,0,0,0,32,0,115,2,83,1,
- 83,1,83,1,53,2,0,0,0,0,0,0,32,0,30,0,
- 91,18,0,0,0,0,0,0,0,0,82,20,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,39,
+ 85,1,39,0,0,0,36,0,33,0,91,2,0,0,0,0,
+ 0,0,0,0,7,0,97,56,0,0,110,4,85,1,91,11,
+ 0,0,0,0,0,0,0,0,85,4,53,1,0,0,0,0,
+ 0,0,59,0,0,0,97,35,0,0,85,0,34,0,83,3,
+ 85,1,60,2,14,0,83,4,91,4,0,0,0,0,0,0,
+ 0,0,82,12,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,83,5,5,0,0,0,60,2,14,0,
+ 51,4,52,1,48,0,85,2,68,1,54,1,85,4,101,2,
+ 101,0,83,0,110,4,65,4,102,1,102,0,61,3,31,0,
+ 102,1,33,0,85,3,91,4,0,0,0,0,0,0,0,0,
+ 82,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,85,1,39,0,0,0,102,0,61,3,31,0,
+ 102,1,41,6,78,114,87,0,0,0,114,82,0,0,0,122,
+ 11,99,97,110,39,116,32,102,105,110,100,32,122,11,32,109,
+ 111,100,117,108,101,32,105,110,32,114,2,0,0,0,41,7,
+ 114,88,0,0,0,114,89,0,0,0,114,22,0,0,0,114,
+ 23,0,0,0,114,107,0,0,0,218,3,115,116,114,218,4,
+ 112,97,116,104,41,5,114,109,0,0,0,218,9,109,97,105,
+ 110,95,110,97,109,101,114,110,0,0,0,218,10,115,97,118,
+ 101,100,95,109,97,105,110,114,126,0,0,0,115,5,0,0,
+ 0,32,32,32,32,32,114,16,0,0,0,114,122,0,0,0,
+ 114,122,0,0,0,236,0,0,0,115,182,0,0,0,128,0,
+ 240,10,0,17,27,128,73,220,36,46,168,117,180,107,215,36,
+ 66,209,36,66,136,102,144,105,209,13,32,200,2,128,70,220,
+ 17,20,151,27,145,27,152,89,209,17,39,128,74,220,8,11,
+ 143,11,137,11,144,73,208,8,30,240,2,9,5,44,220,15,
+ 34,160,57,211,15,45,240,16,0,34,44,140,3,143,11,137,
+ 11,144,73,210,8,30,248,244,15,0,12,23,243,0,5,5,
+ 14,216,11,20,156,3,152,67,155,8,211,11,32,218,18,23,
+ 219,31,40,172,35,175,40,169,40,176,49,171,43,240,3,1,
+ 25,55,241,0,2,19,34,224,26,32,241,5,2,19,34,224,
+ 39,42,240,5,2,13,43,240,6,0,9,14,251,240,11,5,
+ 5,14,251,240,14,0,34,44,140,3,143,11,137,11,144,73,
+ 210,8,30,250,115,36,0,0,0,193,3,10,65,33,0,193,
+ 33,10,66,35,3,193,43,51,66,30,3,194,30,5,66,35,
+ 3,194,35,3,66,38,0,194,38,21,66,59,3,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,6,0,0,0,3,0,
+ 0,0,243,98,1,0,0,149,0,83,1,83,2,75,0,74,
+ 1,110,1,32,0,91,4,0,0,0,0,0,0,0,0,82,
+ 6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,82,9,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,85,0,53,1,0,0,0,0,0,
+ 0,110,2,91,10,0,0,0,0,0,0,0,0,82,12,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,85,0,53,1,0,0,0,0,0,0,32,0,36,0,
- 33,0,91,40,0,0,0,0,0,0,0,0,7,0,97,3,
- 0,0,32,0,31,0,36,0,102,0,61,3,31,0,102,1,
- 33,0,44,0,40,0,0,0,0,0,0,0,100,1,0,0,
- 102,2,32,0,31,0,32,0,32,0,79,3,61,3,31,0,
- 102,1,30,0,83,1,83,1,83,1,53,2,0,0,0,0,
- 0,0,32,0,79,17,33,0,44,0,40,0,0,0,0,0,
- 0,0,100,1,0,0,102,2,32,0,31,0,32,0,32,0,
- 79,3,61,3,31,0,102,1,30,0,91,18,0,0,0,0,
- 0,0,0,0,82,20,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,82,39,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,85,0,53,1,
- 0,0,0,0,0,0,32,0,103,1,33,0,91,40,0,0,
- 0,0,0,0,0,0,7,0,97,3,0,0,32,0,31,0,
- 103,1,102,0,61,3,31,0,102,1,33,0,30,0,91,18,
- 0,0,0,0,0,0,0,0,82,20,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,82,39,0,0,
+ 0,34,0,85,2,53,1,0,0,0,0,0,0,2,0,110,
+ 3,85,1,34,0,85,3,53,1,0,0,0,0,0,0,110,
+ 4,83,0,83,0,83,0,53,2,0,0,0,0,0,0,32,
+ 0,87,4,99,60,0,0,91,10,0,0,0,0,0,0,0,
+ 0,82,12,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,34,0,85,2,53,1,0,0,0,0,0,
+ 0,2,0,110,3,91,15,0,0,0,0,0,0,0,0,85,
+ 3,82,17,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,53,0,0,0,0,0,0,0,85,0,83,
+ 3,53,3,0,0,0,0,0,0,110,4,83,0,83,0,83,
+ 0,53,2,0,0,0,0,0,0,32,0,85,4,36,0,85,
+ 4,36,0,33,0,44,0,40,0,0,0,0,0,0,0,100,
+ 1,0,0,102,2,32,0,31,0,32,0,32,0,78,79,61,
+ 3,31,0,102,1,33,0,44,0,40,0,0,0,0,0,0,
+ 0,100,1,0,0,102,2,32,0,31,0,32,0,32,0,85,
+ 4,36,0,61,3,31,0,102,1,41,4,78,114,2,0,0,
+ 0,41,1,218,9,114,101,97,100,95,99,111,100,101,114,66,
+ 0,0,0,41,9,218,7,112,107,103,117,116,105,108,114,138,
+ 0,0,0,218,2,111,115,114,134,0,0,0,218,7,97,98,
+ 115,112,97,116,104,218,2,105,111,218,9,111,112,101,110,95,
+ 99,111,100,101,218,7,99,111,109,112,105,108,101,218,4,114,
+ 101,97,100,41,5,114,73,0,0,0,114,138,0,0,0,218,
+ 9,99,111,100,101,95,112,97,116,104,218,1,102,114,67,0,
+ 0,0,115,5,0,0,0,32,32,32,32,32,114,16,0,0,
+ 0,218,19,95,103,101,116,95,99,111,100,101,95,102,114,111,
+ 109,95,102,105,108,101,114,148,0,0,0,1,1,0,0,115,
+ 127,0,0,0,128,0,229,4,33,220,16,18,151,7,145,7,
+ 151,15,145,15,160,5,211,16,38,128,73,220,9,11,143,28,
+ 138,28,144,105,212,9,32,160,65,217,15,24,152,17,139,124,
+ 136,4,247,3,0,10,33,224,7,11,129,124,228,13,15,143,
+ 92,138,92,152,41,212,13,36,168,1,220,19,26,152,49,159,
+ 54,153,54,155,56,160,85,168,70,211,19,51,136,68,247,3,
+ 0,14,37,224,11,15,128,75,136,52,128,75,247,13,0,10,
+ 33,213,9,32,250,247,8,0,14,37,212,13,36,224,11,15,
+ 128,75,250,115,23,0,0,0,188,9,66,14,3,193,38,28,
+ 66,31,3,194,14,10,66,28,7,194,31,10,66,46,7,99,
+ 3,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,
+ 3,0,0,0,243,116,3,0,0,149,0,85,2,99,2,0,
+ 0,83,2,110,2,85,2,82,1,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,83,3,53,1,0,
+ 0,0,0,0,0,83,4,5,0,0,0,110,3,83,4,83,
+ 5,75,1,74,2,110,4,32,0,85,4,34,0,85,0,53,
+ 1,0,0,0,0,0,0,110,5,91,6,0,0,0,0,0,
+ 0,0,0,82,8,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,34,0,85,0,53,1,0,0,0,
+ 0,0,0,110,0,91,11,0,0,0,0,0,0,0,0,85,
+ 5,91,13,0,0,0,0,0,0,0,0,83,1,53,1,0,
+ 0,0,0,0,0,53,2,0,0,0,0,0,0,40,0,0,
+ 0,0,0,0,0,97,22,0,0,91,15,0,0,0,0,0,
+ 0,0,0,85,0,53,1,0,0,0,0,0,0,110,6,91,
+ 17,0,0,0,0,0,0,0,0,88,97,85,2,88,48,83,
+ 6,57,5,36,0,91,18,0,0,0,0,0,0,0,0,82,
+ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,82,23,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,83,4,85,0,53,2,0,0,0,
+ 0,0,0,32,0,30,0,91,25,0,0,0,0,0,0,0,
+ 0,53,0,0,0,0,0,0,0,117,3,0,0,112,120,110,
+ 6,91,27,0,0,0,0,0,0,0,0,85,2,53,1,0,
+ 0,0,0,0,0,2,0,110,9,91,29,0,0,0,0,0,
+ 0,0,0,85,0,53,1,0,0,0,0,0,0,2,0,32,
+ 0,85,9,82,30,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,82,32,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,110,10,91,35,0,
+ 0,0,0,0,0,0,0,88,106,85,1,88,40,85,3,53,
+ 6,0,0,0,0,0,0,82,37,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,53,0,0,0,0,
+ 0,0,0,115,2,83,1,83,1,83,1,53,2,0,0,0,
+ 0,0,0,32,0,115,2,83,1,83,1,83,1,53,2,0,
+ 0,0,0,0,0,32,0,30,0,91,18,0,0,0,0,0,
+ 0,0,0,82,20,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,82,39,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,85,0,53,1,0,
+ 0,0,0,0,0,32,0,36,0,33,0,91,40,0,0,0,
+ 0,0,0,0,0,7,0,97,3,0,0,32,0,31,0,36,
+ 0,102,0,61,3,31,0,102,1,33,0,44,0,40,0,0,
+ 0,0,0,0,0,100,1,0,0,102,2,32,0,31,0,32,
+ 0,32,0,79,3,61,3,31,0,102,1,30,0,83,1,83,
+ 1,83,1,53,2,0,0,0,0,0,0,32,0,79,17,33,
+ 0,44,0,40,0,0,0,0,0,0,0,100,1,0,0,102,
+ 2,32,0,31,0,32,0,32,0,79,3,61,3,31,0,102,
+ 1,30,0,91,18,0,0,0,0,0,0,0,0,82,20,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 85,0,53,1,0,0,0,0,0,0,32,0,102,0,33,0,
- 91,40,0,0,0,0,0,0,0,0,7,0,97,3,0,0,
- 32,0,31,0,102,0,102,0,61,3,31,0,102,1,61,3,
- 31,0,102,1,41,7,117,216,1,0,0,69,120,101,99,117,
- 116,101,32,99,111,100,101,32,108,111,99,97,116,101,100,32,
- 97,116,32,116,104,101,32,115,112,101,99,105,102,105,101,100,
- 32,102,105,108,101,115,121,115,116,101,109,32,108,111,99,97,
- 116,105,111,110,46,10,10,112,97,116,104,95,110,97,109,101,
- 32,45,45,32,102,105,108,101,115,121,115,116,101,109,32,108,
- 111,99,97,116,105,111,110,32,111,102,32,97,32,80,121,116,
- 104,111,110,32,115,99,114,105,112,116,44,32,122,105,112,102,
- 105,108,101,44,10,111,114,32,100,105,114,101,99,116,111,114,
- 121,32,99,111,110,116,97,105,110,105,110,103,32,97,32,116,
- 111,112,32,108,101,118,101,108,32,95,95,109,97,105,110,95,
- 95,46,112,121,32,115,99,114,105,112,116,46,10,10,79,112,
- 116,105,111,110,97,108,32,97,114,103,117,109,101,110,116,115,
- 58,10,105,110,105,116,95,103,108,111,98,97,108,115,32,45,
- 45,32,100,105,99,116,105,111,110,97,114,121,32,117,115,101,
- 100,32,116,111,32,112,114,101,45,112,111,112,117,108,97,116,
- 101,32,116,104,101,32,109,111,100,117,108,101,226,128,153,115,
- 10,103,108,111,98,97,108,115,32,100,105,99,116,105,111,110,
- 97,114,121,32,98,101,102,111,114,101,32,116,104,101,32,99,
- 111,100,101,32,105,115,32,101,120,101,99,117,116,101,100,46,
- 10,10,114,117,110,95,110,97,109,101,32,45,45,32,105,102,
- 32,110,111,116,32,78,111,110,101,44,32,116,104,105,115,32,
- 119,105,108,108,32,98,101,32,117,115,101,100,32,116,111,32,
- 115,101,116,32,95,95,110,97,109,101,95,95,59,10,111,116,
- 104,101,114,119,105,115,101,44,32,39,60,114,117,110,95,112,
- 97,116,104,62,39,32,119,105,108,108,32,98,101,32,117,115,
- 101,100,32,102,111,114,32,95,95,110,97,109,101,95,95,46,
- 10,10,82,101,116,117,114,110,115,32,116,104,101,32,114,101,
- 115,117,108,116,105,110,103,32,109,111,100,117,108,101,32,103,
- 108,111,98,97,108,115,32,100,105,99,116,105,111,110,97,114,
- 121,46,10,78,122,10,60,114,117,110,95,112,97,116,104,62,
- 114,82,0,0,0,114,2,0,0,0,41,1,218,12,103,101,
- 116,95,105,109,112,111,114,116,101,114,41,2,114,71,0,0,
- 0,114,72,0,0,0,41,21,114,88,0,0,0,114,137,0,
- 0,0,114,148,0,0,0,114,138,0,0,0,218,8,102,115,
- 100,101,99,111,100,101,218,10,105,115,105,110,115,116,97,110,
- 99,101,114,104,0,0,0,114,146,0,0,0,114,80,0,0,
- 0,114,22,0,0,0,114,132,0,0,0,218,6,105,110,115,
- 101,114,116,114,120,0,0,0,114,6,0,0,0,114,41,0,
- 0,0,114,12,0,0,0,114,76,0,0,0,114,74,0,0,
- 0,114,77,0,0,0,218,6,114,101,109,111,118,101,114,102,
- 0,0,0,41,11,218,9,112,97,116,104,95,110,97,109,101,
- 114,69,0,0,0,114,128,0,0,0,114,71,0,0,0,114,
- 148,0,0,0,218,8,105,109,112,111,114,116,101,114,114,67,
- 0,0,0,114,10,0,0,0,114,70,0,0,0,114,78,0,
- 0,0,114,79,0,0,0,115,11,0,0,0,32,32,32,32,
- 32,32,32,32,32,32,32,114,16,0,0,0,114,4,0,0,
- 0,114,4,0,0,0,6,1,0,0,115,116,1,0,0,128,
- 0,240,30,0,8,16,209,7,23,216,19,31,136,8,216,15,
- 23,215,15,34,209,15,34,160,51,211,15,39,168,1,209,15,
- 42,128,72,221,4,36,217,15,27,152,73,211,15,38,128,72,
- 220,16,18,151,11,146,11,152,73,211,16,38,128,73,220,7,
- 17,144,40,156,68,160,20,155,74,215,7,39,209,7,39,244,
- 6,0,16,35,160,57,211,15,45,136,4,220,15,31,160,4,
- 176,72,216,41,49,241,3,1,16,74,1,240,0,1,9,74,
- 1,244,10,0,9,12,143,8,137,8,143,15,137,15,152,1,
- 152,57,212,8,37,240,2,17,9,21,244,14,0,40,64,1,
- 211,39,65,209,12,36,136,72,160,4,220,17,28,152,88,212,
- 17,38,168,43,220,17,31,160,9,213,17,42,216,30,41,215,
- 30,48,209,30,48,215,30,57,209,30,57,144,11,220,23,32,
- 160,20,176,76,216,36,44,184,8,243,3,1,24,66,1,223,
- 66,70,193,36,195,38,247,7,0,18,43,208,17,42,247,3,
- 0,18,39,208,17,38,240,12,3,13,21,220,16,19,151,8,
- 145,8,151,15,145,15,160,9,213,16,42,248,220,19,29,243,
- 0,1,13,21,217,16,20,240,3,1,13,21,250,247,15,0,
- 18,43,213,17,42,250,208,17,42,247,3,0,18,39,215,17,
- 38,214,17,38,250,240,12,3,13,21,220,16,19,151,8,145,
+ 0,82,39,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,85,0,53,1,0,0,0,0,0,0,32,
+ 0,103,1,33,0,91,40,0,0,0,0,0,0,0,0,7,
+ 0,97,3,0,0,32,0,31,0,103,1,102,0,61,3,31,
+ 0,102,1,33,0,30,0,91,18,0,0,0,0,0,0,0,
+ 0,82,20,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,82,39,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,85,0,53,1,0,0,0,
+ 0,0,0,32,0,102,0,33,0,91,40,0,0,0,0,0,
+ 0,0,0,7,0,97,3,0,0,32,0,31,0,102,0,102,
+ 0,61,3,31,0,102,1,61,3,31,0,102,1,41,7,117,
+ 216,1,0,0,69,120,101,99,117,116,101,32,99,111,100,101,
+ 32,108,111,99,97,116,101,100,32,97,116,32,116,104,101,32,
+ 115,112,101,99,105,102,105,101,100,32,102,105,108,101,115,121,
+ 115,116,101,109,32,108,111,99,97,116,105,111,110,46,10,10,
+ 112,97,116,104,95,110,97,109,101,32,45,45,32,102,105,108,
+ 101,115,121,115,116,101,109,32,108,111,99,97,116,105,111,110,
+ 32,111,102,32,97,32,80,121,116,104,111,110,32,115,99,114,
+ 105,112,116,44,32,122,105,112,102,105,108,101,44,10,111,114,
+ 32,100,105,114,101,99,116,111,114,121,32,99,111,110,116,97,
+ 105,110,105,110,103,32,97,32,116,111,112,32,108,101,118,101,
+ 108,32,95,95,109,97,105,110,95,95,46,112,121,32,115,99,
+ 114,105,112,116,46,10,10,79,112,116,105,111,110,97,108,32,
+ 97,114,103,117,109,101,110,116,115,58,10,105,110,105,116,95,
+ 103,108,111,98,97,108,115,32,45,45,32,100,105,99,116,105,
+ 111,110,97,114,121,32,117,115,101,100,32,116,111,32,112,114,
+ 101,45,112,111,112,117,108,97,116,101,32,116,104,101,32,109,
+ 111,100,117,108,101,226,128,153,115,10,103,108,111,98,97,108,
+ 115,32,100,105,99,116,105,111,110,97,114,121,32,98,101,102,
+ 111,114,101,32,116,104,101,32,99,111,100,101,32,105,115,32,
+ 101,120,101,99,117,116,101,100,46,10,10,114,117,110,95,110,
+ 97,109,101,32,45,45,32,105,102,32,110,111,116,32,78,111,
+ 110,101,44,32,116,104,105,115,32,119,105,108,108,32,98,101,
+ 32,117,115,101,100,32,116,111,32,115,101,116,32,95,95,110,
+ 97,109,101,95,95,59,10,111,116,104,101,114,119,105,115,101,
+ 44,32,39,60,114,117,110,95,112,97,116,104,62,39,32,119,
+ 105,108,108,32,98,101,32,117,115,101,100,32,102,111,114,32,
+ 95,95,110,97,109,101,95,95,46,10,10,82,101,116,117,114,
+ 110,115,32,116,104,101,32,114,101,115,117,108,116,105,110,103,
+ 32,109,111,100,117,108,101,32,103,108,111,98,97,108,115,32,
+ 100,105,99,116,105,111,110,97,114,121,46,10,78,122,10,60,
+ 114,117,110,95,112,97,116,104,62,114,83,0,0,0,114,2,
+ 0,0,0,41,1,218,12,103,101,116,95,105,109,112,111,114,
+ 116,101,114,41,2,114,71,0,0,0,114,72,0,0,0,41,
+ 21,114,91,0,0,0,114,139,0,0,0,114,150,0,0,0,
+ 114,140,0,0,0,218,8,102,115,100,101,99,111,100,101,218,
+ 10,105,115,105,110,115,116,97,110,99,101,114,105,0,0,0,
+ 114,148,0,0,0,114,80,0,0,0,114,22,0,0,0,114,
+ 134,0,0,0,218,6,105,110,115,101,114,116,114,122,0,0,
+ 0,114,6,0,0,0,114,41,0,0,0,114,12,0,0,0,
+ 114,76,0,0,0,114,74,0,0,0,114,77,0,0,0,218,
+ 6,114,101,109,111,118,101,114,103,0,0,0,41,11,218,9,
+ 112,97,116,104,95,110,97,109,101,114,69,0,0,0,114,130,
+ 0,0,0,114,71,0,0,0,114,150,0,0,0,218,8,105,
+ 109,112,111,114,116,101,114,114,67,0,0,0,114,10,0,0,
+ 0,114,70,0,0,0,114,78,0,0,0,114,79,0,0,0,
+ 115,11,0,0,0,32,32,32,32,32,32,32,32,32,32,32,
+ 114,16,0,0,0,114,4,0,0,0,114,4,0,0,0,13,
+ 1,0,0,115,116,1,0,0,128,0,240,30,0,8,16,209,
+ 7,23,216,19,31,136,8,216,15,23,215,15,34,209,15,34,
+ 160,51,211,15,39,168,1,209,15,42,128,72,221,4,36,217,
+ 15,27,152,73,211,15,38,128,72,220,16,18,151,11,146,11,
+ 152,73,211,16,38,128,73,220,7,17,144,40,156,68,160,20,
+ 155,74,215,7,39,209,7,39,244,6,0,16,35,160,57,211,
+ 15,45,136,4,220,15,31,160,4,176,72,216,41,49,241,3,
+ 1,16,74,1,240,0,1,9,74,1,244,10,0,9,12,143,
+ 8,137,8,143,15,137,15,152,1,152,57,212,8,37,240,2,
+ 17,9,21,244,14,0,40,64,1,211,39,65,209,12,36,136,
+ 72,160,4,220,17,28,152,88,212,17,38,168,43,220,17,31,
+ 160,9,213,17,42,216,30,41,215,30,48,209,30,48,215,30,
+ 57,209,30,57,144,11,220,23,32,160,20,176,76,216,36,44,
+ 184,8,243,3,1,24,66,1,223,66,70,193,36,195,38,247,
+ 7,0,18,43,208,17,42,247,3,0,18,39,208,17,38,240,
+ 12,3,13,21,220,16,19,151,8,145,8,151,15,145,15,160,
+ 9,213,16,42,248,220,19,29,243,0,1,13,21,217,16,20,
+ 240,3,1,13,21,250,247,15,0,18,43,213,17,42,250,208,
+ 17,42,247,3,0,18,39,215,17,38,214,17,38,250,240,12,
+ 3,13,21,220,16,19,151,8,145,8,151,15,145,15,160,9,
+ 213,16,42,248,220,19,29,243,0,1,13,21,217,16,20,240,
+ 3,1,13,21,251,240,5,3,13,21,220,16,19,151,8,145,
8,151,15,145,15,160,9,213,16,42,248,220,19,29,243,0,
- 1,13,21,217,16,20,240,3,1,13,21,251,240,5,3,13,
- 21,220,16,19,151,8,145,8,151,15,145,15,160,9,213,16,
- 42,248,220,19,29,243,0,1,13,21,217,16,20,240,3,1,
- 13,21,253,115,138,0,0,0,194,15,24,70,5,0,194,39,
- 12,69,3,3,194,51,50,68,40,5,195,37,9,69,3,3,
- 195,46,9,70,5,0,195,56,31,68,24,2,196,24,10,68,
- 37,5,196,36,1,68,37,5,196,40,10,68,54,9,196,50,
- 7,69,3,3,196,58,9,70,5,0,197,3,10,69,17,7,
- 197,13,7,70,5,0,197,21,31,69,53,0,197,53,10,70,
- 2,3,198,1,1,70,2,3,198,5,1,70,55,3,198,7,
- 31,70,39,4,198,38,1,70,55,3,198,39,10,70,52,7,
- 198,49,2,70,55,3,198,51,1,70,52,7,198,52,3,70,
- 55,3,114,86,0,0,0,233,2,0,0,0,122,33,78,111,
- 32,109,111,100,117,108,101,32,115,112,101,99,105,102,105,101,
- 100,32,102,111,114,32,101,120,101,99,117,116,105,111,110,41,
- 1,218,4,102,105,108,101,41,5,78,78,78,78,78,41,1,
- 84,41,3,78,78,70,41,2,78,78,41,29,114,37,0,0,
- 0,114,22,0,0,0,218,19,105,109,112,111,114,116,108,105,
- 98,46,109,97,99,104,105,110,101,114,121,114,97,0,0,0,
- 218,14,105,109,112,111,114,116,108,105,98,46,117,116,105,108,
- 114,140,0,0,0,114,138,0,0,0,218,7,95,95,97,108,
- 108,95,95,114,104,0,0,0,114,11,0,0,0,114,45,0,
- 0,0,114,6,0,0,0,114,41,0,0,0,114,74,0,0,
- 0,114,80,0,0,0,114,90,0,0,0,114,106,0,0,0,
- 218,9,69,120,99,101,112,116,105,111,110,114,117,0,0,0,
- 114,126,0,0,0,114,3,0,0,0,114,120,0,0,0,114,
- 146,0,0,0,114,4,0,0,0,114,33,0,0,0,218,3,
- 108,101,110,114,51,0,0,0,218,5,112,114,105,110,116,218,
- 6,115,116,100,101,114,114,114,39,0,0,0,114,19,0,0,
- 0,114,16,0,0,0,218,8,60,109,111,100,117,108,101,62,
- 114,164,0,0,0,1,0,0,0,115,246,0,0,0,240,3,
- 1,1,1,241,2,7,1,4,243,24,0,1,11,219,0,26,
- 219,0,21,219,0,9,219,0,9,240,6,0,5,17,144,42,
- 240,3,2,11,2,128,7,241,10,0,14,18,144,35,139,89,
- 128,10,244,4,21,1,32,144,38,244,0,21,1,32,244,46,
- 13,1,40,144,86,244,0,13,1,40,240,32,0,47,51,216,
- 38,42,216,41,45,244,5,24,1,23,240,52,0,41,45,216,
- 44,48,216,47,51,244,5,11,1,30,240,28,0,41,52,244,
- 0,59,1,32,244,122,1,1,1,77,1,136,89,244,0,1,
- 1,77,1,244,14,26,1,43,240,56,0,39,43,216,40,45,
- 244,3,28,1,69,1,240,60,0,36,47,244,0,16,1,44,
- 242,38,10,1,16,244,24,48,1,21,240,102,1,0,4,12,
- 136,122,211,3,25,225,7,10,136,51,143,56,137,56,131,125,
- 144,113,211,7,24,217,8,13,208,14,49,184,3,191,10,185,
- 10,211,8,67,224,12,15,143,72,137,72,144,81,136,75,217,
- 8,27,152,67,159,72,153,72,160,81,153,75,213,8,40,240,
- 13,0,4,26,114,19,0,0,0,
+ 1,13,21,217,16,20,240,3,1,13,21,253,115,138,0,0,
+ 0,194,15,24,70,5,0,194,39,12,69,3,3,194,51,50,
+ 68,40,5,195,37,9,69,3,3,195,46,9,70,5,0,195,
+ 56,31,68,24,2,196,24,10,68,37,5,196,36,1,68,37,
+ 5,196,40,10,68,54,9,196,50,7,69,3,3,196,58,9,
+ 70,5,0,197,3,10,69,17,7,197,13,7,70,5,0,197,
+ 21,31,69,53,0,197,53,10,70,2,3,198,1,1,70,2,
+ 3,198,5,1,70,55,3,198,7,31,70,39,4,198,38,1,
+ 70,55,3,198,39,10,70,52,7,198,49,2,70,55,3,198,
+ 51,1,70,52,7,198,52,3,70,55,3,114,87,0,0,0,
+ 233,2,0,0,0,122,33,78,111,32,109,111,100,117,108,101,
+ 32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,101,
+ 120,101,99,117,116,105,111,110,41,1,218,4,102,105,108,101,
+ 41,5,78,78,78,78,78,41,1,84,41,3,78,78,70,41,
+ 2,78,78,41,29,114,37,0,0,0,114,22,0,0,0,218,
+ 19,105,109,112,111,114,116,108,105,98,46,109,97,99,104,105,
+ 110,101,114,121,114,98,0,0,0,218,14,105,109,112,111,114,
+ 116,108,105,98,46,117,116,105,108,114,142,0,0,0,114,140,
+ 0,0,0,218,7,95,95,97,108,108,95,95,114,105,0,0,
+ 0,114,11,0,0,0,114,45,0,0,0,114,6,0,0,0,
+ 114,41,0,0,0,114,74,0,0,0,114,80,0,0,0,114,
+ 89,0,0,0,114,107,0,0,0,218,9,69,120,99,101,112,
+ 116,105,111,110,114,119,0,0,0,114,128,0,0,0,114,3,
+ 0,0,0,114,122,0,0,0,114,148,0,0,0,114,4,0,
+ 0,0,114,33,0,0,0,218,3,108,101,110,114,51,0,0,
+ 0,218,5,112,114,105,110,116,218,6,115,116,100,101,114,114,
+ 114,39,0,0,0,114,19,0,0,0,114,16,0,0,0,218,
+ 8,60,109,111,100,117,108,101,62,114,166,0,0,0,1,0,
+ 0,0,115,247,0,0,0,240,3,1,1,1,241,2,7,1,
+ 4,243,24,0,1,11,219,0,26,219,0,21,219,0,9,219,
+ 0,9,240,6,0,5,17,144,42,240,3,2,11,2,128,7,
+ 241,10,0,14,18,144,35,139,89,128,10,244,4,21,1,32,
+ 144,38,244,0,21,1,32,244,46,13,1,40,144,86,244,0,
+ 13,1,40,240,32,0,47,51,216,38,42,216,41,45,244,5,
+ 24,1,23,240,52,0,41,45,216,44,48,216,47,51,244,5,
+ 11,1,30,240,28,0,41,52,244,0,64,1,1,32,244,68,
+ 2,1,1,77,1,136,89,244,0,1,1,77,1,244,14,26,
+ 1,43,240,56,0,39,43,216,40,45,244,3,28,1,69,1,
+ 240,60,0,36,47,244,0,18,1,44,242,42,10,1,16,244,
+ 24,48,1,21,240,102,1,0,4,12,136,122,211,3,25,225,
+ 7,10,136,51,143,56,137,56,131,125,144,113,211,7,24,217,
+ 8,13,208,14,49,184,3,191,10,185,10,211,8,67,224,12,
+ 15,143,72,137,72,144,81,136,75,217,8,27,152,67,159,72,
+ 153,72,160,81,153,75,213,8,40,240,13,0,4,26,114,19,
+ 0,0,0,
};
diff --git a/contrib/tools/python3/Python/hamt.c b/contrib/tools/python3/Python/hamt.c
index a9f811f4422..98c8cc3192a 100644
--- a/contrib/tools/python3/Python/hamt.c
+++ b/contrib/tools/python3/Python/hamt.c
@@ -718,6 +718,7 @@ hamt_node_bitmap_assoc(PyHamtNode_Bitmap *self,
PyHamtNode_Bitmap *ret = hamt_node_bitmap_clone(self);
if (ret == NULL) {
+ Py_DECREF(sub_node);
return NULL;
}
Py_SETREF(ret->b_array[val_idx], (PyObject*)sub_node);
@@ -1010,6 +1011,7 @@ hamt_node_bitmap_without(PyHamtNode_Bitmap *self,
PyHamtNode_Bitmap *clone = hamt_node_bitmap_clone(self);
if (clone == NULL) {
+ Py_DECREF(sub_node);
return W_ERROR;
}
diff --git a/contrib/tools/python3/Python/import.c b/contrib/tools/python3/Python/import.c
index 456f6c40b54..f9317bb8042 100644
--- a/contrib/tools/python3/Python/import.c
+++ b/contrib/tools/python3/Python/import.c
@@ -2986,7 +2986,7 @@ find_frozen(PyObject *nameobj, struct frozen_info *info)
if (nameobj == NULL || nameobj == Py_None) {
return FROZEN_BAD_NAME;
}
- const char *name = PyUnicode_AsUTF8(nameobj);
+ const char *name = _PyUnicode_AsUTF8NoNUL(nameobj);
if (name == NULL) {
// Note that this function previously used
// _PyUnicode_EqualToASCIIString(). We clear the error here
@@ -4319,13 +4319,14 @@ _imp.acquire_lock
Acquires the interpreter's import lock for the current thread.
-This lock should be used by import hooks to ensure thread-safety when importing
-modules. On platforms without threads, this function does nothing.
+This lock should be used by import hooks to ensure thread-safety when
+importing modules. On platforms without threads, this function does
+nothing.
[clinic start generated code]*/
static PyObject *
_imp_acquire_lock_impl(PyObject *module)
-/*[clinic end generated code: output=1aff58cb0ee1b026 input=4a2d4381866d5fdc]*/
+/*[clinic end generated code: output=1aff58cb0ee1b026 input=60e9c1b4ab471ead]*/
{
PyInterpreterState *interp = _PyInterpreterState_GET();
_PyImport_AcquireLock(interp);
diff --git a/contrib/tools/python3/Python/lock.c b/contrib/tools/python3/Python/lock.c
index 24c404a1246..6def8567b11 100644
--- a/contrib/tools/python3/Python/lock.c
+++ b/contrib/tools/python3/Python/lock.c
@@ -210,7 +210,16 @@ _PyRawMutex_LockSlow(_PyRawMutex *m)
// Wait for us to be woken up. Note that we still have to lock the
// mutex ourselves: it is NOT handed off to us.
- _PySemaphore_Wait(&waiter.sema, -1, /*detach=*/0);
+ //
+ // Loop until we observe an actual wakeup. A return of Py_PARK_INTR
+ // could otherwise let us exit _PySemaphore_Wait and destroy
+ // `waiter.sema` while _PyRawMutex_UnlockSlow's matching
+ // _PySemaphore_Wakeup is still pending, since the unlocker has
+ // already CAS-removed us from the waiter list without any handshake.
+ int res;
+ do {
+ res = _PySemaphore_Wait(&waiter.sema, -1, /*detach=*/0);
+ } while (res != Py_PARK_OK);
}
_PySemaphore_Destroy(&waiter.sema);
diff --git a/contrib/tools/python3/Python/marshal.c b/contrib/tools/python3/Python/marshal.c
index 65481341bdf..1bbce41d65f 100644
--- a/contrib/tools/python3/Python/marshal.c
+++ b/contrib/tools/python3/Python/marshal.c
@@ -310,7 +310,6 @@ static int
w_ref(PyObject *v, char *flag, WFILE *p)
{
_Py_hashtable_entry_t *entry;
- int w;
if (p->version < 3 || p->hashtable == NULL)
return 0; /* not writing object references */
@@ -327,20 +326,28 @@ w_ref(PyObject *v, char *flag, WFILE *p)
entry = _Py_hashtable_get_entry(p->hashtable, v);
if (entry != NULL) {
/* write the reference index to the stream */
- w = (int)(uintptr_t)entry->value;
+ uintptr_t w = (uintptr_t)entry->value;
+ if (w & 0x80000000LU) {
+ PyErr_Format(PyExc_ValueError, "cannot marshal recursion %T objects", v);
+ goto err;
+ }
/* we don't store "long" indices in the dict */
- assert(0 <= w && w <= 0x7fffffff);
+ assert(w <= 0x7fffffff);
w_byte(TYPE_REF, p);
- w_long(w, p);
+ w_long((int)w, p);
return 1;
} else {
- size_t s = p->hashtable->nentries;
+ size_t w = p->hashtable->nentries;
/* we don't support long indices */
- if (s >= 0x7fffffff) {
+ if (w >= 0x7fffffff) {
PyErr_SetString(PyExc_ValueError, "too many objects");
goto err;
}
- w = (int)s;
+ // Corresponding code should call w_complete() after
+ // writing the object.
+ if (PyCode_Check(v)) {
+ w |= 0x80000000LU;
+ }
if (_Py_hashtable_set(p->hashtable, Py_NewRef(v),
(void *)(uintptr_t)w) < 0) {
Py_DECREF(v);
@@ -355,6 +362,27 @@ err:
}
static void
+w_complete(PyObject *v, WFILE *p)
+{
+ if (p->version < 3 || p->hashtable == NULL) {
+ return;
+ }
+ if (Py_REFCNT(v) == 1) {
+ return;
+ }
+
+ _Py_hashtable_entry_t *entry = _Py_hashtable_get_entry(p->hashtable, v);
+ if (entry == NULL) {
+ return;
+ }
+ assert(entry != NULL);
+ uintptr_t w = (uintptr_t)entry->value;
+ assert(w & 0x80000000LU);
+ w &= ~0x80000000LU;
+ entry->value = (void *)(uintptr_t)w;
+}
+
+static void
w_complex_object(PyObject *v, char flag, WFILE *p);
static void
@@ -603,6 +631,7 @@ w_complex_object(PyObject *v, char flag, WFILE *p)
w_object(co->co_linetable, p);
w_object(co->co_exceptiontable, p);
Py_DECREF(co_code);
+ w_complete(v, p);
}
else if (PyObject_CheckBuffer(v)) {
/* Write unknown bytes-like objects as a bytes object */
@@ -1458,7 +1487,7 @@ r_object(RFILE *p)
goto code_error;
firstlineno = (int)r_long(p);
if (firstlineno == -1 && PyErr_Occurred())
- break;
+ goto code_error;
linetable = r_object(p);
if (linetable == NULL)
goto code_error;
@@ -1866,14 +1895,14 @@ marshal.dumps
Return the bytes object that would be written to a file by dump(value, file).
-Raise a ValueError exception if value has (or contains an object that has) an
-unsupported type.
+Raise a ValueError exception if value has (or contains an object that
+has) an unsupported type.
[clinic start generated code]*/
static PyObject *
marshal_dumps_impl(PyObject *module, PyObject *value, int version,
int allow_code)
-/*[clinic end generated code: output=115f90da518d1d49 input=167eaecceb63f0a8]*/
+/*[clinic end generated code: output=115f90da518d1d49 input=d9609c4dee4507fb]*/
{
return _PyMarshal_WriteObjectToString(value, version, allow_code);
}
@@ -1889,13 +1918,13 @@ marshal.loads
Convert the bytes-like object to a value.
-If no valid value is found, raise EOFError, ValueError or TypeError. Extra
-bytes in the input are ignored.
+If no valid value is found, raise EOFError, ValueError or TypeError.
+Extra bytes in the input are ignored.
[clinic start generated code]*/
static PyObject *
marshal_loads_impl(PyObject *module, Py_buffer *bytes, int allow_code)
-/*[clinic end generated code: output=62c0c538d3edc31f input=14de68965b45aaa7]*/
+/*[clinic end generated code: output=62c0c538d3edc31f input=286f1dbd6811d2ad]*/
{
RFILE rf;
char *s = bytes->buf;
diff --git a/contrib/tools/python3/Python/parking_lot.c b/contrib/tools/python3/Python/parking_lot.c
index a7e9760e35d..48577be4735 100644
--- a/contrib/tools/python3/Python/parking_lot.c
+++ b/contrib/tools/python3/Python/parking_lot.c
@@ -61,7 +61,9 @@ _PySemaphore_Init(_PySemaphore *sema)
NULL // unnamed
);
if (!sema->platform_sem) {
- Py_FatalError("parking_lot: CreateSemaphore failed");
+ _Py_FatalErrorFormat(__func__,
+ "parking_lot: CreateSemaphore failed (error: %u)",
+ GetLastError());
}
#elif defined(_Py_USE_SEMAPHORES)
if (sem_init(&sema->platform_sem, /*pshared=*/0, /*value=*/0) < 0) {
@@ -229,7 +231,9 @@ _PySemaphore_Wakeup(_PySemaphore *sema)
{
#if defined(MS_WINDOWS)
if (!ReleaseSemaphore(sema->platform_sem, 1, NULL)) {
- Py_FatalError("parking_lot: ReleaseSemaphore failed");
+ _Py_FatalErrorFormat(__func__,
+ "parking_lot: ReleaseSemaphore failed (error: %u, handle: %p)",
+ GetLastError(), sema->platform_sem);
}
#elif defined(_Py_USE_SEMAPHORES)
int err = sem_post(&sema->platform_sem);
diff --git a/contrib/tools/python3/Python/perf_jit_trampoline.c b/contrib/tools/python3/Python/perf_jit_trampoline.c
index b03da66e92e..3901df7f17d 100644
--- a/contrib/tools/python3/Python/perf_jit_trampoline.c
+++ b/contrib/tools/python3/Python/perf_jit_trampoline.c
@@ -405,6 +405,9 @@ enum {
DWRF_CFA_offset_extended_sf = 0x11, // Extended signed offset
DWRF_CFA_advance_loc = 0x40, // Advance location counter
DWRF_CFA_offset = 0x80, // Simple offset instruction
+#if defined(__aarch64__)
+ DWRF_CFA_AARCH64_negate_ra_state = 0x2d, // Toggle return address signing state
+#endif
DWRF_CFA_restore = 0xc0 // Restore register
};
@@ -923,6 +926,13 @@ static void elf_init_ehframe(ELFObjectContext* ctx) {
DWRF_UV(8); // New offset: SP + 8
#elif defined(__aarch64__) && defined(__AARCH64EL__) && !defined(__ILP32__)
/* AArch64 calling convention unwinding rules */
+#if defined(__ARM_FEATURE_PAC_DEFAULT) || \
+ (defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1)
+ DWRF_U8(DWRF_CFA_advance_loc | 1); // Advance past SIGN_LR (4 bytes)
+#endif
+#if defined(__ARM_FEATURE_PAC_DEFAULT)
+ DWRF_U8(DWRF_CFA_AARCH64_negate_ra_state); // Saved LR is PAC-signed from here
+#endif
DWRF_U8(DWRF_CFA_advance_loc | 1); // Advance by 1 instruction (4 bytes)
DWRF_U8(DWRF_CFA_def_cfa_offset); // CFA = SP + 16
DWRF_UV(16); // Stack pointer moved by 16 bytes
@@ -931,6 +941,9 @@ static void elf_init_ehframe(ELFObjectContext* ctx) {
DWRF_U8(DWRF_CFA_offset | DWRF_REG_RA); // x30 (link register) saved
DWRF_UV(1); // At CFA-8 (1 * 8 = 8 bytes from CFA)
DWRF_U8(DWRF_CFA_advance_loc | 3); // Advance by 3 instructions (12 bytes)
+#if defined(__ARM_FEATURE_PAC_DEFAULT)
+ DWRF_U8(DWRF_CFA_AARCH64_negate_ra_state); // LR is authenticated, no longer PAC-signed
+#endif
DWRF_U8(DWRF_CFA_restore | DWRF_REG_RA); // Restore x30 - NO DWRF_UV() after this!
DWRF_U8(DWRF_CFA_restore | DWRF_REG_FP); // Restore x29 - NO DWRF_UV() after this!
DWRF_U8(DWRF_CFA_def_cfa_offset); // CFA = SP + 0 (stack restored)
diff --git a/contrib/tools/python3/Python/perf_trampoline.c b/contrib/tools/python3/Python/perf_trampoline.c
index 7ef9eca11f5..e296605c16a 100644
--- a/contrib/tools/python3/Python/perf_trampoline.c
+++ b/contrib/tools/python3/Python/perf_trampoline.c
@@ -211,9 +211,8 @@ enum perf_trampoline_type {
static void free_code_arenas(void);
static void
-perf_trampoline_reset_state(void)
+perf_trampoline_clear_code_watcher(void)
{
- free_code_arenas();
if (code_watcher_id >= 0) {
PyCode_ClearWatcher(code_watcher_id);
code_watcher_id = -1;
@@ -221,6 +220,13 @@ perf_trampoline_reset_state(void)
extra_code_index = -1;
}
+static void
+perf_trampoline_reset_state(void)
+{
+ free_code_arenas();
+ perf_trampoline_clear_code_watcher();
+}
+
static int
perf_trampoline_code_watcher(PyCodeEvent event, PyCodeObject *co)
{
@@ -623,9 +629,10 @@ _PyPerfTrampoline_AfterFork_Child(void)
// After fork, Fini may leave the old code watcher registered
// if trampolined code objects from the parent still exist
// (trampoline_refcount > 0). Clear it unconditionally before
- // Init registers a new one, to prevent two watchers sharing
- // the same globals and double-decrementing trampoline_refcount.
- perf_trampoline_reset_state();
+ // Init registers a new one, but keep the old arenas mapped: the
+ // child may still need to return through trampoline frames that
+ // were on the C stack at fork().
+ perf_trampoline_clear_code_watcher();
_PyPerfTrampoline_Init(1);
}
}
diff --git a/contrib/tools/python3/Python/pylifecycle.c b/contrib/tools/python3/Python/pylifecycle.c
index 8ba9b2bd006..fbbc38bc8e1 100644
--- a/contrib/tools/python3/Python/pylifecycle.c
+++ b/contrib/tools/python3/Python/pylifecycle.c
@@ -2976,7 +2976,9 @@ apple_log_write_impl(PyObject *self, PyObject *args)
// Pass the user-provided text through explicit %s formatting
// to avoid % literals being interpreted as a formatting directive.
- os_log_with_type(OS_LOG_DEFAULT, logtype, "%s", text);
+ // Using {public} ensures "dynamic" string messages are visible
+ // in the log without special configuration.
+ os_log_with_type(OS_LOG_DEFAULT, logtype, "%{public}s", text);
Py_RETURN_NONE;
}
diff --git a/contrib/tools/python3/Python/pythonrun.c b/contrib/tools/python3/Python/pythonrun.c
index 632d2c56a67..0acb92e96ef 100644
--- a/contrib/tools/python3/Python/pythonrun.c
+++ b/contrib/tools/python3/Python/pythonrun.c
@@ -1150,6 +1150,7 @@ _PyErr_Display(PyObject *file, PyObject *unused, PyObject *value, PyObject *tb)
if (print_exception_fn == NULL || !PyCallable_Check(print_exception_fn)) {
Py_DECREF(traceback_module);
+ Py_XDECREF(print_exception_fn);
goto fallback;
}
diff --git a/contrib/tools/python3/Python/sysmodule.c b/contrib/tools/python3/Python/sysmodule.c
index 782c595d2ab..dee03208b9a 100644
--- a/contrib/tools/python3/Python/sysmodule.c
+++ b/contrib/tools/python3/Python/sysmodule.c
@@ -1782,7 +1782,7 @@ sys_getwindowsversion_impl(PyObject *module)
PyObject *realVersion = _sys_getwindowsversion_from_kernel32();
if (!realVersion) {
if (!PyErr_ExceptionMatches(PyExc_WindowsError)) {
- return NULL;
+ goto error;
}
PyErr_Clear();
@@ -2329,12 +2329,13 @@ sys._stats_dump -> bool
Dump stats to file, and clears the stats.
-Return False if no statistics were not dumped because stats gathering was off.
+Return False if no statistics were not dumped because stats gathering
+was off.
[clinic start generated code]*/
static int
sys__stats_dump_impl(PyObject *module)
-/*[clinic end generated code: output=6e346b4ba0de4489 input=31a489e39418b2a5]*/
+/*[clinic end generated code: output=6e346b4ba0de4489 input=7f3b7758cb59d2ff]*/
{
int res = _Py_PrintSpecializationStats(1);
_Py_StatsClear();
diff --git a/contrib/tools/python3/README.rst b/contrib/tools/python3/README.rst
index df4ec5ab666..480a559cb79 100644
--- a/contrib/tools/python3/README.rst
+++ b/contrib/tools/python3/README.rst
@@ -1,4 +1,4 @@
-This is Python version 3.13.13
+This is Python version 3.13.14
==============================
.. image:: https://github.com/python/cpython/workflows/Tests/badge.svg
diff --git a/contrib/tools/python3/bin/ya.make b/contrib/tools/python3/bin/ya.make
index b1890f2d42d..595d9a25bbc 100644
--- a/contrib/tools/python3/bin/ya.make
+++ b/contrib/tools/python3/bin/ya.make
@@ -2,9 +2,9 @@
PY3_PROGRAM(python3)
-VERSION(3.13.13)
+VERSION(3.13.14)
-ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.13.13.tar.gz)
+ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.13.14.tar.gz)
LICENSE(Python-2.0)
diff --git a/contrib/tools/python3/patches/pr151320.patch b/contrib/tools/python3/patches/pr151320.patch
new file mode 100644
index 00000000000..8e2f35618fe
--- /dev/null
+++ b/contrib/tools/python3/patches/pr151320.patch
@@ -0,0 +1,31 @@
+From 504cecd58b1409b6bb77d48f83ed77cac106892a Mon Sep 17 00:00:00 2001
+From: Serhiy Storchaka <[email protected]>
+Date: Thu, 11 Jun 2026 13:27:35 +0300
+Subject: [PATCH] [3.13] gh-150285: Fix merging error in GH-150458
+
+---
+ Lib/_pyio.py | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/Lib/_pyio.py b/Lib/_pyio.py
+index 4ac60b5ee15ff1c..7c1635cb3310695 100644
+--- a/Lib/_pyio.py
++++ b/Lib/_pyio.py
+@@ -125,15 +125,9 @@ def open(file, mode="r", buffering=-1, encoding=None, errors=None,
+ argument is given, the default buffering policy works as follows:
+
+ * Binary files are buffered in fixed-size chunks; the size of the buffer
+-<<<<<<< HEAD
+- is chosen using a heuristic trying to determine the underlying device's
+- "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`.
++ is chosen using a heuristic trying to determine the underlying
++ device's "block size" and falling back on `io.DEFAULT_BUFFER_SIZE`.
+ On many systems, the buffer will typically be 4096 or 8192 bytes long.
+-=======
+- is max(min(blocksize, 8 MiB), DEFAULT_BUFFER_SIZE) when the device
+- block size is available.
+- On most systems, the buffer will typically be 128 kilobytes long.
+->>>>>>> 36137e46a8c ([3.14] gh-150285: Fix too long docstrings in the io module (GH-150287) (GH-150458))
+
+ * "Interactive" text files (files for which isatty() returns True)
+ use line buffering. Other text files use the policy described above
diff --git a/contrib/tools/python3/ya.make b/contrib/tools/python3/ya.make
index 46d32007fe6..1b48be44e1b 100644
--- a/contrib/tools/python3/ya.make
+++ b/contrib/tools/python3/ya.make
@@ -2,9 +2,9 @@
LIBRARY()
-VERSION(3.13.13)
+VERSION(3.13.14)
-ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.13.13.tar.gz)
+ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.13.14.tar.gz)
LICENSE(Python-2.0)
@@ -180,6 +180,7 @@ SRCS(
Modules/_testlimitedcapi/tuple.c
Modules/_testlimitedcapi/unicode.c
Modules/_testlimitedcapi/vectorcall_limited.c
+ Modules/_testlimitedcapi/weakref.c
Modules/_threadmodule.c
Modules/_tracemalloc.c
Modules/_typingmodule.c